Concaténer des données à partir d'un identifiant récurrent

Zepioutas

XLDnaute Nouveau
Bonjour,

Je me retrouve face au problème suivant :

J'ai sur ma feuille 1 un tableau qui me sert de "base de données" pour construire des reporting sur les autres feuilles, et je n'arrive pas à faire une chose :
- Dans la 1ère colonne de la BDD se trouve un nom
- Dans la 2ème colonne une tâche générique
- Dans la 3ème colonne une desciption de la tâche.

Je voudrais rapatrier sur une autre feuille une concaténation de tâche / description pour un même nom.
Exemple, j'ai dans la BDD :
Titi Ménage Matin
Toto Jardinage Radis
Titi Jardinage Carottes

Et je voudrais avoir sur ma 2ème feuille
Titi Ménage/matin ; Jardinage/Carottes
Toto Jardinage/radis

Je n'arrive pas à trouver de formule réponde à mon pb (rechercheV ne ramène que la 1ère occurence), et étant débutant en VBA je ne sais pas coder mais seulement enregistrer des actions...

Quelqu'un a une idée pour m'aider ?

Merci d'avance et merci pour les nombreuses aides que j'ai pu déjà retirer des forums existants.

@+
 

skoobi

XLDnaute Barbatruc
Re : Concaténer des données à partir d'un identifiant récurrent

Bonjour,

tu veux le résultat dans une seule cellule par personne où une tache par colonne?
A1:Titi Ménage/matin ; Jardinage/Carottes
OU
A1: Titi Ménage/matin
B1: Jardinage/Carottes
 

Zepioutas

XLDnaute Nouveau
Re : Concaténer des données à partir d'un identifiant récurrent

Bonjour,

tu veux le résultat dans une seule cellule par personne où une tache par colonne?
A1:Titi Ménage/matin ; Jardinage/Carottes
OU
A1: Titi Ménage/matin
B1: Jardinage/Carottes



Je veux le résultat dans une seule cellule par personne, mais le nom de la personne est dans une première colonne :
A1 Titi
B1 Ménage/matin ; Jardinage/Carottes
 

Zepioutas

XLDnaute Nouveau
Re : Concaténer des données à partir d'un identifiant récurrent

merci beaucoup le résultat est assez bluffant (même si je ne comprend pas tout dans la macro...).
Par contre ça ne répond pas exactement à mon besoin :
Dans la feuille 2, j'ai déjà le nom d'inscrit dans la 1ère colonne, et il faudrait dans l'absolu que dans la 2ème colonne s'inscrive la concaténation avec comme critère nom dans 1ère feuille = nom de 1ère colonne de la 2ème feuille...

Je ne sais pas si je suis très clair, si vous avez un avis tant mieux mais merci déjàpour les efforts
 

Zepioutas

XLDnaute Nouveau
Re : Concaténer des données à partir d'un identifiant récurrent

J'ai mis un exemple dans le fichier joint qui illustre les contraintes, notamment :
- Le nom est déjà indiqué dans la feuille 2 (et peut servir de pivot)
- Il y a d'autres données dans la feuille 2 qui n'ont rien à voir avec la feuille 1.

Si ton clavier magique arrive à résoudre ça... un grand merci ! :D
 

Pièces jointes

  • Exemple.xls
    13.5 KB · Affichages: 115
  • Exemple.xls
    13.5 KB · Affichages: 120
  • Exemple.xls
    13.5 KB · Affichages: 131

Zepioutas

XLDnaute Nouveau
Re : Concaténer des données à partir d'un identifiant récurrent

Fo_rum, c'est ce que j'appelle un coup de maître !

Je réalise cependant que je ne m'y suis pas très bien pris (excusez, 1ère demande sur un forum ;) en ne précisant pas assez ma demande et en transmettant un exemple pas adéquat.

Dernier round donc j'espère, je vous transmet un tableau qui correspond à mon besoin, avec une macro reprise du xls de fo_rum, nommée concaténé (bouton sur feuil2).

J'ai légèrement modifié la macro pour répondre à mon besoin, le résultat est presque nickel sauf 2 points :
- en début de cellule concaténé, il y a un point virgule systématiquement.
- pour certaines description de tâches, la cellule est vide, est il possible dans ce cas de ne pas faire apparaître de "/" après le nom de tâche dans la cellule concaténé ?
Si vous faites tourner la macro, vous devriez comprendre ces précisions...

Est ce que vous voyez une possibilité de résoudre ces 2 petits derniers soucis ?

En tout cas merci beaucoup, c'est déjà énorme.

PS : étant débutant en VBA, pardonnez mes bêtises dans la modification du code svp, c'est peut être ça qui a créé mes nouveaux pb :)
PS 2 : A quoi servent les éléments Option Explicit et Option Compare Text en début de code ?
 

Pièces jointes

  • Exemple.xls
    39 KB · Affichages: 101
  • Exemple.xls
    39 KB · Affichages: 107
  • Exemple.xls
    39 KB · Affichages: 94

skoobi

XLDnaute Barbatruc
Re : Concaténer des données à partir d'un identifiant récurrent

Re,
bonjour fo_rum,

en reprenant le code de fo_rum:

Code:
Sub Concaténé()
'
  Dim Li As Long, C As Range
  With Sheets("feuil2")
   For Li = 8 To .Range("B600").End(xlUp).Row '600 ou +
   .Cells(Li, "G") = ""
   temp = ""
     For Each C In Sheets("feuil1").Range("B5:B" & Sheets("feuil1").Range("B82").Row)
       If .Cells(Li, "B") = C And C.Offset(, 2) <> "" Then
         temp = temp & " ; " & C.Offset(, 1) & " " & "/" & " " & C.Offset(, 2)
       End If
     Next
    If temp <> "" Then .Cells(Li, "G") = Right(temp, Len(temp) - 3)
   Next
  End With
End Sub
PS 2 : A quoi servent les éléments Option Explicit et Option Compare Text en début de code ?
Option Explicit: Cela impose de déclarer systématiquement les variables, ce qui est un réflexe à avoir.
Option Compare Text: Cela permet de ne pas faire la comparaison majuscule/minuscule dans le code.

PS: si tu veux des explications du code, n'hésite pas à nous demander ;).
 
Dernière édition:

Zepioutas

XLDnaute Nouveau
Re : Concaténer des données à partir d'un identifiant récurrent

Hello les experts !

Encore un petit souci dans la macro que tu as transmise skoobi (ou peut être encore une mauvaise explication de ma part :eek:

- Le point virgule a bien disparu en début de ligne >>> OK
- Pb pour le 2ème point ; au lieu de couper le texte après le nom de la tâche et de ne pas ajouter une / quand le champ description est vide ; rien n'est repris (on perd donc l'information sur le nom de la tâche...).
Si aucune description n'est indiqué, on veut quand même récupérer le nom de la tâche...

J'ai remis l'exemple avec la nouvelle macro... et l'ancien résultat à côté (l'ancienne macro est présente sous le nom concaténé2 pour faciliter la comparaison éventuellement).

Merci d'avance !

PS : oui si effectivement vous aviez un peu de temps pour expliquer dans la macro à quoi correspondent les ligens, je suis preneur, j'ai plus ou moins compris les conséquences en bidouillant le code, mais c'est toujours mieux d'avoir une explication éclairée :D
 

Pièces jointes

  • Exemple.xls
    44.5 KB · Affichages: 86
  • Exemple.xls
    44.5 KB · Affichages: 93
  • Exemple.xls
    44.5 KB · Affichages: 93

skoobi

XLDnaute Barbatruc
Re : Concaténer des données à partir d'un identifiant récurrent

Bonjour,

cette fois-ci je pense que c'est bon.
J'ai mis des commentaires dans le code;).

Code:
Sub Concaténé()
   Dim Li As Long, C As Range
'dans la feuille 2
  With Sheets("feuil2")
'de la 8eme à la dernière ligne colonne B
   For Li = 8 To .Range("B600").End(xlUp).Row '600 ou +
'on vide la cellule
   .Cells(Li, "G") = ""
'on initialise le texte à concaténer
   temp = ""
'pour chaque cellule "C" dans la feuille 1 colonne B depuis la ligne 5
     For Each C In Sheets("feuil1").Range("B5:B" & Sheets("feuil1").Range("B82").Row)
'si le nom entre les 2 feuilles est le même
       If .Cells(Li, "B") = C Then
'on alimente "temp", variable qui concatène le nom de la tâche + déscription.
'IIf fait la même chose que le SI() d'excel.
'ici, si la déscription de la tâche est vide, on récupère uniquement le nom de la tâche
         temp = IIf(C.Offset(, 2) = "", temp & " ; " & C.Offset(, 1), temp & " ; " & C.Offset(, 1) & " / " & C.Offset(, 2))
       End If
     Next
'on met une condition avant d'écrire le résultat au cas où rien n'a été trouvé.
'pour enlever le ";" au début, on récupère la partie droite du texte - les 3 premiers caractères
    If temp <> "" Then .Cells(Li, "G") = Right(temp, Len(temp) - 3)
   Next
  End With
End Sub
 

Zepioutas

XLDnaute Nouveau
Re : Concaténer des données à partir d'un identifiant récurrent

Bonjour à tous,

Merci à tous pour les efforts fournis, le résultat est impeccable, exactement ce que j'imaginais au début.
J'arrive au même résultat avec vos 2 macros, vous en conseillez une plutôt que l'autre ?

Bravo aux experts et merci encore.

Zep
 

Discussions similaires

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet