Excel - 2 Listes en 1

Résolu
Bonjour,

Je cherche une fonction, marco, idée qui me permettrait d'automatiser un travail très pénible.

Tout débute sur Excel, j'ai 2 listes :

- 1ère : des mots l'un en dessous de l'autre (ex: Z-EV, CMM01-PU, BP(SAL), ...)

___Colonne 1 :
___Z-EV
___CMM01-PU
___BP(SAL)
___...

- 2ème : liste complète de la 1ère liste (ex: Z-EV.A, Z-EV.B, Z-EV.R, CMM01-PU.X, CMM01-PU.Y, ...)

___Colonne 1 :
___Z-EV.A
___Z-EV.B
___Z-EV.C
___CMM01-PU.X
___CMM01-PU.Y

Vous l'aurai compris, j'ai une liste synthétique qui représente mes bases et une liste développé qui comporte la base, point, autre chose.

J'ai ces 2 listes sur des feuilles séparer et mon but est de pouvoir assembler les 2 listes sur une feuille, de la manière suivant :

Colonne 1 :__________Colonne 2 :
Z-EV________________Z-EV.A
____________________Z-EV.B
____________________Z-EV.C
saut de ligne
CMM01-PU___________CMM01-PU.X
___________________CMM01-PU.Y
saut de ligne
...

Merci pour votre aide

5 réponses

  1. Contributeur
    Bonjour,

    Si liste2 comprend toutes les bases de liste1 ça simplifie le programme.
    Est-ce le cas ?

    eric
    0
    1. Il se peut qu'une base de la liste 1 ne figure pas dans la liste 2.

      Dans ce cas, je ne met rien dans la colonne 2 et je passe à la base suivante
      0
    2. Dans la liste 2 se trouve également plein d'autre base qui ne figure pas dans la liste 1.

      La référence reste la liste 1
      0
  2. Contributeur
    Re,

    essaie sur une liste plus grande :
    http://www.cijoint.fr/cjlink.php?file=cj201109/cijzMHC2jY.xls

    eric

    edit : je viens seulement de lire ton commentaire de 11:05 donc ma proposition ne va pas. Trop tard.
    Je suis absent cette am, si qcq'un veut reprendre...
    0
    1. Contributeur
      Bonjour,

      Liste2 est supposée triée.
      A tester :
      http://www.cijoint.fr/cjlink.php?file=cj201109/cijSCtOK1t.xls

      eric
      0
      1. Bcp de boulot, je testerai aujourd'hui ou plus tard et essaierai de comprendre le code. Je vous tiens au jus

        bonne journée
        0
        1. j'ai testé rapidement avec mes listes, celui-ci fonctionne superbement bien :D un grand merci à toi.

          Je vais encore l'analyser et l'adapter à mon besoin
          0
      2. Vraiment superbe !

        Par contre je ne comprend pas exactement la manière du procéder,

        pourrais-tu me l'expliquer ? Je rappel le code que j'ai adapté à mes feuilles :

        Sub Remplissage_Connecteur()
        
        '-------------------------
        'Déclaration des variables
        
            Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet
            Dim lig1 As Long, lig2 As Long, lig3 As Long, base As String, c As Range
            Set sh3 = Worksheets("F_connecteurs")
            Set sh2 = Worksheets("LIDA")
            Set sh1 = Worksheets("travail_temporaire")
        
        '--------------
        'Initialisation
            lig2 = 2: lig3 = 5: base = "vide"
            
        '----
        'Code
        
            For lig1 = 2 To sh1.[A65536].End(xlUp).Row
                If Left(sh2.Cells(lig2, 1), Len(base)) <> base Then
                    lig3 = lig3 + 1
                    base = sh1.Cells(lig1, 1)
                    sh3.Cells(lig3, 2) = base
                End If
                Set c = sh2.Columns(1).Find(base & "*", LookIn:=xlValues)
                If c Is Nothing Then
                    lig3 = lig3 + 1
                Else
                    lig2 = c.Row
                    While Left(sh2.Cells(lig2, 1), Len(base)) = base
                        sh3.Cells(lig3, 3) = sh2.Cells(lig2, 1)
                        lig2 = lig2 + 1
                        lig3 = lig3 + 1
                    Wend
                End If
            Next lig1
        End Sub
        0
        1. Contributeur
          Re,

          N'oublie pas que ça a été fait en 3 coups suite aux compléments que tu apportais au fil du temps, donc la logique de traitement n'est sûrement pas la meilleure puisque j'adaptais le réalisé...
          J'appelle 'détail' un élément de liste2. ex basexxx.yyyyy

          'Code
              ' pour toutes les lignes de 'base' liste1
              For lig1 = 2 To sh1.[A65536].End(xlUp).Row
                  ' si c'est une nouvelle base dans liste1
                  If Left(sh2.Cells(lig2, 1), Len(base)) <> base Then
                      ' sauter des lignes dans la compil
                      lig3 = lig3 + 1
                      ' mémoriser la base
                      base = sh1.Cells(lig1, 1)
                      ' l'inscrire en colonne B de compil
                      sh3.Cells(lig3, 2) = base
                  End If
                  ' rechercher la 1ère ligne commençant par 'base' dans liste2 (celle avec base.xxxx)
                  Set c = sh2.Columns(1).Find(base & "*", LookIn:=xlValues)
                  If c Is Nothing Then
                      ' s'il n'y en a pas sauter 1 ligne dans compil pour préparer base suivante
                      lig3 = lig3 + 1
                  Else
                      ' s'il y en a récupérer le n° ligne du détail dans liste2
                      lig2 = c.Row
                      ' tant que détail liste2 commence par 'base'
                      While Left(sh2.Cells(lig2, 1), Len(base)) = base
                          ' inscrire détail dans compil colonne C
                          sh3.Cells(lig3, 3) = sh2.Cells(lig2, 1)
                          ' passer à la ligne suivante liste2
                          lig2 = lig2 + 1
                          ' passer à la ligne suivante compil
                          lig3 = lig3 + 1
                      ' on boucle sur le while
                      Wend
                  End If
              ' base suivante liste1
              Next lig1
          End Sub

          Commenté au mieux, mais je pense que tu avais compris l'essentiel puisque tu avais adapté à ton classeur

          eric
          0
        2. Oui exa, mais je comprend mieux certaine chose maintenant. Encore merci et bonne journée
          0