Vba excel : besoin d'aide.

Résolu
Juliette -  
 Juliette -
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. jejelefou Messages postés 310 Statut Membre 42
     
    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
    1. Juliette
       
      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.
      0
    2. jejelefou Messages postés 310 Statut Membre 42
       
      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
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      0
    4. jejelefou Messages postés 310 Statut Membre 42
       
      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é
      0
    5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      bonjour Jejelrfou
      Tu ne crois pas que ce serait plutôt à Juliette de répondre? :-D
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. Juliette
       
      Parfait, celui-ci fonctionne à merveille. Merci beaucoup à tous les deux, vous m'enlevez une épine bien douloureuse du pied.

      Bonne journée à vous !!!
      0
  3. jejelefou Messages postés 310 Statut Membre 42
     
    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é
    0
    1. Juliette
       
      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é.
      0
    2. jejelefou Messages postés 310 Statut Membre 42
       
      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
      0
  4. Juliette
     
    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.
    0