Fusionner 2 listes dans un tableau

Bonsoir,

je ne sais pas du tout comment faire....

je dois fusionner 2 listes

exemple

la liste A qui contient une colonne et dans chaque cellule texte de la liste il y a un mot clé qui se trouve toujours après un tiret. Mot clé qui me permet de rapprocher les deux listes.

exemple

liste A :

la forêt-pinède landaise - pinede

le lac-louise au Canada - bleu

La tour Eiffel - paris

Liste B (colonne 1 et 2)

Colonne 1 colonne 2

bleu-vert 2015

paris 1199

pinede et sable 12

j'ai besoin de pouvoir rapprocher sur une m^me ligne les 2 listes

pour avoir :

la forêt-pinède landaise - pinède pinede et sable 12

le lac-louise au Canada - bleu bleu-vert 2015

La tour Eiffel - paris paris 1199

avez-vous une idée ?

MERCI BEAUCOUP

is@

18exemple.xlsx (36.84 Ko)

Bonsoir,

Est-ce que les listes sont de longueurs égales ?

Est-ce qu'il y a une correspondance unique de chaque élément d'une liste avec un élément de l'autre liste ?

Cordialement.

Pardon pour cette réponse tardive...

Non les listes ne sont pas de longueurs égales mais je peux les rendre égales car 6 fois les valeurs d'1 cellule de la colonne "C" font appel à 2 cellules de la colonne A ... donc si la formule ne marche pas tout le temps ce n'est pas grâve

et je peux corriger aisément

oui la correspondance est unique les cellules de la colonne A sont toute attribuées à une cellule de la colonne C

les valeurs de la colonne D sontt liée avec celles de la colonne C

is@

Bonjour à tous

Un essai à tester.

Bye !

119exemple-v1.xlsm (48.33 Ko)

Ben c'est surement super mais ton bouton je vois où sa formule pour l'adapter à ma feuille (je suis nulle, désolée)

ou un auto pour savoir comment on fat ces jolis boutons pour appliquer une formule.

Pardon,

Is@

isaweb a écrit :

ton bouton je vois où sa formule pour l'adapter à ma feuille

Le mieux est de coller ta feuille sur la mienne...

Bye !

Ok , merci beaucoup

pour le bouton macro faut vraiment que je m'y mette (formation macro)

c'est très dur?

is@

isaweb a écrit :

pour le bouton macro faut vraiment que je m'y mette (formation macro)

Si ton problème ne concerne que le bouton je peux t'aider ;

Pour personnaliser un bouton de commande, on peut le dessiner avec l'outil de dessin : "INSERTION – Texte - Zone de texte"

* On saisie le texte qu’on veut voir écrit sur le bouton. Ex : ‘’Lancer la macro’’

* On sélectionne ensuite l'objet en cliquant sur sa bordure et en faisant attention à ce que ce soit bien l'objet qui soit sélectionné et non le texte à l'intérieur.

*On sélectionne les outils de dessin :’’OUTILS DE DESSIN’’ (en haut et teinté en orange)

* On choisit si un style de forme, si on veut un dégradé de couleur : clic sur l’un des boutons ‘’Abc’’

* Si on veut on clique et on modifie la forme du bouton : ‘’Modifier la forme – Modifier la forme’’

* On retourne dans le menu ‘’Accueil’’ du bandeau

* On applique les formats que l’on veut : centrage du texte, couleur du fond, couleur de la police…

* On positionne l'index de la souris sur le bord de l'objet sélectionné : l'index doit prendre la forme de 4 petites flèches en croix

* On fait un clic droit et dans la fenêtre qui s'ouvre on choisit "Format de la forme’’

* On clique sur le 3° icone des ‘’Options de forme’’

* On clique sur ‘’PROPRIETES’’

* on clique sur ‘Ne pas déplacer ou dimentionner avec les cellules’’

* On décoche la case ‘’Imprimer l’objet’’

* On ferme la fenêtre

* On sélectionne à nouveau l’objet et on y fait un clic droit

* Dans la fenêtre qui s'ouvre on choisit maintenant "Affecter une macro". Attention, il faut parfois recommencer plusieurs fois l'opération pour ouvrir la bonne fenêtre...

* On sélectionne la macro que le bouton doit déclencher

* On clique sur "OK"

On a alors un bouton de commande que l'on peut remodifier à son goût en faisant dessus un clic droit.

Si ta question concerne l'apprentissage des macros, je te répondrais que l'on n'a rien sans rien.

D'autant qu'il y a toujours à apprendre, au moins pour moi !

Bye !

Génial... Merci beaucoup, je vais tout de suite essayer...

is@

Bonjour,

Une solution sous forme de fonction personnalisée :

Function ASSOCIERCLES(pl1 As Range, pl2 As Range)
    Dim d1 As Object, d2 As Object, tablo(), k, itm, i%, j%, h%, n%
    Application.Volatile
    Set d1 = CreateObject("Scripting.Dictionary")
    With pl1
        For i = 1 To .Rows.Count
            itm = Trim(.Cells(i, 1))
            k = Split(itm): k = k(UBound(k))
            If InStr(k, "-") > 0 Then
                k = Split(k, "-"): k = k(UBound(k))
            End If
            If d1.exists(k) Then itm = d1(k) & Chr(135) & itm
            d1(k) = itm
        Next i
    End With
    Set d2 = CreateObject("Scripting.Dictionary")
    With pl2
        For i = 1 To .Rows.Count
            itm = Trim(.Cells(i, 1))
            k = Split(itm): k = k(LBound(k))
            If InStr(k, "-") > 0 Then
                k = Split(k, "-"): k = k(LBound(k))
            End If
            itm = itm & "@" & Trim(.Cells(i, 2))
            If d2.exists(k) Then itm = d2(k) & Chr(135) & itm
            d2(k) = itm
        Next i
    End With
    k = d1.keys
    For i = 0 To UBound(k) - 1
        For j = i + 1 To UBound(k)
            If k(j) < k(i) Then
                itm = k(j): k(j) = k(i): k(i) = itm
            End If
        Next j
    Next i
    n = d1.Count: If d2.Count > n Then n = d2.Count
    ReDim tablo(1 To n, 1 To 3): j = 1: h = 1
    For i = 0 To UBound(k)
        If InStr(d1(k(i)), Chr(135)) > 0 Then
            itm = Split(d1(k(i)), Chr(135))
            For n = 0 To UBound(itm)
                tablo(i + j + n, 1) = itm(n)
            Next n
            j = j + UBound(itm)
        Else
            tablo(i + j, 1) = d1(k(i))
        End If
        If d2.exists(k(i)) Then
            itm = d2(k(i))
            If InStr(itm, Chr(135)) > 0 Then
                itm = Split(itm, Chr(135))
                For n = 0 To UBound(itm)
                    itm(n) = Split(itm(n), "@")
                    tablo(i + h + n, 2) = itm(n)(0)
                    tablo(i + h + n, 3) = itm(n)(1)
                Next n
                h = h + UBound(itm)
            Else
                itm = Split(itm, "@")
                tablo(i + h, 2) = itm(0)
                tablo(i + h, 3) = itm(1)
            End If
        End If
        d1.Remove (k(i)): d2.Remove (k(i))
        n = IIf(j > h, j, h): j = n: h = n
    Next i
    If d2.Count > 0 Then
        For Each k In d2.keys
            If InStr(d2(k), Chr(135)) > 0 Then
                itm = Split(d2(k), Chr(135))
                For n = 0 To UBound(itm)
                    itm(n) = Split(itm(n), "@")
                    tablo(i + h + n, 2) = itm(n)(0)
                    tablo(i + h + n, 3) = itm(n)(1)
                Next n
                h = h + UBound(itm)
            Else
                itm = Split(d2(k), "@")
                tablo(i + h, 2) = itm(0)
                tablo(i + h, 3) = itm(1)
            End If
            i = i + 1
        Next k
    End If
    ASSOCIERCLES = tablo
End Function

C'est une fonction matricielle (à valider par Ctrl+Maj+Entrée)

Cela fonctionne comme une fonction de feuille de calcul d'Excel.

Il faut d'abord que tu sélectionnes une plage de cellules sur 3 colonnes et dont le nombre de lignes est égal au nombre de lignes de la plage qui en a le plus grand nombre.

La sélection étant faite (pas trop de souci, si tu fais une sélection trop courte il te manquera des données, il suffit alors d'étendre, éditer la formule et revalider ; trop longue tu auras des N/A à la fin car plus de données, là il faut supprimer et recommencer pour les éliminer). Donc la sélection étant faite :

Tu tapes la formule : =ASSOCIERCLES( [l'assistant d'Excel va te la proposer avant la fin...] puis les arguments séparés par un ;

le premier est ta plage 1 à 1 colonne, le second ta plage 2 à 2 colonnes (ne pas inverser).

Une fois tapée, ici : =ASSOCIERCLES(A3:A5;C3:D5)

Tu valides par la combinaison de touches : Ctrl+Maj+Entrée.

La formule s'encadre d'accolades (signifiant qu'elle est matricielle), et les résultats s'affichent.

Que fait la fonction ? Elle va analyser chacune des plages, extraire les mots-clés, trier par ordre alphabétique les mots-clés de la plage 1, reclasser les expressions correspondant à ces mots-clés dans un tableau (en 1re colonne pour la plage 1 en 2e et 3e colonnes pour la plage 2), si un mot-clé recouvre plusieurs expressions, elle en tient compte tant pour la plage 1 que pour la plage 2. Si à la fin il reste des mots-clés plage 2 n'ayant pas de correspondants plage 1, elle les ajoute en 2e et 3e colonne.

Ce tableau résultant est affecté à ta sélection.

Le problème : la fonction fonctionne parfaitement sur ton mini-échantillon (même micro-!) qui ne comporte aucun cas de correspondances multiples que doit pouvoir traiter la fonction. Il m'est donc impossible de tester son traitement complet... et je ne suis pas à l'abri d'une erreur d'indice dans les décalages à opérer pour les différents cas.

Il conviendrait donc que tu la testes, et selon tes observations, que tu communiques un échantillon plus représentatif si des corrections sont à apporter...

Cordialement.

24isaweb-exemple.xlsm (18.82 Ko)
Rechercher des sujets similaires à "fusionner listes tableau"