vba excell variable texte dans cellule active impossible - VB/VBA/VBS - Programmation
Marsh Posté le 20-11-2009 à 00:37:11
sidne a écrit : Bonjour, |
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 ! Et on ne peut pas introduire au milieu ce signe égal en essayant de bidouiller un chmerdakès!!! VERBOTEN!!!
je t'ai pondu cette petite macro qui donne le résultat que tu voulais.
MAIS, il y a DEUX contrainteS absolueS :
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 !
Marsh Posté le 20-11-2009 à 00:49:10
Laoo a écrit : |
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.
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