Vba : effacer des doublons.

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

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. 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
      1. 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 ...
        1. 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.
          1. 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
            1. 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.
          2. 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
            1. Contributeur
              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