Concatainer les textes de cellules sous condition
Bonjour,
J'ai beaucoup lu les questions et réponses de votre forum, fort intéressant, néanmoins, ne trouvant pas la solution, je sollicite votre aide.
tableau 1
en col A : une liste de clients (avec doublons)
en colonne B : n° de facture
en colonne C : les produits vendus
en colonne C : des commentaires
tableau 2 :
en colonne E : les critères (nom du client)
en colonne F : les commentaires concatainer de ce critère, séparés par un ;
Je vous joins le petit fichier en pièce jointe
Par avance, je vous remercie pour vos lumières
Cdlt
Charline
bonjour
tu as une belle base de données bien organisée. Pourquoi vouloir perdre de l'information avec des choses compliquées ?
fais simple : un filtre sur la colonne Légumes
pour plus de faicilité, j'ai mis sous forme de tableaux
bonjour Frangy et merci pour cette proposition.
J'ai fait le test avec le fichier joint et ça marche! cool
A présent, j'ai besoin de le mettre en application sur mon document .
Néanmoins, n'étant pas très doué avec VBA :
- Comme j'avais crée et envoyé un fichier simplifié, je vous joins ce même fichier avec toutes les colonnes, pour vous permettre de rédiger la formule que vous m'avez proposée avec les bonnes lettres pour les colonnes. Sans vouloir abuser de votre gentillesse, vous serait-possible de me réécrire les lignes de formules avec ces modifications SVP?
- comment dois-je faire ensuite pour exporter tes formules sur mon document excel SVP?
- comment faire pour créer un bouton et le lier à la formule SVP?
- question idiote : existe-il une formule excel (imbriquée certainement) sans VBA?
Par avance, je vous remercie de votre retour
Charline
bonjour jmd
Je vous remercie pour votre réponse et cette proposition intéressante.
Néanmoins, je ne peux pas me contenter des filtres car ils ne me permettent pas d'avoir tous les commentaires rattachés aux produits et leur facture, et j'ai réellement besoin que tout cela apparaissent à la suite dans une même cellule
merci quand même pour cette proposition
Cdlt
charline
charlineale4897 a écrit :bonjour Frangy et merci pour cette proposition.
bonjour jmd
Je vous remercie pour votre réponse et cette proposition intéressante.
Néanmoins, je ne peux pas me contenter des filtres car ils ne me permettent pas d'avoir tous les commentaires rattachés aux produits et leur facture, et j'ai réellement besoin que tout cela apparaissent à la suite dans une même cellule
merci quand même pour cette proposition
Cdlt
charline
alors il faut du VBA, comme réalisé par frangy
mais tu n'as pas "besoin" de concaténer, tu as "envie".
en effet il vaut mille fois mieux conserver une forme de tableau que de créer de longues phrases peu lisibles
mais ce n'est que mon opinion, perso, de moi.
bon travail
salut à frangy
amitiés à tous
merci jdm pour vos réponses
cdlt
charline
Tout d'abord, une précision : la solution que je te propose n'utilise pas une formule mais une procédure VBA.
Si tu modifies la structure de la feuille, le code devra être adapté.
Pour visualiser cette procédure,
appuyer sur Alt + F11 pour ouvrir l'éditeur,
puis ctrl + R pour ouvrirl'explorateur de projets,
puis clic sur Modules/ Module 1.
J'ai placé des commentaires dans le code pour te permettre de le décrypter.
Sub Test()
Dim C As Range, Cel As Range
Dim Texte As String
'On efface le récapitulatif des commentaires
Range("J4", Range("J" & Rows.Count).End(xlUp)).ClearContents
'On balaye la liste des clients du tableau récapitulatif
For Each C In Range("I4", Range("I" & Rows.Count).End(xlUp))
'On balaye la liste des clients du tableau A
For Each Cel In Range("A4", Range("A" & Rows.Count).End(xlUp))
'Si le nom du clent du tableau récapitulatif correspond à celui du tableau A
'et que la cellule commentaire est renseignée
If Cel.Value = C.Value And Cel.Offset(, 6) <> "" Then
'On note le texte du commentaire
Texte = Texte & "F" & Cel.Offset(, 2).Value & " " & Cel.Offset(, 3).Value & " " & Cel.Offset(, 6).Value & "; "
End If
Next Cel
'Si le texte final n'est pas vide,
'les commentaires sont copiés dans le tableau récapitulatif
If Texte <> "" Then
C.Offset(, 1) = Left(Texte, Len(Texte) - 2)
Texte = ""
End If
Next C
End Sub
Pour copier ce code, il suffit de créer un module dans ton classeur Excel (clic droit sur le projet > Insertion > Module) puis copier/coller le code.
Une autre solution, les 2 classeurs étant ouverts, est de faire glisser le module dans l'autre classeur. Pour cela, maintenir le clic gauche sur le module 1 et le faire glisser dans l'autre projet.
Pour créer un bouton de commande, dans l'onglet DEVELOPPEUR > Insérer > Contrôles de formulaire > clic sur Bouton puis définir le contour du bouton dans la feuille.
Ensuite, pour affecter la procédure à ce bouton, clic droit sur le bouton > Affecter une macro.
Existe-il une formule excel ? Possible, mais ce n'est pas ma tasse de thé.
Les formules sont très bien adaptées pour des résultats "standards" mais difficiles à élaborer pour obtenir un résultat aussi spécifique que celui que tu recherches.
Je laisse faire les virtuoses de la fonction intégrée.
A+
re
J'ai téléchargé votre proposition, je clique sur le bouton "test" : cela fonctionne très bien sur toutes les lignes .cool
pour exporter sur mon document, J'ai choisi votre 1ère solution : de copier/ coller le code
J'ai bien réussi à fabriquer un bouton et à l'affecté à la macro qui est nommée "module11.test".
Néanmoins dans mon document, quand je clique sur mon bouton, cela inscrit « Ffacture pdt commentaires » sur la cellule J3 du tableau B ; Aucune autre cellule de la colonne J ne se remplie
Sauriez-vous ce qui se passe SVP ?
cdlt
charline
Je ne peux pas te dire avec certitude ce qui se passe parce que j'ai prêté ma boule de cristal (je sais, c'est ballot !) .
Par contre, je me doute que si ça fonctionne bien avec mon fichier et moins bien avec le tien, c'est qu'il y a une différence entre les deux.
Tu peux commencer par t'assurer que les tableaux sont aux mêmes emplacements.
A+
ok,
En effet, la ligne d'étiquette de colonne est la n°8 sur mon doc alors que sur le fichier que je vous ai envoyé, elle est en ligne 3
Je suis désolée pour cette erreur
Si vous vouliez bien continuer à m’aider, je vous adresse un joint tableau avec les intitulés exacts des étiquettes et les emplacement exacts.
Question : ai-je bien choisi le bon nom de macro pour lier mon bouton , parce que il avait aussi module12.test
Faut-il que je supprime les précédents moules que j’ai créé ?
Par avance merci
Cdlt
charline
Voici le fichier corrigé :
Je te laisse le loisir de regarder les lignes modifiées.
Le nom de la macro à associer au bouton est celui que tu trouves en tête du code : Sub Test()ai-je bien choisi le bon nom de macro pour lier mon bouton ?
S'il s'agit vraiment de moules, dommage de jeter .... avec quelques frites .. miam !Faut-il que je supprime les précédents moules que j’ai créé ?
S'il s'agit de modules, je te conseille de les supprimer ... s'ils ne servent à rien.
A+
bonjour frangy
désolée d'avoir tardé à répondre.
Mdr...en effet, je parlais bien de module
Meric pour les modifs
J'essai et je reviens vers vous pour vous dire
Cdlt
charline
bonjour frangy
Je te remercie pour cette dernière modification
Il fonctionne youhouuuu....merci
Sans vouloir abuser de tes savoirs et de ton temps, j'aurais une petite doléance supplémentaire
Serait-il possible que lorsque sur une ligne, il n'y a rien (vide) dans la colonne "commentaires" du tableau des saisies (tableau 1), alors aucune infos ne soient retranscrit dans la cellule de la colonne "commentaires" du tableau 2, SVP ( (ni F, ni le n°facture, ni le produit, ni son commentaire (vide)?
Ainsi pour chaque client, dans la cellule de la colonne "commentaires" du tableau 2, seuls seraient listés (séparés de " ;") les produits ayant fait l'objet d'un commentaire.
Par avance, je vous en remercie
cdlt
charline
Bonjour,
Serait-il possible que lorsque sur une ligne, il n'y a rien (vide) dans la colonne "commentaires" du tableau des saisies (tableau 1), alors aucune info ne soient retranscrite dans la cellule de la colonne "commentaires" du tableau 2
Je n'ai peut-être pas bien saisi le sens de ta question car c'est déjà le cas avec la procédure proposée.
La ligne de code suivante ne retranscrit les infos que si la cellule commentaire est renseignée
If Cel.Value = C.Value And Cel.Offset(, 6) <> "" Then
A+
bonjour,
Je re remerice pour ta réponse.
En effet, dans ta proposition et avec le tableau que je t'ai fourni, c'est le cas, s'il n'y a rien dans "commentaires", alors pas de retranscription d'infos.
Néanmoins dans le document sur lequel j'ai transposé ta procédure, dans les cellules "commentaires " du tableau 1, même si en apparence on ne voit rien écrit dans cette cellule, lorsque l'on se met dessus, en fait il y a le mot "(vide)". C'est peut être pour ça qu'il considère qu'il y a quelque chose à retranscrire.
Peux-tu m'aider STP?
Par avance, merci
cdlt
Charline
Bonjour,
Quel est le code de ce caractère invisible ?
(Pour le déterminer, tu peux utiliser la fonction CODE)
A+
je viens de me mettre sur une de ces cellules
Une fois dessus je peux lire "(vide)" mais uniquement dans la barre de formule, alors qu'on ne voit qu'une cellule qui est vide si on ne regarde que le tableau.
Je me suis mis sur la cellule, j'ai cliqué sur la touche "fx" de la barre de formule, il est pararue une fenêtre "insérer une fonction, j'ai choisi la fonction code, choisi ma fameuse cellule vide et il m'affiche le résultat "40"
J'espère que j'ai bien compris ce qu'il fallait faire et que cela va t'aider.
a+
Je suis surpris par ta réponse car le code 40 correspond à la parenthèse ouvrante.
Le plus simple serait que tu envoies un exemple dans un fichier.
A+
ci-joint l'exemple ; je dois te préciser que le tableau 1 est un tableau croisé dynamique
merci
a+
Avec un exemple, tout devient limpide
Essaie le code suivant :
Sub Test()
Dim DerLig As Long
Dim C As Range, Cel As Range
Dim Texte As String
'On efface le récapitulatif des commentaires
DerLig = Application.Max(9, Range("J" & Rows.Count).End(xlUp).Row)
Range("J9:J" & DerLig).ClearContents
'On balaye la liste des clients du tableau récapitulatif
For Each C In Range("I9", Range("I" & Rows.Count).End(xlUp))
'On balaye la liste des clients du tableau A
For Each Cel In Range("A9", Range("A" & Rows.Count).End(xlUp))
'Si le nom du clent du tableau récapitulatif correspond à celui du tableau A
'et que la cellule commentaire est renseignée
If Cel.Value = C.Value And Cel.Offset(, 6) <> "" And Cel.Offset(, 6) <> "(vide)" Then
'On note le texte du commentaire
Texte = Texte & "F" & Cel.Offset(, 2).Value & " " & Cel.Offset(, 3).Value & " " & Cel.Offset(, 6).Value & "; "
End If
Next Cel
'Si le texte final n'est pas vide,
'les commentaires sont copiés dans le tableau récapitulatif
If Texte <> "" Then
C.Offset(, 1) = Left(Texte, Len(Texte) - 2)
Texte = ""
End If
Next C
End Sub
A+