chandler282
XLDnaute Nouveau
Bonjour à tous, je suis nouveau ici et j'aurais vraiment besoin d'une aide sur une macro ...
J'ai un fichier excel avec 3 feuilles dans lesquelles apparaissent des listes misent à jour chaque semaine.
En effet ce que je cherche à faire, c'est supprimer les doublons présents dans ces 3 feuilles Excel. Mon code fonctionne pour chaque feuille indépendament les unes des autres mais pas les unes par rapport aux autres. (en gros il regarde dans chaque feuille et supprime pour chacune d'entre elles les doublons présents dans ces mêmes feuilles mais sans aller regarder ce qui se trouve dna sles suivantes)
Cependant, mon fichier va s'actualiser au fur et à mesure avec des dossiers qui vont passer du stade 1 au stade 2 puis au stade 3, et d'autres qui vont se retrouver 2 fois dans chaque stade, et avec donc des doublons puisque chaque semaine sera réactualisé l'ensemble de la liste par copié/collé (celui-ci étant issu d'une requête externe)
Mon but, c'est par exemple : qu'un dossier déjà présent en stade 1 et qui est rajouté la semaine suivante dans ce même stade soit effacé (je parle bien de la nouvelle entrée) et que pour un autre dossier déjà présent au stade 1 et qui a évolué en stade 2 en semaine suivante soit effacé du stade 1 lors de la mise à jour ... Il faut cependant que ce soit dans cet ordre (stade 1 --> Stade 2 --> Stade 3) avec éffacement du stade 1 après incrémentation dans le stade 2 ou 3 mais pas l'inverse et ainsi de suite ...
En gros dans le fichier Stade 1, on vérifie les doublons par rapport aux stades 1, 2 et 3. Pour le Stade 2, on vérifie les doublons par rapport aux stades 2 et 3. Et pour le 3 par rapport au stade 3 seulement.
J'éspère avoir été assez clair dans mon explication et que vous serez à même de m'aider dans ma prise de tête ...
Merci d'avance
P.S : Pour info voici le code :
Sub SupprimeDoublonsStade1()
Dim Plage As Range, Cell As Range
Dim Un As Collection
Dim Tableau() As Long
Dim x As Integer
Set Un = New Collection
Set Plage = Worksheets("Stade 1").Range("B2:B500")
For Each Cell In Plage
On Error Resume Next
'Alimente la collection de données sans doublons.
Un.Add Cell, CStr(Cell)
'Une erreur survient si l'élément existe dans la collection.
'La procédure enregistre le numéro de ligne correspondant dans un tableau.
If Err.Number <> 0 Then
x = x + 1
ReDim Preserve Tableau(x)
Tableau(x) = Cell.Row
End If
Next Cell
'On sort de la procédure s'il n'y a pas de doublons.
If x = 0 Then Exit Sub
'Permet de figer l'écran pendant la suppression des lignes.
Application.ScreenUpdating = False
'boucle sur le tableau pour supprimer les lignes contenant les doublons.
For x = UBound(Tableau) To LBound(Tableau) Step -1
Worksheets("Stade 1").Rows(Tableau(x)).EntireRow.Delete
Next x
Application.ScreenUpdating = True
MsgBox "Terminé."
Set Un = Nothing
End Sub
J'ai un fichier excel avec 3 feuilles dans lesquelles apparaissent des listes misent à jour chaque semaine.
En effet ce que je cherche à faire, c'est supprimer les doublons présents dans ces 3 feuilles Excel. Mon code fonctionne pour chaque feuille indépendament les unes des autres mais pas les unes par rapport aux autres. (en gros il regarde dans chaque feuille et supprime pour chacune d'entre elles les doublons présents dans ces mêmes feuilles mais sans aller regarder ce qui se trouve dna sles suivantes)
Cependant, mon fichier va s'actualiser au fur et à mesure avec des dossiers qui vont passer du stade 1 au stade 2 puis au stade 3, et d'autres qui vont se retrouver 2 fois dans chaque stade, et avec donc des doublons puisque chaque semaine sera réactualisé l'ensemble de la liste par copié/collé (celui-ci étant issu d'une requête externe)
Mon but, c'est par exemple : qu'un dossier déjà présent en stade 1 et qui est rajouté la semaine suivante dans ce même stade soit effacé (je parle bien de la nouvelle entrée) et que pour un autre dossier déjà présent au stade 1 et qui a évolué en stade 2 en semaine suivante soit effacé du stade 1 lors de la mise à jour ... Il faut cependant que ce soit dans cet ordre (stade 1 --> Stade 2 --> Stade 3) avec éffacement du stade 1 après incrémentation dans le stade 2 ou 3 mais pas l'inverse et ainsi de suite ...
En gros dans le fichier Stade 1, on vérifie les doublons par rapport aux stades 1, 2 et 3. Pour le Stade 2, on vérifie les doublons par rapport aux stades 2 et 3. Et pour le 3 par rapport au stade 3 seulement.
J'éspère avoir été assez clair dans mon explication et que vous serez à même de m'aider dans ma prise de tête ...
Merci d'avance
P.S : Pour info voici le code :
Sub SupprimeDoublonsStade1()
Dim Plage As Range, Cell As Range
Dim Un As Collection
Dim Tableau() As Long
Dim x As Integer
Set Un = New Collection
Set Plage = Worksheets("Stade 1").Range("B2:B500")
For Each Cell In Plage
On Error Resume Next
'Alimente la collection de données sans doublons.
Un.Add Cell, CStr(Cell)
'Une erreur survient si l'élément existe dans la collection.
'La procédure enregistre le numéro de ligne correspondant dans un tableau.
If Err.Number <> 0 Then
x = x + 1
ReDim Preserve Tableau(x)
Tableau(x) = Cell.Row
End If
Next Cell
'On sort de la procédure s'il n'y a pas de doublons.
If x = 0 Then Exit Sub
'Permet de figer l'écran pendant la suppression des lignes.
Application.ScreenUpdating = False
'boucle sur le tableau pour supprimer les lignes contenant les doublons.
For x = UBound(Tableau) To LBound(Tableau) Step -1
Worksheets("Stade 1").Rows(Tableau(x)).EntireRow.Delete
Next x
Application.ScreenUpdating = True
MsgBox "Terminé."
Set Un = Nothing
End Sub