Boucle sur VBA
Résolu
thyroox
Messages postés
34
Date d'inscription
Statut
Membre
Dernière intervention
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
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