Excel - 2 Listes en 1

Résolu
dubolg -  
 dubol -
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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

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

    eric
    0
    1. dubolg
       
      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. dubolg
       
      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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

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

    eric
    0
  4. dubol
     
    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. dubol
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubolg
     
    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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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. dubol
       
      Oui exa, mais je comprend mieux certaine chose maintenant. Encore merci et bonne journée
      0