Bonjour à tous,
j'ai un petit soucis avec une macro, je m'explique :
J'ai développé une macro qui permet de nettoyer un onglet (appelé Remises) d'un fichier, c'est à dire que la personne va venir copier/coller 5 colonnes de données dans cet onglet (à savoir, les colonnes de données proviennent d'autres fichier mais peu importe).
La macro permet d'enlever la couleur si des cases sont surlignées, de supprimer les colonnes et lignes vides, de remettre les colonnes A,B,C,D et E au bon format, c'est à dire en standard avec en plus la colonne D sans séparateur de millier, mais visiblement le format standard suffit pour cette colonne et enfin elle permet d'afficher en rouge les doublons des 3 premières colonnes (et cela est très important) à l'aide d'une boucle.
La macro fonctionne parfaitement sur un fichier test où il y a 86 lignes, en revanche pour le gros fichier (179 000 lignes) qui va être régulièrement utilisé, Excel se fige et je suis obligé de fermer Excel sans résultat du coup...
Voici la 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 Sub Nettoyage_Fichier_CSV_BdC() Dim col, nbCells, i, j Sheets("Remises").Select Sheets("Remises").Activate On Error Resume Next 'Réinitialiser couleur de remplissage Columns.Interior.ColorIndex = xlNone 'Supprimer colonnes vides Cells.Range("A1:AZ1").SpecialCells(xlCellTypeBlanks).EntireColumn.Delete 'Supprimer Lignes vides [A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'Format colonnes A,B,C et D + Standard et colonne D sans millier Columns("A:E").Select Selection.NumberFormat = "General" 'Gestion des Doublons données = "/" lignes = "/" doublon = "" i = 2 Do While i < Range("A" & Rows.Count).End(xlUp).Row + 1 If données Like "*/" & Range("A" & i) & Range("B" & i) & Range("C" & i) & "/*" Then doublon = "Doublon" Range("A" & i, "C" & i).Interior.ColorIndex = 3 ligne = Split(lignes, "/")(UBound(Split(Split(données, Range("A" & i) & Range("B" & i) & Range("C" & i))(0), "/"))) Range("A" & ligne, "C" & ligne).Interior.ColorIndex = 3 Else données = données & Range("A" & i) & Range("B" & i) & Range("C" & i) & "/" lignes = lignes & i & "/" End If i = i + 1 Loop If doublon = "Doublon" Then MsgBox ("vous avez des Doublons ! ils sont indiqués sur fond rouge") If doublon <> "Doublon" Then MsgBox ("Vous n'avez pas de doublon ! ") ActiveWorkbook.Save Range("A1").Select End Sub
Plusieurs questions :
Suis-je obligé de passer par une boucle pour afficher les doublons en rouge des 3 premières colonnes ?
Est-ce la boucle qui fait planter Excel ?
Avez-vous une solution qui me permet de faire fonctionner cette macro peu importe le nombre de ligne ?
Je vous remercie par avance pour tout retour qui me permettrait d'avancer.
Cordialement.
Partager