Bonjour à tous,
Je suis étudiant en école d'ingénieur et pure novice en vba ,j'ai réalisé une macro excel à partir de l'enregistreur de Macro.Celle-ci a pour fonction d'effectué un tri sur un classeur de donnée en fonction des informations présentes dans 2 des colonnes (il y a 5 colonnes en tout), en effet ces 2 colonnes contiennent une info appelée "type d'erreur" qui constitue le 1er tri a effectué puis une info nommée "commentaires", et de même un second tri a effectué en fonction du commentaire (il y a seulement 5 types de commentaires qui sont génériques).
La macro fonctionne très bien pour un fichier (celui à partir duquel j'ai effectué ma macro) cependant lorsque j'effectue des changements sur ce fichier parfois ils fonctionnent (si je supprime 2-3 de données dans mon classeur c'est ok ) parfois ils ne fonctionnent plus (par exemple si je ne conserve que les 300 premières lignes du classeur initial). L'erreur indiqué est " Erreur d'éxécution 1004 :La méthode Auto-Filter de la classe Range a échoué ", étant novice en vba je ne comprends pas d’où viens le problème.Je pense que cela est du au fait que lorsque je filtre mes informations je les recopie par un "ctrl+c" puis "ctrl+v" dans un nouvel onglet car je n'ai pas trouvé de moyen d'utiliser les filtres textuels de type "contient" puis d'affecter les données conservés à un nouvel onglet afin d'automatiser le processus de filtrage (l'utilisateur ne doit pas le faire lui-même sinon la macro perd tout son intérêt). Voici le code vba généré par l'enregistreur de Macro:
************************************************************************************************************************************************
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Sub Macro_72()
'
' Macro_72 Macro
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B1044"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:G1044")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWindow.SmallScroll Down:=102
    ActiveWindow.ScrollRow = 101
    ActiveWindow.ScrollRow = 100
    ActiveWindow.ScrollRow = 98
    ActiveWindow.ScrollRow = 95
    ActiveWindow.ScrollRow = 92
    ActiveWindow.ScrollRow = 85
    ActiveWindow.ScrollRow = 77
    ActiveWindow.ScrollRow = 68
    ActiveWindow.ScrollRow = 63
    ActiveWindow.ScrollRow = 57
    ActiveWindow.ScrollRow = 52
    ActiveWindow.ScrollRow = 47
    ActiveWindow.ScrollRow = 42
    ActiveWindow.ScrollRow = 39
    ActiveWindow.ScrollRow = 34
    ActiveWindow.ScrollRow = 30
    ActiveWindow.ScrollRow = 25
    ActiveWindow.ScrollRow = 22
    ActiveWindow.ScrollRow = 19
    ActiveWindow.ScrollRow = 14
    ActiveWindow.ScrollRow = 12
    ActiveWindow.ScrollRow = 9
    ActiveWindow.ScrollRow = 7
    ActiveWindow.ScrollRow = 3
    ActiveWindow.ScrollRow = 1
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Feuil1").Select
    Sheets("Feuil1").Name = "Tri1"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Feuil2").Select
    Sheets("Feuil2").Name = "Tri2"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Feuil3").Select
    Sheets("Feuil3").Name = "Tri3"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Feuil4").Select
    Sheets("Feuil4").Name = "Tri4"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Feuil5").Select
    Sheets("Feuil5").Name = "Tri5"
    Sheets("Sheet1").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    Range("G1041").Select
    ActiveCell.FormulaR1C1 = _
        "Personne :233182 JOUQUAN ARMEL né(e) le 1965-08-01:Le numéro de sécurité sociale est incorrect."
    Range("G1032").Select
    ActiveWindow.SmallScroll Down:=-39
    Selection.AutoFilter
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7, Criteria1:= _
        "=*Le numéro de sécurité sociale est incorrect*", Operator:=xlAnd
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("A1:G1044").Select
    Range("G1032").Activate
    ActiveWindow.SmallScroll Down:=-306
    Selection.Copy
    Sheets("Tri1").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=219
    Sheets("Sheet1").Select
    Range("G716").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7
    Range("G8").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = _
        "Personne :99627 DE CASTRO FERNAND né(e) le 1964-09-27:Ce salarié est déjà affecté à cet élément de la structure organisationnelle."
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7, Criteria1:= _
        "=*Ce salarié est déjà affecté à cet élément de la structure organisationnelle*" _
        , Operator:=xlAnd
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("A1:G1044").Select
    Range("G8").Activate
    Selection.Copy
    Sheets("Tri2").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("G14").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7
    Range("G22").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = _
        "Personne :717810 KOUIAK ANOIR né(e) le 1990-01-12:La date de sortie d'une entreprise doit être ultérieure ou égale à la date d'entrée."
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7, Criteria1:= _
        "=*La date de sortie d'une entreprise doit être ultérieure ou égale à la date d'entrée*" _
        , Operator:=xlAnd
    Range("A1:G1044").Select
    Range("G22").Activate
    Selection.Copy
    Sheets("Tri3").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7
    Range("G25").Select
    Sheets("Sheet1").Select
    Range("G16").Select
    ActiveWindow.SmallScroll Down:=102
    Range("G133").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = _
        "Personne :716690 ADJAL BRAHIM né(e) le 1987-12-11:Les dates de la situation organisationnelles sont incorrectes."
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7, Criteria1:= _
        "=*Les dates de la situation organisationnelles sont incorrectes*", Operator _
        :=xlAnd
    Range("A1:G1044").Select
    Range("G133").Activate
    Selection.Copy
    Sheets("Tri4").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7
    ActiveWindow.SmallScroll Down:=474
    Range("G502").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = _
        "Personne :700163 KOUAS FAOUZI né(e) le 1981-11-28:Il ne peux exister 2 personnes avec le même matricule dans le même établissement."
    ActiveSheet.Range("$A$1:$G$1044").AutoFilter Field:=7, Criteria1:= _
        "=*Il ne peux exister 2 personnes avec le même matricule dans le même établissement*" _
        , Operator:=xlAnd
    Range("A1:G1044").Select
    Range("G502").Activate
    Sheets("Sheet1").Select
    Range("A1:G1044").Select
    Range("A356").Activate
    Selection.Copy
    Sheets("Tri5").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Range("F1047").Select
End Sub

************************************************************************************************************************************************
De plus si vous observez mon code, la macro agit sur la feuille "Sheet1" dès la première ligne qui correspond dans mon fichier initial à la feuille possédant l'ensemble des données à trier.Cependant j'aurai aimé généraliser ce processus à d'autres fichier,sans avoir à renommer de manière itérative la première feuille avec le nom "Sheet1" pour chaque nouveau fichier à traité.
Merci d'avance pour votre compréhension ainsi que pour le temps que vous m'accordez.
NB: J'ai placé en rouge la ligne qui pose problème au moment du débogage
Edit1: Je viens d'effectuer plusieurs test et le 1er Tri (basé sur la fonction "Trier d'excel " fonctionne peut importe le nombre de lignes présents dans le fichier donc cela conforte le fait que c'est au moment du filtrage que ce pose mon problème