Bonjour,

Je suis un nouveau de VBA, je dois développer un macro qui compare l'idedifiant d'une première table avec l'identifiant de 2e, si ce identifiant existe dans le 2e (en utilisant la fonction find), il le garde, sinon, il le supprime.


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
Dim wb As Workbook, wb2 As Workbook, ws As Worksheet
 
 
'Le premier fichier en entrée ici est un fichier csv dont le chemin est situé à range(F5), je le parse par ";" pour créer une collection
 
Dim V As Collection
Path = ThisWorkbook.Sheets("sheet1").Range("F5").Value
Set V = ParseFile(Path, ";")
 
 
'Je mets tous les morceaux de la collection dans les sheets de workbook
 
If V.Count > 40 Then
    t = 1
    For i = 1 To 40
 
        ThisWorkbook.Sheets("sheet2").Range("A" & t).Resize(1, 17).Value = V.Item(i)
        t = t + 1
    Next i
    t = 1
    For i = 40 To V.Count
        ThisWorkbook.Sheets("sheet3").Range("A" & t).Resize(1, 17).Value = V.Item(i)
        t = t + 1
        If i + 1 = 2 * 40 Then Exit For
    Next i
Else
    t = 1
    For i = 1 To V.Count
        ThisWorkbook.Sheets("sheet2").Range("A" & t).Resize(1, 17).Value = V.Item(i)
        t = t + 1
    Next i
 
End If
 
 
'j'ouvre la 2e table Excel dont le chemin est dans range(F6), je fais un filtre là-dessus
 
Workbooks.Open Filename:=ThisWorkbook.Sheets("sheet1").Range("F6").Value
    Set wb2 = ActiveWorkbook
    Sheets("POSITION AND GRECS").Activate
    Rows("3:3").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=7, Criteria1:="DESCRIPT"
    Rows("3:3").Select
    Range("B3").Activate
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets.Add
    Set sh = ActiveSheet
    ActiveSheet.Paste
 
 
 
'Maintenant, je compare les 2 par un for sur la 1ere table, et faire un find sur la 2e pour voir si ça existe ou pas, si oui, on le garde, sinon, je le supprime.
 
    ThisWorkbook.Activate
    For i = 1 To Range("A1").End(xlDown).Row
    Id = Range("A" & i).Value
 
    If wb2.Sheets("sheet1").Range("AA:AA").Find(Id) Is Nothing Then
    Rows(i).Delete
    i = i - 1
    End If
 
    Next i
 
 
    ThisWorkbook.SaveAs Filename:="G:\_Traitements_Exo\Users\Jun\a.xls"
'le problème est qu'il se bloque sur la ligne "i=i-1" que j'ai besoin de faire quand une ligne est supprimée.

Merci de m'aider si vous comprenez ce que j'ai fait de mal dans ce code.

Je suppose que je parcours peut-être dans la mauvaise sheet pour comparer??