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.