Concatener avec condition

36exemple.xlsx (8.05 Ko)

Bonjour à tous,

Je sollicite votre aide ou conseils à propos d'un problème que je rencontre dans le cadre de mon travail.

J'ai un fichier excel sur lequel je dois opérer une macro et comme vous vous en doutez je bloque.

J'ai un tableau avec plusieurs colonnes, dont deux qui m'intéressent, la colonne référence ou sont entrés les références et une colonne affaire.

Dans la colonne référence il y a des doublons, et pour chaque référence doublon je souhaiterai concatener les n° d'affaires.

Merci d'avance !

Bonjour

Un essai à tester. Te convient-il ?

Bye !

104exemple-v1.xlsm (22.42 Ko)

Bonjour, merci d'avoir pris le temps d'y jeter un coup d'oeil mais serait t'il possible que vous m'envoyiez ca d'une autre façon ou sur mon adresse mail car je suis au travail et je ne peux pas ouvrir les fichier qui sont mis en pièce jointe sur ce site.

Merci de votre compréhension

Bonjour le fil, bonjour le forum,

Code très similaire que celui de GMB mais le résultat est renvoyé dans un tableau à partir de D1...

Le code :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
TV = O.Range("A1").CurrentRegion 'définit la tableau des valeurs TV
O.Range("D1").CurrentRegion.ClearContents 'efface d'éventuelles anciennes données
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
    If Not D.exists(TV(I, 1)) Then 'condition : si la référence n'existe pas dans le dictionnaire D
        D(TV(I, 1)) = TV(I, 2) 'définit la clé
     Else 'sinon
        D(TV(I, 1)) = D(TV(I, 1)) & " - " & TV(I, 2) 'définit la clé (concaténation)
     End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Range("D1").Value = "Référence" 'écrit "Référence" en D1
O.Range("D2").Resize(D.Count, 1).Value = Application.Transpose(D.Keys) 'renvoie en D2 redimensionnée les références sans doublon
O.Range("E1").Value = "Nº Affaire" 'écrit "Nº Affaire" en E1
O.Range("E2").Resize(D.Count, 1).Value = Application.Transpose(D.items) 'renvoie dans E2 le tableau les numéros d'affaire concaténés
End Sub

Bonjour ThauThème

je ne comprends pas très bien ton code, ce code permet de concatener toutes les n° d'affaires dans une seule cellule si la référence est la même et ensuite de supprimer les doublons de références pour ne garder qu'une seule cellule par référence avec en face toutes les affaires concatenées dans la cellule face à cette référence ?

Re,

C'est presque ça !... En fait il ne supprime pas les doublons, il n'en tient compte que pour la concaténation

et renvoie le résultat dans un tableau de deux colonnes (Références / N° Affaire) à partir de D1. J'ai trouvé inutile de répéter la concaténation des affaires sur chaque ligne de référence...

C'est d'ailleurs ce que fait le code de GMB que je te recopie ici. Comme ça tu pourras choisir celui qui te convient le mieux...

Option Explicit

Dim tablo, dico, v, i&

Sub Concatener()

    tablo = Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row)
    Set dico = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(tablo, 1)
        If dico.exists(tablo(i, 1)) Then
            v = dico(tablo(i, 1))
            dico.Remove (tablo(i, 1))
            dico(tablo(i, 1)) = v & " " & tablo(i, 2)
        Else
            dico(tablo(i, 1)) = tablo(i, 2)
        End If
    Next i

    For i = 2 To UBound(tablo, 1) + 1
        Range("C" & i) = dico(tablo(i - 1, 1))
    Next i
End Sub

ThauThème, gmb je tiens à vous remercier pour la rapidité et la justesse de vos réponses à tous les deux.

Cela à l'air de marcher de façon plus que correcte même si je ne comprends pas tout à vos codes (j'ai encore énormément de progrès à faire).

Merci beaucoup

Rebonjour, à tous, en essayant avec les deux codes que vous avez créer il semble que certains valeurs viennent se concatener plusieurs fois tandis que d'autres d'apparaissent pas :S

Comme je ne maîtrise pas du tout ce que vous avez fait je suis dans l'incapacité totale de corriger quoi que ce soit

En vous remerciant d'avance de l'éventuel temps que vous m'accorderez.

Ci-joint un fichier exemple :

Par avance au travail je ne peux pas ouvrir les fichier que vous ajoutez en pièce jointe, si vous avez une proposition de code pourriez vous l'écrire directement dans le message ?

merci

60classeur1.xlsm (17.11 Ko)

Bonjour le fil, bonjour le forum,

Ton exemple ne me paraît pas contenir les erreurs que tu cites ! Pourrais-tu les mettre en évidence... Il y a 34 articles au départ, 20 après suppression des doublons et on retrouve bien 34 N° Affaire dans la colonne E. Pour moi le code fonctionne correctement...

Effectivement, j'ai visualisé le problème qui apparaissait sur mon fichier de base.

Désolé pour le dérangement et le temps perdu

Rechercher des sujets similaires à "concatener condition"