Bonjour à tous et merci de me lire!
Voilà, j'ai pondu un code en vba qui fait plein de chose mais mon problème c'est qu'il est un peu trop lent.
Je vous explique:
Mon code doit traiter plus de 2000 fichiers à la suite (il retire des lignes, reclasses les colonnes,...). J'ai essayé d'optimiser moi-même mais je me demande si on ne pourrais pas mieux faire.
Ce que je vous demande, c'est votre avis!
Voici le code:

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
Public Sub Suppression_doublons()
 
    'Les déclarations des variables
    Dim sNumTel As String, sNom As String, sAdd As String, iCP As String
    Dim iNb_Lignes As Integer
    Dim rCible As Range, iLigne As Integer, rRgeA As Range, rRgeB As Range
 
    'initialisation des variables
    iPos1 = 0
    iPos2 = 0
    iNb_Lignes = ActiveSheet.UsedRange.Rows.Count
 
        'Boucle sur toutes les lignes du fichier
        For i = 1 To iNb_Lignes Step 1
 
 
            'On en profite pour faire le transfert des numéros de mobile de la colonne "fixe" vers la colonne "mobile"
            '#####################################
            If Left(Range("E" & i).Value, 2) = "06" Then
                If Range("G" & i).Value = "" Then
                    Range("E" & i).Cut
                    Range("G" & i).Select
                    ActiveSheet.Paste
                Else
                    Range("E" & i).Select
                    Selection.ClearContents
                End If
            End If
 
            'On en profite pour faire la Suppression des parasites symbolisés par "-" dans la colonne B
            '#####################################
            'Dans la colonne B, on ne veut garder que les données se trouvant APRES le dernier tiret
            sChaine = Range("B" & i).Value
            iPos1 = InStr(sChaine, "-")
            If iPos1 <> 0 Then
                iPos2 = InStr(iPos1 + 1, sChaine, "-")
                If iPos2 <> 0 Then
                    iPos1 = iPos2
                End If
                sChaine = Right(sChaine, Len(sChaine) - 1 - iPos1)
                Range("B" & i).Value = sChaine
            End If
 
            'Suppression des doublons
            '#####################################
 
            sNumTel = Range("E" & i).Value
            sNom = Range("A" & i).Value
            iCP = Range("C" & i).Value
            sAdd = Range("B" & i).Value
 
 
            If sNumTel <> "" Then
 
 
               Set rCible = Range("E" & i + 1 & ":E" & iNb_Lignes).Find(what:=sNumTel, lookat:=xlWhole)
               If Not rCible Is Nothing Then
                   iLigne = rCible.Row
 
                   'On supprime un doublons uniquement si les colonnes A,B et C sont identiques
                   If Range("A" & iLigne) = sNom Then
                      If Range("B" & iLigne) = sAdd Then
                        If Range("C" & iLigne) = iCP Then
                            rRgeA = Range("A" & i & ":K" & i)
                            rRgeB = Range("A" & iLigne & ":K" & iLigne)
 
                            'La fonction "Compter_champs_non_vides compte le nombre de colonne non vide dans le range mit en paramètre.
                            'La ligne contenant le plus de colonne vide est supprimée
                            If Compter_champs_non_vide(rRgeA) > Compter_champs_non_vide(rRgeB) Then
                                Range("A" & iLigne).EntireRow.Delete
                                i = i - 1
                                iNb_Lignes = ActiveSheet.UsedRange.Rows.Count
                            ElseIf i <> iLigne Then
                                Range("A" & i).EntireRow.Delete
                                i = i - 1
                                iNb_Lignes = ActiveSheet.UsedRange.Rows.Count
                            End If
                        End If
                    End If
                   End If
               End If
            End If
 
    Next i
 
End Sub
 
Function Compter_champs_non_vide(rCible As Range) As Integer
    Dim Cellules As Range
    Compter_champs_non_vide = 0
    For Each Cellules In rCible
        If Cellules.Text <> "" Then
            Compter_champs_non_vide = Compter_champs_non_vide + 1
        End If
    Next
End Function
Je vous rappelle que je ne suis pas sur que ma façon de voir les choses est la plus optimale, c'est pourquoi je suis là !!!!