Bonjour à tous,

voilà mon premier post sur ce forum que je parcours dans tous les sens depuis quelques temps. Je vous expose mon problème: j'ai un classeur excel une feuille ImportDonnées dans laquelle j'importe un un CSV régulièrement qui est tenu à jour. J'ai une seconde feuille que j'appelle ImportReporting qui me sert de base de travail pour mes userforms.
Selon la valeur trouvée dans la 1ere colonne de ImportDonnées je voudrais :
- que chaque nouvelle ligne soit ajoutée si elle n'existe pas dans FeuilleReporting.
- Si elle existe et que les données des colonnes B sont égales, alors les données des colonnes B a R soient mis à jour dans ImportReporting.
- Si elle existe et que les données des colonnes B sont différentes, alors je les ajoute dans ImportReporting.

Voilà 10 jours que je galère avec cette macro, à force de tourner ça dans tous les sens et de différentes manière je craque et lance un appel à l'aide. Je vous colle ici mon code qui boucle en rond.

Merci pour vos conseils, commentaires ou corrections
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Dim wsh1 As Worksheet, wsh2 As Worksheet
Dim ligne1 As Long, LastLig1 As Long, ligne2 As Long, LastLig2 As Long, LigneCopie As Long, i As Long
Dim C As Range
 
 
 
Sub EssaiComparaison()
 
 
 
 
 
Set wsh1 = Worksheets("ImportReporting")
Set wsh2 = Worksheets("ImportDonnées")
LastLig1 = wsh1.Cells(Rows.Count, "A").End(xlUp).Row 'comptage des lignes feuille ImportReporting
LastLig2 = wsh2.Cells(Rows.Count, "A").End(xlUp).Row 'comptage des lignes feuille ImportDonnées
 
'Pour ligne2 = 2 jusqu'à LastLig2 denière ligne de la feuille importDonnées
For ligne2 = 2 To LastLig2 'définir quel est la ligne de départ
 
 
    'recherche dans la colonne A de la feuille ImportReporting la valeur de la cellule "ligne2,"A" dans la feuille importDonnées
    With Worksheets("ImportReporting").Columns(1)
    Set C = .Find(wsh2.Cells(ligne2, "A"), LookIn:=xlValues)
 
 
    ' si l'occurence n'est pas trouvée
    If C Is Nothing Then
 
            ' Copie les données de ImportDonnées sur la dernière ligne +1 de la feuille ImportReporting
            LastLig1 = LastLig1 + 1
            wsh1.Range("A" & LastLig1, "R" & LastLig1).Value = wsh2.Range("A" & ligne2, "R" & ligne2).Value
 
 
        'Sinon
    Else
 
            FirstAddress = C.Address ' on retient l'adresse de la première occurence trouvée
            i = C.Row 'on défini le numéro de ligne de cette adresse
            'si la valeur de la colonne B de ImportReporting est différente de la valeur de la colonne "B" de ImportDonnées alors
            If wsh1.Cells(i, "B").Value <> wsh2.Cells(ligne2, "B").Value Then
                    Do
                    'Recherche prochaine occurence
                    Set C = .FindNext(C)
                    i = C.Row
                    'Boucle jusqu'à ce qu'occurence trouvée ET colonnes B de ImportDonnées et ImportReporting soient égales
                    Loop Until Not C Is Nothing And C.Address <> FirstAddress & wsh1.Cells(i, "B").Value = wsh2.Cells(ligne2, "B").Value
                    i = C.Row
 
                    ' copie sur ImportReporting les valeurs impotDonnées
                    wsh1.Range("B" & i, "R" & i).Value = wsh2.Range("B" & ligne2, "R" & ligne2).Value
                    'MsgBox ("Occurence trouvée et condition remplie, Ligne mise à jour" & C.Row)
                    'Exit Do
 
 
            'Sinon La première occurence trouvée était la bonne, mise à jour des données
            Else
                    ' Copie les données de ImportDonnées sur la dernière ligne +1 de la feuille ImportReporting
                    LastLig1 = LastLig1 + 1
                    wsh1.Range("A" & LastLig1, "R" & LastLig1).Value = wsh2.Range("A" & ligne2, "R" & ligne2).Value
            End If
 
    End If
    End With
 
 
Set C = Nothing
 
Next ligne2
 
 
End Sub