Excel - 2 Listes en 1

Résolu/Fermé
dubolg - 5 sept. 2011 à 10:15
 dubol - 7 sept. 2011 à 07:24
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
A voir également:

5 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
5 sept. 2011 à 10:45
Bonjour,

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

eric
0
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
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
Modifié par eriiic le 5/09/2011 à 13:23
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
6 sept. 2011 à 07:13
Bonjour,

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

eric
0
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
6 sept. 2011 à 18:42
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
Oui exa, mais je comprend mieux certaine chose maintenant. Encore merci et bonne journée
0