Vba : effacer des doublons.
Arthur
-
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
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
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
A voir également:
- Vba : effacer des doublons.
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Find vba - Astuces et Solutions
- Vba range avec variable ✓ - Forum VB / VBA
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.
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.
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
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
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 ...
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 ...
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.
[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.
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
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
Bonjour,
Juste au passage, (en respectant l'écriture de Mike-31...) essayer de prendre que cette partie de la ligne soulignée:
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
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
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