Boucle sur VBA
Résolu
thyroox
Messages postés
40
Statut
Membre
-
f894009 Messages postés 17413 Statut Membre -
f894009 Messages postés 17413 Statut Membre -
Bonjour,
J'ai écrit une petite macro qui s'effectue normalement en deux temps sur les colonnes N et Q (voir mon fichier en pièce jointe avec la macro intégrée).
Feuille "TEST"
1) -Colonne N : si la cellule de colonne Q est égal à "PPK-002" alors la cellule de la colonne N est égal à la valeur de la cellule de la colonne Q
- Colonne Q : la valeur de la cellule de la colonne Q reprend la valeur de la cellule de la colonne AN dans la Feuille "DP Siège".
2) Si la valeur de la cellule de la colonne N est égal à la valeur de la cellule de la colonne Q alors la valeur de la cellule de la colonne Q s'efface. Du coup il ne reste que la valeur de la cellule de la colonne N.
Mon problème réside dans le fait que lorsque je lance ma Macro, elle n'exécute que la partie 1) et je suis OBLIGE de la relancer pour quelle exécute la partie 2)
Pouvez vous retravailler mon code afin que les deux parties puissent s’exécuter l'une âpres l'autre en ne lançant qu'UNE seule fois la Macro, par la même occasion pouvez vous m'expliquer ce qui péchait.
Je vous remercie par avance.
Thyroox
J'ai écrit une petite macro qui s'effectue normalement en deux temps sur les colonnes N et Q (voir mon fichier en pièce jointe avec la macro intégrée).
Feuille "TEST"
1) -Colonne N : si la cellule de colonne Q est égal à "PPK-002" alors la cellule de la colonne N est égal à la valeur de la cellule de la colonne Q
- Colonne Q : la valeur de la cellule de la colonne Q reprend la valeur de la cellule de la colonne AN dans la Feuille "DP Siège".
2) Si la valeur de la cellule de la colonne N est égal à la valeur de la cellule de la colonne Q alors la valeur de la cellule de la colonne Q s'efface. Du coup il ne reste que la valeur de la cellule de la colonne N.
Mon problème réside dans le fait que lorsque je lance ma Macro, elle n'exécute que la partie 1) et je suis OBLIGE de la relancer pour quelle exécute la partie 2)
Pouvez vous retravailler mon code afin que les deux parties puissent s’exécuter l'une âpres l'autre en ne lançant qu'UNE seule fois la Macro, par la même occasion pouvez vous m'expliquer ce qui péchait.
Je vous remercie par avance.
Thyroox
3 réponses
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
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
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