vba excell variable texte dans cellule active impossible

vba excell variable texte dans cellule active impossible - VB/VBA/VBS - Programmation

Marsh Posté le 17-11-2009 à 00:28:52    

Bonjour,  
après des heures et des heures de recherche je m'en remets à vous pour résoudre mon problème.
Je ne suis pas expert, c'est pourquoi je crée mes programmes VBA en les extrayant de macros que j'enregistre sous Excell.
C'est pour mon travail que j'essaye d'extraire des données d'un fichier ne comportant qu'une colonne.
Celui-ci se présente ainsi en colonne A:
 0315  DMDE MATS. ALTUNET                   ENCOU  05/11/03    20-300    030  
   001 COMMANDE   6850 14 5036853  PRODUIT    ENCOU 06/11/03  00020  EXN      
     001 VAL. FICH. 6850 14 5036853             SOLDE 06/11/03  020          
     002 O.L. / MAG 6850 14 3932392             SOLDE 06/11/03  003          
   002 B M        LIVRAISON                   SOLDE 27/01/09  73204  071591  
0510  MATS PANNE PROTECTEUR SONDE TOTALE G ENCOU  20/03/07    20-300    030  
   001 MVT ORDON. 1730 12 1758665  PROTECTE   SOLDE 20/03/07  00001  SN      
   002 A REVERSER 1730 12 1758665  PROTECTE   SOLDE 27/03/07  00001  SN      
     001 ORD. RVST. 1730 12 1758665             SOLDE 27/03/07  001          
   003 COMMANDE   1730 12 1758665  PROTECTE   ENCOU 29/03/07  00001  FLN      
     001 O.L. / ATT 1730 12 1758665             ENCOU 29/03/07  001          
   004 MVT ORDON. 1730 12 1758665  PROTECTE   SOLDE 20/03/07  00001          
     001 REPOSE     1730 12 1758665             SOLDE 20/03/07  001          
   005 B M        REVERSEMENT INDISPONIBLE    SOLDE 27/03/07  73204  755430  
     001 RVST FAIT  1730 12 1758665             SOLDE 27/03/07  001          
     002 MISE > ELI 1730 12 1758665             SOLDE 27/03/07  001          
0511  MATS PANNE PROTECTEUR SONDE TOTALE G ENCOU  20/03/07    20-300    030  
   001 MVT ORDON. 1730 12 1758665  PROTECTE   SOLDE 20/03/07  00001  SN      
 
Vous aurez compris qu'il s'agit d'un fichier de commandes. Dans un premier temps je dois extraire dans une colonne le numéro de commande correspondant aux quatre premiers chiffres des lignes ne comportant pas d'espace en début. Jusque là tout va bien. Je veux ensuite combler les cellules vides entre les numéros de commande par celui inscrit plus haut.
 
Voici la macro que j'utilise :
 
Range("B1" ).Select
    Dim a As Integer
    'a sera le n° de la dernière ligne non vide
    Dim x As Integer
    'x sera la variable de la première boucle "for next" qui balayera toutes les lignes
    Dim bm As Variant
    'bm sera le dernier n° de bm inscrit
    ActiveCell.FormulaR1C1 = "=(MATCH(""*"",C[-1],60000))"
    a = ActiveCell.Value
    Selection.ClearContents
    bm = " "
 
    For x = 0 To a
            Cells(x + 1, 8).Select
             ActiveCell.FormulaR1C1 = "=IF(LEFT(RC[-7],1)="" "",= bm,LEFT(RC[-7],4))"
            bm = ActiveCell.Value
     Next x
     
Et voilà ce que cela me donne dans la colonne 8
 
0315
#NOM?
#NOM?
#NOM?
#NOM?
0510
#NOM?
#NOM?
#NOM?
#NOM?
#NOM?
#NOM?
#NOM?
#NOM?
#NOM?
#NOM?
0511
#NOM?
#NOM?
 
Alors que je voudrais comme résultat :
0315
0315
0315
0315
0510
0510
0510
0510
0510
0510
0510
0510
0510
0510
0510
0511
0511
0511
 
C'est la variable bm que je n'arrive pas à définir ou à affecter à la cellule active.
J'ai VBA pour Excel pour les nuls mais je dois être encore plus nul, j'ai essayé maintes et maintes instructions et je n'y arrive toujours pas.
J'espère avoir été assez clair et qu'une âme charitable parmi vous pourra me sortir de cette galère.
Merci

Reply

Marsh Posté le 17-11-2009 à 00:28:52   

Reply

Marsh Posté le 20-11-2009 à 00:37:11    

sidne a écrit :

Bonjour,  
après des heures et des heures de recherche je m'en remets à vous pour résoudre mon problème.
 
             ActiveCell.FormulaR1C1 = "=IF(LEFT(RC[-7],1)="" "",= bm,LEFT(RC[-7],4))"
            bm = ActiveCell.Value
   
C'est la variable bm que je n'arrive pas à définir ou à affecter à la cellule active.
J'ai VBA pour Excel pour les nuls mais je dois être encore plus nul, j'ai essayé maintes et maintes instructions et je n'y arrive toujours pas.
J'espère avoir été assez clair et qu'une âme charitable parmi vous pourra me sortir de cette galère.
Merci


 
 
NEIN !!!!
 
On ne peut pas affecter une variable de macro dans une formule de terrain !!! Elle ne représente évidemment plus rien à l'arrivée :pt1cable: !  Et on ne peut pas introduire au milieu ce signe égal en essayant de bidouiller un chmerdakès!!!  VERBOTEN!!!   :fou:  :fou:  :fou:  :kaola:  :kaola:  :kaola:  
 
je t'ai pondu cette petite macro qui donne le résultat que tu voulais. :sol:  
 
 MAIS, il y a DEUX contrainteS absolueS :ouch: :  
1) il ne doit y avoir aucune ligne vide dans l'ensemble à traiter, car la macro sélectionne TOUTES les cellules contigües à la cellule active, mais SEULEMENT celles-ci. est-ce clair? j'ai qud même placé une vérif par sécurité! = si il y a encore un bloc non traité, tu cliques dedans, et tu recommences, etc.
 
2) la ligne au-dessus doit être IMPERATIVEMENT VIDE, ou alors il faut introduire une ligne entre. j't'esplique: la formule fait appel à la VALEUR se trouvant au-dessus, donc elle ne peut pas appeler une ligne avant la ligne 1, évidemment.
 
voila la macro:
 
 
Sub Macro_ZZ()
ActiveCell.CurrentRegion.Columns(1).Select
  ActiveCell.CurrentRegion.Columns(2).FormulaR1C1 = "=IF(ISNUMBER(1*LEFT(RC1,2)),LEFT(RC1,4),R[-1]C)"
ActiveCell.CurrentRegion.Columns(2).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
    ActiveCell.CurrentRegion.Columns(1).TextToColumns Destination:=ActiveCell.Offset(0, 1), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 9), Array(4, 1))
     Columns(3).AutoFit
     DernRang = Range("A1" ).SpecialCells(xlLastCell).Row
        NbRangs = ActiveCell.CurrentRegion.Rows.Count
If DernRang <> NbRangs Then MsgBox ("Attention! la dernère ligne est la " & DernRang & " et ce bloc contient " & NbRangs & " lignes." )
ActiveCell.Offset(NbRangs + 3, -1).Select
 
End Sub
 
CQFD !
 :sol:  
 
 
 


---------------
Olympus OM-D  EM-5 + 14-42
Reply

Marsh Posté le 20-11-2009 à 00:49:10    

Laoo a écrit :


 
    ActiveCell.CurrentRegion.Columns(1).TextToColumns Destination:=ActiveCell.Offset(0, 1), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 9), Array(4, 1))
   


 Suite à la macro que je viens de t'envoyer, je te dois une précision sur cette ligne au-dessus: elle envoie en colonne C le reste de la ligne (moins donc les quatre premiers caractères, (chiffres, espaces, ou autres). Si elle te gène, tu la supprimes, ou mieux, tu mets une apostrophe en début de ligne.
 :jap:


---------------
Olympus OM-D  EM-5 + 14-42
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed