Discussion:
concatener colonne C selon valeur colonnes A et B
(trop ancien pour répondre)
jip
2017-02-17 15:05:54 UTC
Permalink
Raw Message
Bonjour
Dans un tableau excel 2010 dont petit extrait ici :
http://www.cjoint.com/c/GBrpaEYTYhR

j'ai en colonne A une valeur, en B une sous-valeur et en C une donnée.
Je souhaite qu'en D soient concaténées les valeurs de C (séparées par ";") si B change et/ou si A change.
Petit exemple dans le tableau.

Pas trouvé avec les formules et en vba je ne connais pas.
Merci d'avance si vous avez une idée.
Cordialement
ThierryP
2017-02-17 16:46:30 UTC
Permalink
Raw Message
Bonsoir jip,

Ceci devrait faire l'affaire :
'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B" & Range("A65536").End(xlUp).Row)) Is Nothing Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(0, 4 - Target.Column)) Then sep = ";" Else sep = ""
Target.Offset(0, 4 - Target.Column) = Target.Offset(0, 4 - Target.Column) & sep & _
Target.Offset(0, 3 - Target.Column)
Application.EnableEvents = True
Exit Sub
End If
End Sub
'--------------------------
Pour accéder à l'éditeur VBA : ALT+F11
CTRL+R pour afficher l'explorateur d'objets
colle le texte entre les deux '-----------

Bonne soirée,

ThierryP
double-clic sur "Feuil1(Feuil1) dans cet explorateur
Coller la macro ci-dessus
jip
2017-02-20 08:52:45 UTC
Permalink
Raw Message
Post by ThierryP
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B" & Range("A65536").End(xlUp).Row)) Is Nothing Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(0, 4 - Target.Column)) Then sep = ";" Else sep = ""
Target.Offset(0, 4 - Target.Column) = Target.Offset(0, 4 - Target.Column) & sep & _
Target.Offset(0, 3 - Target.Column)
Application.EnableEvents = True
Exit Sub
End If
End Sub
'--------------------------
Pour accéder à l'éditeur VBA : ALT+F11
CTRL+R pour afficher l'explorateur d'objets
colle le texte entre les deux '-----------
Merci mais impossible de voir la macro donc de l'exécuter.
Mes connaissances vba sont trrrrèèès limitées mais je remarque "Private Sub"
Pourquoi ?
Comment ça marche ?
merci
MichD
2017-02-20 11:04:01 UTC
Permalink
Raw Message
Bonjour,

La macro que Thierry a proposée s'exécute à chaque fois qu'une cellule de la plage A:B passe en
mode édition. Cela se produit quand tu insères manuellement une nouvelle valeur ou que tu
double-cliques dans une cellule ou que tu utilises la touche "F2". Dès que le contenu de la
cellule est validé, la macro s'exécute. Cela est fait automatiquement sans que tu aies besoin
de le demander et de cliquer sur un bouton. C'est ce qu'Excel appelle une macro événementielle.

Pour ce qui précède fonctionne, tu dois copier ce code dans le module de la feuille. Fais un
clic droit sur l'onglet de la feuille où l'action se déroule, et colle le code dans la "page
blanche"! C'est tout. Pour l'exécuter, change une valeur de la colonne A:B. Vois si cette macro
répond à tes besoins.

MichD
MichD
2017-02-20 11:07:33 UTC
Permalink
Raw Message
Il manque un bout de phrase...

Fais un clic droit sur l'onglet de la feuille où l'action se déroule ET choisis la commande
"Visualier le code...

MichD
jip
2017-02-20 13:34:01 UTC
Permalink
Raw Message
Post by MichD
Il manque un bout de phrase...
Fais un clic droit sur l'onglet de la feuille où l'action se déroule ET choisis la commande
"Visualier le code...
MichD
Merci mais moi mon tableau complet existe déjà.

"Pour l'exécuter, change une valeur de la colonne A:B."

Je ne comprends pas la procédure.
Tant pis.
Merci
MichD
2017-02-22 12:03:33 UTC
Permalink
Raw Message
Bonjour,

Le problème de ta question, c'est que je ne comprends pas ce que tu veux concaténer. Comme tu
veux concaténer la colonne C et qu'il n'y a qu'une seule valeur dans cette cellule, comment
veux-tu effectuer la concaténation?

J'ai fait un petit exemple : http://www.cjoint.com/c/GBwl0Z7Wyfi
Dans ce fichier c'est la valeur de la colonne A et a valeur de la colonne B qui sont
concaténées en colonne D
Tu n'as qu'à adapter une seule ligne, celle qui effectue la concaténation...

Pour modifier la colonne A ou la colonne B, tu sélectionnes la cellule et tu tapes la valeur,
j'ai désactivé le double-clic sur les cellules de la plage A:B où il y a déjà des données.

Tout le code est dans la feuille module. Fais un clic droit sur l'onglet de la feuille et
choisis la commande "Visualiser le code"

MichD
ThierryP
2017-02-22 16:02:33 UTC
Permalink
Raw Message
Bonjour Denis,

Mea culpa, je n'avais pas pensé au double-clic dans la cellule, ni au clic droit sur l'onglet.... C'est pour ça que les gourous existent :-)))

Par contre, il me semble que la macro fait le job, même si mes explications étaient beaucoup plus sommaires que les tiennes !

ThierryP
MichD
2017-02-22 18:12:35 UTC
Permalink
Raw Message
| Par contre, il me semble que la macro fait le job,

Je n'en doute pas, je n'ai pas testé... tant mieux si tu as compris ce qu'il fallait
concaténer!

P.S. Au propos du demandeur, il n'a pas compris qu'il devait copier ta procédure dans "LE
MODULE FEUILLE" où l'action se déroule. Pour ce faire, un clic droit sur l'onglet de la feuille
et choisir "visualiser le code" et copier le code dans la page blanche...

MichD
MichD
2017-02-22 18:24:27 UTC
Permalink
Raw Message
En passant, en plus du double-clic, pour être complet, il faut désactiver aussi le raccourci
clavier "F2" qui permet de passer la cellule sélectionnée en mode édition en utilisant cette
ligne de code : Application.OnKey "{F2}", "" et pour remettre ce raccourci en son état
primaire, cette ligne de code : Application.OnKey "{F2}" . Les 2 commandes se ressemblent, mais
font le travail!

P.S. Pour le demandeur, il faut inhiber le double-clic ou le raccourci clavier "F2" sur une
cellule, car même si l'usager décide de valider l'information de la cellule, la macro va se
déclencher et elle va concaténer les données mêmes si les colonnes A et B n'ont pas été
modifiées. C'est ce pour quoi ce type de procédure s'appelle "Macro événementielle". Elle se
déclenche par l'intervention de l'usager dans la feuille. Nul besoin d'appeler la macro par un
bouton ou par la fenêtre des macros.


MichD

Loading...