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)
Nom : Capture003.PNG
Affichages : 103
Taille : 4,9 Ko


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é :
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
En appliquant ce code, il ne se produit rien (lorsque que je retire la partie And de la boucle, cela fonctionne bien).
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 !