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,

Une proposition avec une macro VBA

A+

26charlineale4897.zip (14.45 Ko)

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.

ai-je bien choisi le bon nom de macro pour lier mon bouton ?

Le nom de la macro à associer au bouton est celui que tu trouves en tête du code : Sub Test()

Faut-il que je supprime les précédents moules que j’ai créé ?

S'il s'agit vraiment de moules, dommage de jeter .... avec quelques frites .. miam !

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+

Rechercher des sujets similaires à "concatainer textes condition"