Boucle sur VBA
Résolu/Fermé
thyroox
Messages postés
34
Date d'inscription
jeudi 27 juillet 2017
Statut
Membre
Dernière intervention
25 février 2022
-
30 nov. 2017 à 15:37
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 - 1 déc. 2017 à 16:34
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 - 1 déc. 2017 à 16:34
3 réponses
thyroox
Messages postés
34
Date d'inscription
jeudi 27 juillet 2017
Statut
Membre
Dernière intervention
25 février 2022
1
30 nov. 2017 à 15:37
30 nov. 2017 à 15:37
Voici mon fichier :
https://mega.nz/#!tTAUhSLZ!qk_39FAxXsLpOJlEBABZgvrhNiOJQjJBZYN-rzEu5D8
https://mega.nz/#!tTAUhSLZ!qk_39FAxXsLpOJlEBABZgvrhNiOJQjJBZYN-rzEu5D8
jordane45
Messages postés
38319
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 novembre 2024
4 706
30 nov. 2017 à 16:24
30 nov. 2017 à 16:24
Bonjour,
Ta seconde boucle s'attaque à quelle feuille ?
A mon avis ... il faut le préciser dans ton code
Et puis, penses à travailler avec les objets plutôt que de répéter le nom des feuilles à chaque ligne de code.
Par exemple :
Ta seconde boucle s'attaque à quelle feuille ?
A mon avis ... il faut le préciser dans ton code
For K = 2 To LD If taFeuille.Cells(K, "N").Value = taFeuille.Cells(K, "Q").Value Then taFeuille.Cells(K, "Q").ClearContents Next K
Et puis, penses à travailler avec les objets plutôt que de répéter le nom des feuilles à chaque ligne de code.
Par exemple :
Sub TRANSFORMATION() Dim DL As Integer 'déclare la variable DL (Dernière Ligne) Dim I As Integer 'déclare la variable I (Incrément) Dim LD As Integer Dim K As Integer Dim sDPS As Worksheet Set sDPS = Sheets("DP Siège") Dim sT As Worksheet Set sT = Sheets("TEST") DL = sDPS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A LD = sT.Cells(Application.Rows.Count, "K").End(xlUp).Row For I = 6 To DL 'boucle sur toutes les lignes I de 3 à DL If sDPS.Cells(I, "AK").Value <> sDPS.Cells(I, "AN").Value And sDPS.Cells(I, "J").Value = "DP Siège" Then sT.Cells(I - 4, "K").Value = sDPS.Cells(I, "A").Value If sDPS.Cells(I, "AK").Value <> sDPS.Cells(I, "AN").Value And sDPS.Cells(I, "J").Value = "DP Siège" Then sT.Cells(I - 4, "L").Value = sDPS.Cells(I, "F").Value If sDPS.Cells(I, "AK").Value <> sDPS.Cells(I, "AN").Value And sDPS.Cells(I, "J").Value = "DP Siège" Then sT.Cells(I - 4, "Q").Value = sDPS.Cells(I, "AN").Value If sT.Cells(I - 4, "Q").Value = "PPK-002" Then sT.Cells(I - 4, "N").Value = sT.Cells(I - 4, "Q").Value Next
thyroox
Messages postés
34
Date d'inscription
jeudi 27 juillet 2017
Statut
Membre
Dernière intervention
25 février 2022
1
30 nov. 2017 à 16:33
30 nov. 2017 à 16:33
Hello,
Merci pour le conseil concernant les objets.
Toute la Macro s'attaque à la Feuille "TEST", de ce fait la deuxième boucle s'attaque bel et bien à la Feuille "TEST".
Merci pour le conseil concernant les objets.
Toute la Macro s'attaque à la Feuille "TEST", de ce fait la deuxième boucle s'attaque bel et bien à la Feuille "TEST".
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 710
1 déc. 2017 à 12:23
1 déc. 2017 à 12:23
Bonjour a vous deux,
Si j'ai bien compris:
Si j'ai bien compris:
Sub TRANSFORMATION() Dim DL As Integer 'déclare la variable DL (Dernière Ligne) Dim I As Integer 'déclare la variable I (Incrément) Dim LD As Integer Dim K As Integer Dim sDPS As Worksheet Dim sT As Worksheet Set sDPS = Sheets("DP Siège") Set sT = Sheets("TEST") With sDPS DL = .Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A For I = 6 To DL 'boucle sur toutes les lignes I de 3 à DL If .Cells(I, "AK").Value <> .Cells(I, "AN").Value And .Cells(I, "J").Value = "DP Siège" Then sT.Cells(I - 4, "K").Value = .Cells(I, "A").Value sT.Cells(I - 4, "L").Value = .Cells(I, "F").Value sT.Cells(I - 4, "Q").Value = .Cells(I, "AN").Value End If With sT If .Cells(I - 4, "Q").Value = "PPK-002" Then .Cells(I - 4, "N").Value = .Cells(I - 4, "Q").Value .Cells(I - 4, "Q").ClearContents End If End With Next I End With End Sub
thyroox
Messages postés
34
Date d'inscription
jeudi 27 juillet 2017
Statut
Membre
Dernière intervention
25 février 2022
1
1 déc. 2017 à 16:17
1 déc. 2017 à 16:17
Bonjour f894009,
Je vous remercie grandement pour votre aide, cela fonctionne :)
Cependant pouvez vous m'expliquer ce qui péchait dans mon code et ce pourquoi le votre fonctionne ?
Cordialement
Je vous remercie grandement pour votre aide, cela fonctionne :)
Cependant pouvez vous m'expliquer ce qui péchait dans mon code et ce pourquoi le votre fonctionne ?
Cordialement
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 710
>
thyroox
Messages postés
34
Date d'inscription
jeudi 27 juillet 2017
Statut
Membre
Dernière intervention
25 février 2022
Modifié le 1 déc. 2017 à 16:43
Modifié le 1 déc. 2017 à 16:43
Re,
Pas au bon endroit, vous avez 1 en resultat car vous testez avant d'avoir ecrit toutes vos donnees
Simplification:
Vous faites trois fois le meme test pour ecrire trois cellules differentes, un seul suffit
Vous faites une deuxieme boucle pour rien puisque vous ecrivez
Petit detail, votre deuxieme boucle (avec le LD= .... au bon endroit) ne pouvait marcher que si vous aviez selectionne le feuille TEST
LD = sT.Cells(Application.Rows.Count, "K").End(xlUp).Row
Pas au bon endroit, vous avez 1 en resultat car vous testez avant d'avoir ecrit toutes vos donnees
Simplification:
Vous faites trois fois le meme test pour ecrire trois cellules differentes, un seul suffit
Vous faites une deuxieme boucle pour rien puisque vous ecrivez
.Cells(I - 4, "Q").Valuedans la premiere, donc pas la peine d'en remettre une couche
Petit detail, votre deuxieme boucle (avec le LD= .... au bon endroit) ne pouvait marcher que si vous aviez selectionne le feuille TEST