Vba : effacer des doublons.

Fermé
Arthur - 7 avril 2010 à 11:00
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 7 avril 2010 à 23:11
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

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 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
7 avril 2010 à 13:49
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
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 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
7 avril 2010 à 15:38
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
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
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 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
7 avril 2010 à 22:05
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 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
7 avril 2010 à 23:11
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