Vba excel : besoin d'aide.

Résolu
Bonjour à tous,

Je débute sur excel et j'ai besoin de faire une macro VBA que je ne réussi pas à faire malgré l'aide excel assez bien faite.

En fait j'ai deux feuille (Feuil1 et Feuil2) avec deux listes, je voudrais creer une macro qui me permet d'effacer les lignes de la Feuil1 également présentes en Feuil2.

Merci d'avance pour ceux qui m'aideront ou essayeront de le faire.

4 réponses

  1. Bonjour,

    J'aurais besoin d'un peu plus d'infos pour resoudre ton pb :

    combien de lignes sont à traiter?
    combien de colonnes doivent etre inspectée?

    merci

    jéjé
    1. En fait, le nombre de ligne est variable mais n'excede pas les 1000. C'est trop ? Les colonnes si possible 9.

      Merci de prendre du temps pour mon problème jéjé.
    2. re bonjour,

      Voici ce que j'ai fait :

      A vous de modifier imax et xmax. attention, des chiffres trops importants peuvent ralentir votre pc.

      Sub compares()
      'xmax est le nombre de ligne dans la feuille1
      'imax est le nombre de ligne dans la feuille1
      xmax = 100
      imax = 100
      For x = 1 To xmax

      For i = 1 To imax
      idem = 0
      For j = 1 To 9
      If Worksheets("feuil2").Cells(i, j) = Worksheets("feuil1").Cells(x, j) Then
      idem = idem + 1
      End If
      Next

      If idem = 9 Then
      Worksheets("feuil1").Rows(x).Delete
      x = x - 1
      End If
      Next
      Next

      End Sub
  2. Merci jéjé, j'ai adapté le code à mon fichier et malhereusement seul une ligne a été effacé la dernière de la liste imax. Voyez-vous une possible explication ?

    Private Sub CommandButton3_Click()

    xmax = Sheets("Factures en attente").Range("B65536").End(xlUp).Row
    imax = Sheets("Archives régularisations").Range("B65536").End(xlUp).Row

    For x = 2 To xmax
    For I = 2 To imax

    idem = 0
    j = 2

    If Worksheets("Archives régularisations").Cells(I, j) = Worksheets("Factures en attente").Cells(x, j) Then
    idem = idem + 1
    End If
    Next

    If idem = 1 Then
    Worksheets("Factures en attente").Unprotect (123)
    Worksheets("Factures en attente").Rows(x).Delete
    x = x - 1
    End If
    Next

    End Sub

    J'ai rendu, suite à votre conseil un peu plus léger mon code. Je ne suis qu'une débutante mais j'adore comprendre et avancer sur mes codes mais là je sèche.
    1. re bonjour,

      je ne sais pas trop, ets vous sûr qu'il n'y a qu'une seule occurance pour chaque ligne de la page 1 en page 2?

      si vous ne l'êtes pas, il faudrait voir cette ligne :

      If idem = 1 Then

      en la transformant en

      If idem > 0 Then

      a+

      jéjé
      1. Je me suis mal expliqué. Les dix lignes présentes en feuille 2 égale à la ligne xmax ont été effacé mais la procédure s'arrete la.

        Après moultes essais j'en suis arrivé à une petite conclusion. En fait si en feuille 2 a liste est : 1 - 2 - 3 - 4 - 5 il n'effacera que les 5 de la feuille 1 et si c'est 5-4-3-2-1 que les un. Il ne prend que la ligne fin de la liste de la feuille 2.
      2. essaie ca :

        Private Sub CommandButton3_Click()

        xmax = Sheets("Factures en attente").Range("B65536").End(xlUp).Row
        imax = Sheets("Archives régularisations").Range("B65536").End(xlUp).Row

        For x = 2 To xmax
        For I = 2 To imax

        idem = 0
        j = 2

        If Worksheets("Archives régularisations").Cells(I, j) = Worksheets("Factures en attente").Cells(x, j) Then
        idem = idem + 1
        End If

        If idem = 1 Then
        Worksheets("Factures en attente").Unprotect (123)
        Worksheets("Factures en attente").Rows(x).Delete
        x = x - 1
        End If
        next
        Next

        End Sub
      3. Contributeur
        Bonjour,

        Excusez l'incruste!

        Juliette:
        Les doublons feuil1-feuil2 sont ils sur la m^me ligne ?
        faut il vérifier toute les 9 colonnes où il y-a-t-il une colonne "clé" (par exemple si la valeur colonne A feuille 1 est retrouvée dans la colonne A feuille 2, on supprime la ligne) ?

        au besoin met un extrait de ton classeur sans données confidentielles sur
        http://cijoint.fr/
        et colles le lien proposé dans ta réponse
      4. Bonjour michel

        Je n'ai pas l'impression que les doublons soient sur la meme ligne, et s'ils le sont au debut, ils ne peuvent plus l'etre au milieu car les lignes sont supprimées au fur et a mesure que la macro trouve les doublons.

        a+
        jéjé
      5. Contributeur
        bonjour Jejelrfou
        Tu ne crois pas que ce serait plutôt à Juliette de répondre? :-D
    2. Contributeur
      re,

      ci dessous code à essayer

      Sub effacer_doublons()
      Dim derlig As Integer, cptr As Integer, cptr_t As Integer
      Dim tablo
      ReDim tablo(0)
      
      With Sheets(1)
          derlig = .Range("B30000").End(xlUp).Row
      
      For cptr = 1 To derlig
          If Application.CountIf(Sheets(2).Columns(2), .Cells(cptr, 2)) Then
              tablo(cptr_t) = cptr & ":" & cptr
              cptr_t = cptr_t + 1
              ReDim Preserve tablo(cptr_t)
          End If
      Next
      ReDim Preserve tablo(cptr_t - 1)
      
      Application.ScreenUpdating = False
      .Range(Join(tablo, ",")).Delete
      End With
      End Sub


      peut être remplacer sheets(X) par sheets("nomdelonglet")
      1. Parfait, celui-ci fonctionne à merveille. Merci beaucoup à tous les deux, vous m'enlevez une épine bien douloureuse du pied.

        Bonne journée à vous !!!