Problème pour faire tourner la macro sur x lignes

Fermé
Mrgxaib - 24 juil. 2018 à 09:12
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 26 juil. 2018 à 11:39
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
A voir également:

5 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
24 juil. 2018 à 11:06
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
0
Tout d'abord, merci beaucoup !

Le second problème est pour initialiser pour que la macro "balaie" toutes les lignes, je dois modifier quelque chose dans mon code ?

Voulez vous que je vous envoie mon début de code ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
24 juil. 2018 à 11:19
Bonjour Jordane45,

Mrgxaib:
Y a rien a modifier puisque la boucle va s'arrêter a la premiere cellule vide dans la colonne testée a condition qu'il n'y ait pas de cellule(s) vides avant la dernière ligne
Autrement adaptez avec code de Jordane45
0
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 ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
24 juil. 2018 à 11:45
Re,
Salut Patrice33740

Mrgxaib:
Vu votre code, ce n'est pas une boucle de 1 a x fonction nb ligne, mais de rendre la Plage AP9:AP442 dynamique avec la recherche de la dernière ligne de la feuille du classeur ou vous allez chercher vos infos
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 juil. 2018 à 11:11
Bonjour,

Pour trouver la dernière ligne "non vide", tu peux utiliser
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row

Il te suffit ensuite d'utiliser cette variable pour définir ta plage de cellules
0
Merci, que dois je changer à la place de * ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 juil. 2018 à 12:21
rien
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 24 juil. 2018 à 11:36
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 Sub
Attention, 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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 24 juil. 2018 à 13:17
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

0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
24 juil. 2018 à 13:17
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 Sub
Si 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.
0
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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 24 juil. 2018 à 16:49
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.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Mrgxaib
24 juil. 2018 à 16:50
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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
24 juil. 2018 à 16:58
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
26 juil. 2018 à 11:39
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.......
0