Additionner des cellules après une RECHERCHEV - Macro ou formules

Bonjour à tous,

Je cherche une formule (mais je ne pense pas que ce soit possible) ou une Macro, qui me permettrait d'afficher les données de la colonne Résultat attendu

Si pour tel numéro de contrat, tous les produits sont identiques alors : afficher le produit , ex 1155, que des produits B, alors afficher B

Par contre, si pour le même numéro, il y a différents produits, alors afficher les 2 produits soit "A-B" (petite précision pour le contrat 1122, je cherche bien le résultat A-B et pas A-A-B)

Num contratProduitsRésultat attendu
1122AA-B
1122AA-B
1122BA-B
1155BB
1155BB
1188AA

Pouvez vous m'éclairer s'il vous plait

Bonjour Camille Bernard

Un fichier à partager ?

Voilà un code VBA qui doit normalement répondre à ton besoin et le fichier qui va avec. Tu devras surement adapter le code à ton fichier (donc attention avant de l'executer)

(Tu devrais normalement avoir besoin d'ajuster uniquement les lettres de colonne)

2camille.xlsm (23.07 Ko)
Sub Concat()
Dim Feuille As Worksheet
Dim TBL(), TBL2()
Dim Dernlig As Long
Dim CRIT As String, COMPAR As String, TEMPO As String, RESULT As String
Dim DICO As Object

    Set Feuille = ThisWorkbook.Worksheets("Feuil1") 'A ajuster
    Dernlig = Feuille.Range("A" & Feuille.Rows.Count).End(xlUp).Row 'A ajuster
    TBL = Feuille.Range("A1:B" & Dernlig).Value 'A ajuster
    Set DICO = CreateObject("Scripting.Dictionary")

    For i = 1 To UBound(TBL, 1)
        DICO.RemoveAll
        RESULT = ""
        TEMPO = ""
        CRIT = TBL(i, 1)
        For j = 1 To UBound(TBL, 1)
            COMPAR = TBL(j, 1)
            If CRIT = COMPAR Then
                TEMPO = TBL(j, 2)
                If Not DICO.Exists(TEMPO) Then
                    If RESULT = "" Then RESULT = TEMPO Else RESULT = RESULT & "-" & TEMPO
                    DICO(TEMPO) = ""
                End If
            End If
        Next j
        ReDim Preserve TBL2(1 To 1, 1 To i)
        TBL2(1, i) = RESULT
    Next i
    Feuille.Range("C1").Resize(UBound(TBL2, 2), 1) = Application.WorksheetFunction.Transpose(TBL2) 'A ajuster
End Sub

bonjour

un essai sans VB pour qques val à collecter

sinon voir "Recherche multiple " fonction perso

8camille.xlsx (8.88 Ko)

Bonjour GGautier,

Super merci beaucoup de ton retour si rapide ! La macro fonctionne comme il faut!

Petite question, est il possible d'avoir le résultat des produits par ordre alphabétique ? (uniquement A-B, pas B-A)

Bonjour Tulipe,

je n'arrive pas à appliquer ta formule, j'ai renommé les colonnes et enregistré sous xlsx, y'a t il autre chose à faire ?

Voila !

40book1.xlsm (18.57 Ko)

Bonjour,

Il existe aussi une autre solution sans macro (voir classeur en pièce jointe):

--1: Laissez la colonne D vide (on s'en servira plus tard).

--2:

-Créez la colonne "LES NUMEROS SONT-ILS INDENTIQUES D'UNE LIGNE A L'AUTRE ?" en E

-Rentrez la formule "=SI(A2=A3;"OUI";"NON")" en E2

-Remarque: l'objectif de cette formule est d'indiquer à excel le lieu où nous changeons de numéros produit.

--3:

-Créez la colonne "LES PRODUITS SONT-ILS INDENTIQUES D'UNE LIGNE A L'AUTRE ?" en F

-Rentrez la formule "=SI(B2=B3;"OUI";"NON")" en F2

-Remarque: l'objectif de cette formule est d'indiquer à excel le lieu où nous changeons de produit.

--4:

-Créez la colonne "LE NUMEROS PRODUITS A-T-IL DÉJÀ ÉTÉ REPETE POUR CE NUMERO DE CONTRAT ? " en G

-Rentrez la formule "=SI(ET(E2="OUI";F2="OUI");"OUI";"NON")" en G2

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--5:

-Créez la colonne "EXTRACTION DES PRODUITS QUI N'ONT PAS DÉJÀ ÉTÉ REPETE POUR UN NUMERO" en H

-Rentrez la formule "" en H2

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--6:

-Créez la colonne "CONCATENATION DES PRODUITS QUI N'ONT PAS DÉJÀ ÉTÉ REPETE POUR UN NUMERO" en I

-Rentrez la formule "=SI(OU(E1=$E$1;H2="");"";SI(ET(I1="";E1="OUI");H2;SI(E1="OUI";I1&"-"&H2;SI(E1="NON";H2;""))))" en I2

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--7:

-Ecrivez "Résultat avec formule" en D1

-Rentrez la formule "=SI(OU(E2="OUI";E2="NON");INDEX(I2:I7;EQUIV("NON";E2:E7;0));D1)" en

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--8:

-étirez l'ensemble des formules des nouvelles colonnes de la ligne 2 à la ligne 9

--9: pour peaufiner, vous pouvez masquer les colonnes indésirables (mais il ne faut pas les supprimer ni les modifier !) en suivant un tuto sur internet.

En espérant que cela pourra vous être utile,

Bonne journée !

Bonjour Marhoffer Geoffrey

Je suis sur téléphone là, j'ai une remarque où plutôt une question, ta méthode fonctionne t'elle aussi si les données de la première colonne ne sont pas en triées ?

je me pose la question en voyant cette formule "=SI(B2=B3;"OUI";"NON")" ?

Sinon il est possible de passer par des listes sans doublons avec une ordonnance sur les datas !

voir peut être ici pour illustrer mes propos : https://forum.excel-pratique.com/excel/filtrer-et-combiner-sans-doublons-149503

Bonjour,

Il existe aussi une autre solution sans macro (voir classeur en pièce jointe):

--1: Laissez la colonne D vide (on s'en servira plus tard).

--2:

-Créez la colonne "LES NUMEROS SONT-ILS INDENTIQUES D'UNE LIGNE A L'AUTRE ?" en E

-Rentrez la formule "=SI(A2=A3;"OUI";"NON")" en E2

-Remarque: l'objectif de cette formule est d'indiquer à excel le lieu où nous changeons de numéros produit.

--3:

-Créez la colonne "LES PRODUITS SONT-ILS INDENTIQUES D'UNE LIGNE A L'AUTRE ?" en F

-Rentrez la formule "=SI(B2=B3;"OUI";"NON")" en F2

-Remarque: l'objectif de cette formule est d'indiquer à excel le lieu où nous changeons de produit.

--4:

-Créez la colonne "LE NUMEROS PRODUITS A-T-IL DÉJÀ ÉTÉ REPETE POUR CE NUMERO DE CONTRAT ? " en G

-Rentrez la formule "=SI(ET(E2="OUI";F2="OUI");"OUI";"NON")" en G2

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--5:

-Créez la colonne "EXTRACTION DES PRODUITS QUI N'ONT PAS DÉJÀ ÉTÉ REPETE POUR UN NUMERO" en H

-Rentrez la formule "" en H2

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--6:

-Créez la colonne "CONCATENATION DES PRODUITS QUI N'ONT PAS DÉJÀ ÉTÉ REPETE POUR UN NUMERO" en I

-Rentrez la formule "=SI(OU(E1=$E$1;H2="");"";SI(ET(I1="";E1="OUI");H2;SI(E1="OUI";I1&"-"&H2;SI(E1="NON";H2;""))))" en I2

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--7:

-Ecrivez "Résultat avec formule" en D1

-Rentrez la formule "=SI(OU(E2="OUI";E2="NON");INDEX(I2:I7;EQUIV("NON";E2:E7;0));D1)" en

-Remarque: l'objectif de cette formule est d'indiquer à excel la réponse à la question de la colonne

--8:

-étirez l'ensemble des formules des nouvelles colonnes de la ligne 2 à la ligne 9

--9: pour peaufiner, vous pouvez masquer les colonnes indésirables (mais il ne faut pas les supprimer ni les modifier !) en suivant un tuto sur internet.

En espérant que cela pourra vous être utile,

Bonne journée !

et si on met un C .....................................

Avec ma macro "NORMALEMENT" ça marche avec le C ;)

Bonjour tout le monde :)

Ci joint le fichier avec une fonction de tri, cependant je ne suis pas sur que se soit la façon la plus optimal de trier une variable, si un expert pourrais nous dire ce qu'il en pense ça serai cool :)

3camillev2.xlsm (22.19 Ko)
Function TriRESULT(LeRESULT As String) As String
Dim x As Long, y As Long
Dim TriTBL() As String
Dim TEMPO As String

    TriTBL = Split(LeRESULT, "-")
    For x = 0 To UBound(TriTBL)
        For y = 0 To UBound(TriTBL)
            If TriTBL(y) > TriTBL(x) Then
                TEMPO = TriTBL(y): TriTBL(y) = TriTBL(x): TriTBL(x) = TEMPO
            End If
        Next y
    Next x
    For x = 0 To UBound(TriTBL)
        If TriRESULT = "" Then TriRESULT = TriTBL(x) Else TriRESULT = TriRESULT & "-" & TriTBL(x)
    Next x
End Function

Avec ma macro "NORMALEMENT" ça marche avec le C ;)

c'est le but

Ca aurait été bête de faire une Macro qui ne comprend que "A" et "B" :')

Ca aurait été bête de faire une Macro qui ne comprend que "A" et "B" :')

ça depend , en période de restrictions

Bonjour tout le monde,

Merci à vous pour vos nombreux retours, mon problème est résolu grâce à vous ;)

Bonne soirée !

Bonjour,

Effectivement, ma formule ne fonctionne pas si on rajoute un C .

Je vais essayer de résoudre ce problème ou d'utiliser les autres solutions qui ont été proposée.

Merci pour votre retour,

Bonne journée.

Rechercher des sujets similaires à "additionner recherchev macro formules"