Concaténer si doublons

bonjour,

Je recherche une formule pour la concaténation conditionnelle. Mais c'est peut-être plus complexe que cela...

J'envoie ci-joint un modèle de tableau.

A partir de la colonne A, en cas de doublons, triplons, ou pas de doublons du tout, je souhaite voir apparaître en colonne C, les données concaténées (ou pas) concernant la même personne. De même, sur la même ligne, en colonne E, voir les références concaténées de la colonne D pour la même personne.

Pour Claude, Il ne figure qu'une fois, donc, dans la colonne C, la cellule n'est pas concaténée, mais le texte de la colonne B doit apparaître. De même pour la référence dans la colonne E. (Beatrice a aussi une seule référence).

J'espère avoir exprimé clairement mon besoin. Merci d'avance de m'apporter une solution.

Mary phénix

Bonjour

Est-ce que une fois la concaténation effectuée on supprime la ligne dont la donnée a été concaténée en colonne C ou pas ?

Amicalement

Bonjour Dan,

Non je ne supprime rien, je garde toutes les lignes.

A+ Mary phénix

bonjour Dan et les autres,

Il y a une possibilité qui me conviendrait tout à fait, et qui sera peut-être plus simple pour la formule, je n'en sais rien.

C'est de concaténer en une cellule unique toutes les données de la colonne B et de la colonne D, concernant la même personne.

On gardera alors une seule colonne pour la concaténation, soit la C, soit la E.

Cela donnerait pour Adrien :

1ère possibilité : pince, crayon, règle, R1 et R2.

2ème possibilité : pince, R1, crayon, règle, R2..

cordialement,

re,

essaie avec ce code que j'ai testé sur ton fichier

Sub Regrouper()
Dim Nom As Range, valeur As Range
Dim nom2
Dim i As Byte

Application.ScreenUpdating = False
For Each Nom In Range("A2:A" & Range("A65536").End(xlUp).Row)
For i = 1 To Range("A65536").End(xlUp).Row - 1
If nom2 <> "" And nom2 = Nom Then Exit For
Set valeur = Nom.Offset(i, 0)
If valeur <> "" And valeur = Nom Then
If Nom.Offset(0, 2) = "" Then
Nom.Offset(0, 2) = Nom.Offset(0, 1) & " , " & valeur.Offset(0, 1) & " , " & Nom.Offset(0, 3)
Else: Nom.Offset(0, 2) = Nom.Offset(0, 2) & " , " & valeur.Offset(0, 1) & " , " & valeur.Offset(0, 3)
End If
End If
Next i
nom2 = Nom
Next Nom
Application.ScreenUpdating = True
End Sub

Code à placer dans un module dans VBE et à associer éventuellement à un bouton sur ta feuille.

Si ok, clique sur le V vert à coté du bouton EDITER pour cloturer le fil.

Amicalement

bonjour,

dan,

J'ai fait plusieurs tentatives, d'abord installer le code dans VBA puis l'appliquer au fichier, en vain. Je ne sais pas où se situe l'erreur.

Je vais essayer encore.

mary phénix

Re,

Pour placer le codes dans VBE. Fais comme suit :

  • ALT + F11 pour accéderà VBE
  • Va dans Menu / Insertion et choisis l'option "Insertion -> Module"
  • Dans la fenêtre vierge colle le code donné dans mon post précédent

Attention que sous excel 2007 et supérieur qu'il faudra enregistrer le fichier sous l'extension XLSM pour que la macro fonctionne.

Amicalement

Re,

J'ai suivi cette procédure, mais ça ne marche toujours pas.

Bizarre..

mary phénix

Re,

Je suppose que ton fichier posté est bien identique à l'original.

Sinon mets le fichier en ligne. Je ferai la correction

Amicalement

bonjour Dan,

J'ai fait l'essai sur le fichier que j'ai posté dès le début, et c'est ça qui ne marche pas.... Et tu m'assures que ça fonctionne avec toi.!! Je ne comprends pas.. Différent paramétrage de mon côté !!??!!

J'envoie donc le fichier sous sa forme "originale", mais dont j'ai modifié les données pour des raisons de confidentialité. Il n'y a pas la totalité des lignes (on peut considérer qu'il y en a 2000) et il y a aussi des colonnes de plus qui sont après la colonne L, mais ça n'intervient pas pour le programme normalement .

Dans la colonne J, il y a 2 statuts (A commander et livré). Normalement, je filtre en gardant le statut "A commander". Si ça pose un problème dis-le moi.

Pour la concaténation, ce sera la colonne H pour le matériel, et la colonne L pour les références.

Si on concatène tout dans une même cellule (matériel et références), ce sera dans la colonne H. Je supprimerai la colonne L

Quelle solution as-tu retenue : une seule cellule ou deux?

Voilà du travail en perspective,

en tout cas, merci pour ta patience et ta disponibilité.

Mary phénix


Dan,

une autre précision : certaines personnes peuvent figurer sur 4 voire 5 lignes.

Mary phénix

Re,

Ok je vais regarder mais ton fichier ne contient pas le code que j'ai donné... et le tableau est différent.

Une chose à savoir, je suppose que la macro doit agir sur tout le tableau ??

Refais aussi un essai avec le code que je t'ai donné car je viens de m'apercevoir que j'avais fait une petite erreur. Le code contenanait le mot "Valeureur" au lieu de "Valeur". Désolé mais je n'avais pas vu cela lorsque j'ai posté

A te relire

bonjour,

Oui, ça marche maintenant !!!!

Et oui, j'appliquerai la macro sur l'ensemble du tableau.

Mary phénix

Re,

Si je n'ai rien à faire sur ton dernier fichier et que ton souci est terminé, merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER

A te relire

Re,

J'ai encore besoin de ton aide.

Avec le code que tu as envoyé, la concaténation se fait dans la colonne C. aussi bien pour le 1er que pour le 2ème tableau..

J'ai essayé d'appliquer la macro en masquant les colonnes B à F, et aussi I et J, mais ça concatène en colonne B. quand même.

Or, pour le second tableau, la concaténation doit se faire en colonne H, avec les données de la colonne G matériel, et colonne K références.

Mary phénix

Re,

En appliquant le premier code que tu as posté au premier tableau, je m'aperçois que pour les personnes qui ne sont pas en doublons, leur matériel, et s'il y en a, la référence aussi, n'apparaissent pas en concaténé.

Par exemple, dans le premier tableau que j'ai posté : Claude a une loupe et une référence. R4, ça n'apparaît pas.

Dans le deuxième tableau, il faut enlever le filtre sur "statut matériel". On voit deux personnes en "simple" (BEATRICE CLAIRE et CLARISSE ANISSA) Elles ont un matériel, mais pas de référence.

Peux-tu ajouter une "formule" pour que le nom du matériel, et aussi la référence (quand il y en a) apparaissent dans la colonne H.?

Mary phénix

Re,

Avec le code que tu as envoyé, la concaténation se fait dans la colonne C. aussi bien pour le 1er que pour le 2ème tableau..

J'ai essayé d'appliquer la macro en masquant les colonnes B à F, et aussi I et J, mais ça concatène en colonne B. quand même.

Normal ton deuxième tableau n'est pas identique au premier. Donc il faut modifier le code pour l'adapter à ton nouveau tableau.

En appliquant le premier code que tu as posté au premier tableau, je m'aperçois que pour les personnes qui ne sont pas en doublons, leur matériel, et s'il y en a, la référence aussi, n'apparaissent pas en concaténé.

Au vu de tes explications je pensais que tu voulais uniquement ceux qui apparaissaient plusieurs fois.

Essaie avec ce code :

Sub Regrouper()
'Macro Dan - Le 15/10/2012
Dim Nom As Range, valeur As Range
Dim nom2
Dim i As Byte
Application.ScreenUpdating = False
For Each Nom In Range("A2:A" & Range("A65536").End(xlUp).Row)
    If WorksheetFunction.CountIf(Range("A2:A" & Range("A65536").End(xlUp).Row), Nom) = 1 Then
        Nom.Offset(0, 7) = Nom.Offset(0, 6) & " , " & Nom.Offset(0, 10)
    Else:
        For i = 1 To Range("A65536").End(xlUp).Row - 1
            If nom2 <> "" And nom2 = Nom Then Exit For
            Set valeur = Nom.Offset(i, 0)
            If valeur <> "" And valeur = Nom Then
                If Nom.Offset(0, 7) = "" Then
                    Nom.Offset(0, 7) = Nom.Offset(0, 6) & " , " & valeur.Offset(0, 6) & " , " & Nom.Offset(0, 10)
                Else: Nom.Offset(0, 7) = Nom.Offset(0, 7) & " , " & valeur.Offset(0, 6) & " , " & valeur.Offset(0, 10)
                End If
            End If
        Next i
        nom2 = Nom
    End If
Next Nom
Application.ScreenUpdating = True
End Sub

Si tu n'as qu'un seul nom et pas de données en référence (colonne K), tu auras aussi une virgule à la fin mais je suppose que cela ne gêne pas. La cas contraire il faudra effectuer un contrôle supplémentaire dans le code

Si ok, oublie pas de cloturer le fil...

N.B : Si par hasard tu voulais réouvrir un de tes fils cloturés, il te suffit de recliquer sur la case à cocher devenue rouge après la cloture.

Amicalement

Re,

C'est presque bon, mais Il y a quelque chose à ajouter dans ton code je pense.

J'ai testé sur l'ensemble du tableau, en enlevant le filtre en colonne J.

La référence qui se trouve en deuxième ligne pour les doublons ne s'affiche pas. Par exemple :

R7 pour Claude René, le R11 pour Fred Sylvio, R12 pour Gilles Mathieu, R13 pour Marie Anita.

Avec ta correction, ça devrait être parfait.

A+ Mary phénix

re,

Déso, je vais trop vite...

Essaie comme ceci :

Sub Regrouper()
'Macro Dan - Le 15/10/2012
Dim Nom As Range, valeur As Range
Dim nom2
Dim i As Byte
Application.ScreenUpdating = False
For Each Nom In Range("A2:A" & Range("A65536").End(xlUp).Row)
    If WorksheetFunction.CountIf(Range("A2:A" & Range("A65536").End(xlUp).Row), Nom) = 1 Then
        Nom.Offset(0, 7) = Nom.Offset(0, 6) & " , " & Nom.Offset(0, 10)
    Else:
        For i = 1 To Range("A65536").End(xlUp).Row - 1
            If nom2 <> "" And nom2 = Nom Then Exit For
            Set valeur = Nom.Offset(i, 0)
            If valeur <> "" And valeur = Nom Then
                If Nom.Offset(0, 7) = "" Then
                    Nom.Offset(0, 7) = Nom.Offset(0, 6) & " , " & Nom.Offset(0, 10) & " , " & valeur.Offset(0, 6) & " , " & valeur.Offset(0, 10)
                Else: Nom.Offset(0, 7) = Nom.Offset(0, 7) & " , " & valeur.Offset(0, 6) & " , " & valeur.Offset(0, 10)
                End If
            End If
        Next i
        nom2 = Nom
    End If
Next Nom
Application.ScreenUpdating = True
End Sub

Amicalement

Re,

AH!! Mon problème n'est pas simple....

Ton dernier code fonctionne très bien avec le 2ème tableau que j'ai posté, mais pas avec mon tableau original.

Voici le message délivré : Erreur d'exécution '6' Dépassement de capacité. J'ai appuyé sur "débogage"; le texte suivant apparaît en surligné :

For i = 1 To Range("A65536").End(xlUp).Row - 1

Est-ce que mon fichier est trop lourd? Au total il y a actuellement 1235 lignes et il y en aura encore plus. Pour la concaténation, j'utilise un tableau partiel en mettant des filtres.

Par contre j'ai fait une test. J'ai copié une partie du tableau original (150 lignes) sur une autre feuille, et là ça marche.

Est-ce que tu peux apporter une solution à ce problème?

Mary phénix

Re,

Ton dernier code fonctionne très bien avec le 2ème tableau que j'ai posté, mais pas avec mon tableau original.

Voici le message délivré : Erreur d'exécution '6' Dépassement de capacité. J'ai appuyé sur "débogage"; le texte suivant apparaît en surligné :

En début de code change

Dim i as byte

par

Dim i as integer

Amicalement

Rechercher des sujets similaires à "concatener doublons"