Bonjour,

Pour une de mes macros j'ai besoin de faire à un moment un petit travail qui, bien que ne paraissant pas bien compliqué, me pose plus de problèmes que prévus.

Comme c'est des données confidentielles je ne peux pas vous passer le fichier, mais pour que vous puissiez réellement m'aider j'ai fait un petit fichier annexe simplifier (normalement il y a une vingtaine de colonnes et des milliers de ligne mais dans l'exemple que je vous montre j'ai fait plus simple car ça revient au même).

En fait j'ai un tableau donc une colonne contient des id classés (c'est des nombres, donc, du plus petit au plus grand). Mais certains sont en double et je voudrais et je voudrais enlever ces doublons tout en récupérant certaines données qui sont sur l'une et pas sur l'autre (par ex soit il contient qqch dans la 3eme colonne et pas dans les colonnes suivantes, soit il ne contient rien dans la 3eme mais contient de l'info dans les suivantes). J'ai mis en rouge tous ceux qui sont en double donc on fait un filtre pour travailler uniquement sur ceux là.


Par exemple si en C6 et C7 j'ai la valeur 1 alors c'est un doublon. En E6 j'ai 100 et en E7 j'ai rien. en F:H6 j'ai rien et en F:H7 j'ai quelquechose. Alors je vais copier E6 et le mettre en E7 puis supprimer la ligne 6. Vous voyez ?



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
Sub testFactice123()
 
ActiveSheet.Range("$C$5:$H$26").AutoFilter Field:=1, Criteria1:=RGB(255, 199, 206), Operator:=xlFilterCellColor
temp = 0
temp = 0
boul1 = False
boul2 = False
ligneTemp = 1
For Each c In [_FilterDataBase].Resize(, 1).SpecialCells(xlCellTypeVisible)
    ligne = c.Row
    If ligne > 2 Then
        If Cells(ligne, 5) = "" Then
            If boul1 = True Then
                Cells(ligne, 5) = temp
                boul1 = False
            Else
                ligneTemp = ligne
                boul2 = True
            End If
        End If
        If Cells(ligne, 5) <> "" Then
            If boul2 = True Then
                Cells(ligneTemp, 5) = Cells(ligne, 5)
                boul2 = False
            Else
                temp = Cells(ligne, 5)
                boul1 = True
            End If
            Rows(ligne).Select
            Selection.Delete Shift:=xlUp
        End If
    End If
Next c
 
End Sub
merci d'avance pour votre précieuse aide !