Problème pour faire tourner la macro sur x lignes
Fermé
Mrgxaib
-
24 juil. 2018 à 09:12
f894009 Messages postés 17181 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 21 mars 2024 - 26 juil. 2018 à 11:39
f894009 Messages postés 17181 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 21 mars 2024 - 26 juil. 2018 à 11:39
A voir également:
- Problème pour faire tourner la macro sur x lignes
- Macro logiciel - Télécharger - Organisation
- Macro word - Guide
- Aller à la ligne sur excel - Guide
- Tourner l'écran - Guide
- Direct x runtime - Télécharger - Pilotes & Matériel
5 réponses
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
24 juil. 2018 à 11:06
24 juil. 2018 à 11:06
Bonjour,
code pour arrêt sur cellule vide
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
jordane45
Messages postés
38109
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 mars 2024
4 634
24 juil. 2018 à 11:11
24 juil. 2018 à 11:11
Bonjour,
Pour trouver la dernière ligne "non vide", tu peux utiliser
Il te suffit ensuite d'utiliser cette variable pour définir ta plage de cellules
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
jordane45
Messages postés
38109
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 mars 2024
4 634
24 juil. 2018 à 12:21
24 juil. 2018 à 12:21
rien
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
Modifié le 24 juil. 2018 à 11:36
Modifié le 24 juil. 2018 à 11:36
Bonjour,
Pour analyser chaque cellule d'une colonne d'un tableau tu peux utiliser :
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
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
Modifié le 24 juil. 2018 à 13:17
Modifié le 24 juil. 2018 à 13:17
Re,
En résumé si la colonne A fait partie de tes données :
sinon, remplaces "A1" par la 1ère cellule de la colonne 1 de ton tableau
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
24 juil. 2018 à 13:17
24 juil. 2018 à 13:17
Autre solution, pour un tableau qui commence en A7 (ligne des intitulés de colonne) :
Si le tableau a plus d'une ligne d'intitulés, augmenter l'offset en conséquence.
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.
EDIT : Ajout des balises de code
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
Modifié le 24 juil. 2018 à 16:49
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.
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.
jordane45
Messages postés
38109
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 mars 2024
4 634
>
Mrgxaib
24 juil. 2018 à 16:50
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
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
24 juil. 2018 à 16:58
24 juil. 2018 à 16:58
Re,
Avec votre code, ceci devrait aller:
Mais pourquoi n'utilisez vous pas le code de Patrice33740, il montre pas mal de chose sur la programmation
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
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
26 juil. 2018 à 11:39
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.......
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.......
24 juil. 2018 à 11:11
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 ?
24 juil. 2018 à 11:19
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
24 juil. 2018 à 11:28
'
' 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 ?
24 juil. 2018 à 11:45
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