Vba : effacer des doublons.

Arthur -  
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je me permets de vous demander de l'aide car je suis face à un dillemme. J'utilise un code que j'ai trouvé dans un fichier qui fonctionne très bien. Je l'adapte au mien et bizarrement excel me signal une "erreur de type 6 : Objet requis". Je souhaite effacer les doublons mais je bloque dés le début de la procédure à la ligné soulignée. Bizarrement excel ne réussit pas à sélectionner la cellule indiquée...

Private Sub Procedure2()

Sheets("Feuil2").Visible = True
Sheets("Feuil1").Visible = False

Macellule = Feuil2.Range("A2")
Macellule.Select
ActiveCell.CurrentRegion.Sort Key1:=Range(Macellule), Order1:=xlAscending, Header:=xlYes
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select

While ActiveCell <> ""
If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
End If
Wend

End Sub

7 réponses

Arthur
 
Petit up,

J'ai cherché a changé un peu mon code et je butte sur un autre problème :

Sheets("Feuil2").Visible = True
Sheets("Feuil1").Visible = False
With Sheets("Feuil2")
.Columns("A:E").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

For i = .[A65000].End(xlUp).Row To 2 Step -1
If Cells(i, 1) = Cells(i - 1, 1) Then Rows(i).Delete
Next i
Application.Calculations = xlCalculationAutomatic
End With

La partie en gras et soulignée est objet d'une erreur '1004' : Référence de tri non valide. Vérifiez qu'elle se trouve bien parmi les données à trier et que la zone Trier n'est pas identique ou vide.

Merci d'avance si quelqu'un peut m'aider car j'ai vraiment besoin de trouver une solution.
0
Mike-31 Messages postés 19571 Date d'inscription   Statut Contributeur Dernière intervention   5 139
 
Salut,

Testes comme cela, mais pourquoi au départ tu déclares la feuille 2 visible et la feuille 1 masquée. Pour ma par je supprimerais ces deux lignes vu que le bouton qui commande le code est certainement sur la feuille concernée !

Sub Procedure2()

Sheets("Feuil2").Visible = True
Sheets("Feuil1").Visible = False

[A2].Select
ActiveCell.CurrentRegion.Sort Key1:=[A2], Order1:=xlAscending, Header:=xlYes
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select

While ActiveCell <> ""
If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
End If
Wend

End Sub
0
Arthur
 
Merci beaucoup de t'intéresser à mon problème. Malheureusement, je bug sur [A2].select...

Il ne veut pas sélectionner. Et pour répondre à ta question, non le bouton n'est pas sur la même feuille que le tableau à "nettoyer"... Je ne comprends pas trop d'ou peut venir le problème ...
0
Mike-31 Messages postés 19571 Date d'inscription   Statut Contributeur Dernière intervention   5 139
 
Re,

[A2] est un raccourci de Range("A2")

Sub Procedure2()

Sheets("Feuil2").Visible = True
Sheets("Feuil1").Visible = False
Sheets("Feuil2").Activate
[A2].Select
ActiveCell.CurrentRegion.Sort Key1:=[A2], Order1:=xlAscending, Header:=xlYes
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select

While ActiveCell <> ""
If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
End If
Wend

End Sub

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arthur
 
1) Mike je te remercie vraiment, en fait ton exemple marchait pour mon classeur test mais une fois mis dans mon fichier final, il ne marche pas... L'erreur est sur la ligne soulignée, j'ai tenté plusieurs modifications mais en vain. Je suis à deux doigts de la crise de nerf. VBA nuit gravement à la santé des novices ;)

2) Current Region représente quoi ? Ici mon tableau peut être remplie jusqu'aux dimensions suivantes : (A1:X1000).

3) Ici c'est la colonne B qui définit le tri.

Workbooks("Classeur Commun X.xls").Sheets("Archives régularisations").Unprotect (123)
Workbooks("Classeur Commun X.xls").Sheets("Archives régularisations").Activate
[B2].Select
ActiveCell.CurrentRegion.Sort Key1:=[B2], Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
While ActiveCell <> ""
If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
End If
Wend
0
Arthur
 
Le message d'erreur est : Référence de trin non valide. Vérifiez qu'elle se trouve bien parmi les données à trier et que la zone TRIER n'est pas identique ou vide.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Juste au passage, (en respectant l'écriture de Mike-31...) essayer de prendre que cette partie de la ligne soulignée:
ActiveCell.CurrentRegion.Sort Key1:=[B2], Order1:=xlAscending, Header:=xlYes
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour à tous

Il me semble qu'il vaudrait mieux continuer dans l'option de départ choisie avec une cellule active :
ActiveCell.CurrentRegion.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlYes

Ensuite pour éviter toute ambiguïté, il serait souhaitable d'activer aussi la feuille précédemment :
Sheets("Feuil2").Activate
0