Bonjour à tous,
J'ai adapté un code que j'utilisais déjà dans un autre fichier, et cette fois-ci, j'ai besoin de faire une boucle avec deux arguments, mais je ne pense pas que la boucle While convienne dans ce cas-là.
Pour vous donner du contexte, j'ai un onglet "Résultats" contenant une succession de tableaux (colonnes A à F). Dans la colonne A se trouve le numéro/nom de l'onglet dont proviennent les données en colonne C (exemple de noms : 01, 02, 03 etc)
Dans l'onglet "Import", je souhaite coller les données contenues en colonne B & C de "Résultats", à partir de C8. Seulement, je ne souhaite coller que les données qui remplissent deux conditions :
Condition 1 : en H2 de l'onglet "Import", on va inscrire le nom de l'onglet que l'on veut traiter (par exemple : 02). Je ne veux copier que les lignes qui auront en colonne A de "Résultats" la même valeur que H2 de "Import" (pas de problème sur cette étape)
Condition 2 : en colonne C de "Résultats", il y a plusieurs mises en forme conditionnelles. En plus de la condition 1, je voudrais également que les données copiées répondent à ce critère : .DisplayFormat.Interior.Color = RGB (255,199, 206)
Voici donc le code utilisé :
En appliquant ce code, il ne se produit rien (lorsque que je retire la partie And de la boucle, cela fonctionne bien).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Sub Remplissage() Dim a As Integer, Ligne As Long, Lg As Long, rFind As Range a = ActiveSheet.Range("H2") ' numéro d'onglet placé dans H2 Lg = 8 ' n° ligne à partir de laquelle recopier à la suite les données Set rFind = Sheets("Résultats").Columns("A").Find(a) ' Recherche numéro d'onglet en colonne A de "Résultats" If rFind Is Nothing Then MsgBox "Numéro d'onglet non trouvé" Exit Sub End If Ligne = rFind.Row '--- n° ligne première facture trouvée Set rFind = Nothing Application.ScreenUpdating = False ' désactive rafraichissement écran With Sheets("Résultats") While .Range("A" & Ligne) = a And Cells(Ligne, 3).DisplayFormat.Interior.Color = RGB(255, 199, 206) '--- boucle sur les lignes de "trié DEF", arrêt dès que a non trouvé .Range("B" & Ligne & ":C" & Ligne).Copy ActiveSheet.Range("C" & Lg).PasteSpecial Paste:=xlPasteValues Lg = Lg + 1 '--- ligne suivante Ligne = Ligne + 1 '--- ligne suivante If Lg > 9 Then Rows(Lg).Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove End If Wend End With Application.ScreenUpdating = True End Sub
Si j'ai bien compris le fonctionnement de la boucle While, elle s'arrête dès qu'un élément ne correspond plus. Donc dans mon cas, elle n'a pas la possibilité de tourner sur tout mon tableau.
j'hésite donc au type de boucle approprié.
Pour information, dans l'onglet "Résultats", les données sont bien triées : c'est-à-dire que les noms d'onglet en colonne A sont bien regroupés (les lignes 01 sont suivies des lignes 02, puis 03... il n'y a pas de mélange)
Auriez-vous un conseil sur le type de boucle à utiliser ?
Merci par avance pour votre aide !
Partager