Problème pour faire tourner la macro sur x lignes
Mrgxaib
-
f894009 Messages postés 17417 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17417 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je suis vraiment novice sur VBA donc j'espère que mes explications seront claires.
J'ai commencé à coder une macro simple avec un recherchev sauf que la macro est écrite pour un nombre défini de lignes. Or, elle sera amenée à tourner sur des fichiers avec plus ou moins de lignes.
Je pensais faire une boucle jusqu'à ce qu'il y ait une case vide qui fasse arrêter la macro.
Quelqu'un pourrait m'aider et m'expliquer très simplement comment faire ?
Je précise encore une fois que je suis vraiment débutante sur VBA...
Merci de votre aide
Je suis vraiment novice sur VBA donc j'espère que mes explications seront claires.
J'ai commencé à coder une macro simple avec un recherchev sauf que la macro est écrite pour un nombre défini de lignes. Or, elle sera amenée à tourner sur des fichiers avec plus ou moins de lignes.
Je pensais faire une boucle jusqu'à ce qu'il y ait une case vide qui fasse arrêter la macro.
Quelqu'un pourrait m'aider et m'expliquer très simplement comment faire ?
Je précise encore une fois que je suis vraiment débutante sur VBA...
Merci de votre aide
5 réponses
-
Bonjour,
code pour arrêt sur cellule vide
Sub boucle_fonction_Nb_Ligne() With Worksheets("feuil1") NL = 2 Do x = .Cells(NL, 1) NL = NL + 1 Loop Until .Cells(NL, 1) = "" 'boucle jusqu'a une cellule vide colonne A End With End Sub-
-
-
Sub Macro1()
'
' Macro1 Macro
'
'
Range("AP8").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R[1]C[-1],'[EbaucheJuillet18.xlsx]Classement par chap'!R1:R1048576,2,FALSE)"
Range("AP8").Select
ActiveCell.FormulaR1C1 = ""
Range("AP9").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],'[EbaucheJuillet18.xlsx]Classement par chap'!R1:R1048576,2,FALSE)"
Range("AP9").Select
Selection.AutoFill Destination:=Range("AP9:AP442")
Range("AP9:AP442").Select
ActiveWindow.SmallScroll Down:=-27
End Sub
Pour le range("AP9:AP442"), même avec le code de Jordane45 cela va pouvoir chercher au delà de la ligne 442 ? -
-
-
Bonjour,
Pour trouver la dernière ligne "non vide", tu peux utiliserDerniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Il te suffit ensuite d'utiliser cette variable pour définir ta plage de cellules
-
Bonjour,
Pour analyser chaque cellule d'une colonne d'un tableau tu peux utiliser :Option Explicit Sub Test() Dim rng As Range Dim cel As Range Set rng = Worksheets("Feuil1").Range("A1").CurrentRegion.Columns(1) For Each cel In rng.Cells ' Ici le code pour chacune des cellules de la première colonne du tableau situé en A1 ' par exemple : If cel.Formula = "" Then Beep Next cel End SubAttention, un tableau ne doit pas comporter de ligne entièrement vide ni de colonne entièrement vide.
Sinon plus de précision sur la recherche d'une dernière cellule (ou première vide) ici :
https://forums.commentcamarche.net/forum/affich-37622001-vba-detection-de-cellule-vide-ligne-colonnne
-
Re,
En résumé si la colonne A fait partie de tes données :Option Explicit Sub Macro1() Dim rng As Range Dim cel As Range With ActiveSheet 'ou une autre feuille Set cel = .Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious) Set rng = .Range("AP8", cel.EntireRow.Columns("AP")) rng.FormulaR1C1 = _ "=VLOOKUP(R[1]C[-1],'[EbaucheJuillet18.xlsx]Classement par chap'!R1:R1048576,2,FALSE)" End With End Sub
sinon, remplaces "A1" par la 1ère cellule de la colonne 1 de ton tableau
-
Autre solution, pour un tableau qui commence en A7 (ligne des intitulés de colonne) :
Option Explicit Sub Macro1() Dim rng As Range With ActiveSheet 'ou une autre feuille Set rng = .Range("A7").CurrentRegion.EntireRow.Columns("AP") Set rng = Intersect(rng, rng.Offset(1)) rng.FormulaR1C1 = _ "=VLOOKUP(R[1]C[-1],'[EbaucheJuillet18.xlsx]Classement par chap'!R1:R1048576,2,FALSE)" End With End SubSi le tableau commence ailleurs, remplacer A7 par la première cellule du tableau
Si le tableau a plus d'une ligne d'intitulés, augmenter l'offset en conséquence. -
Merci à tous pour vous réponses, je commence à y voir plus clair mais mes connaissances très limitées me bloquent...
Je pensais utiliser le nombre de lignes et l'insérer directement dans la macro mais cela pose problème. Je vous montre en dessous. J'ai souligné où est le problème.
Sub NBLignes() Dim NbLig As Integer NbLig = Cells.SpecialCells(xlCellTypeLastCell).Row End Sub Sub Macro2() Range("AP8").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(R[1]C[-1],'[EbaucheJuillet18.xlsx]Classement par chap'!R1:R1048576,2,FALSE)" Range("AP8").Select ActiveCell.FormulaR1C1 = "" Range("AP9").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-1],'[EbaucheJuillet18.xlsx]Classement par chap'!R1:R1048576,2,FALSE)" Range("AP9").Select Selection.AutoFill Destination:=Range("AP9:<underline>APNbLig</underline>") Range("AP9:APNbLig").Select ActiveWindow.SmallScroll Down:=-27 End Sub
EDIT : Ajout des balises de code -
Pourquoi ne veux-tu pas adopter une des solutions proposées ?
Il est inutile d'utiliser Autofill, il suffit d'appliquer la formule à la plage concernée : c'est là tout l'intérêt de .FormulaR1C1
Et en VBA, il faut absolument éviter d'utiliser .Select
Comme tu ne donnes aucune précision sur la façon dont tu détermines la plage qui doit recevoir cette formule (on sait qu'elle commence en AP8 mais pas ce qui permet de savoir où elle se termine) il est difficile de t'aider plus que ça. -
Pour poster ton code sur le forum.... merci d'utiliser les BALISES DE CODE
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code -
Re,
Avec votre code, ceci devrait aller:
Sub Macro2() Range("AP8").FormulaR1C1 = "" With Range("AP9") .FormulaR1C1 = "=VLOOKUP(RC[-1],'[EbaucheJuillet18.xlsx]Classement par chap'!R1:R1048576,2,FALSE)" .AutoFill Destination:=Range("AP9:APN" & Cells.SpecialCells(xlCellTypeLastCell).Row) End With End Sub
Mais pourquoi n'utilisez vous pas le code de Patrice33740, il montre pas mal de chose sur la programmation
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Je lance ma macro mais il s'avère que ça ne donne pas de résultats
Certes, certes, avec votre fichier et un exemple du fichier ebauche, ca serait plus facile de vous aider.......