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
Partager