Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise bout à bout de textes dans Excel et en VBA

4 réponses
Avatar
Coriandre
Rebonjour,

Soit le résultat en D10 de la mise bout à bout du texte contenu dans des
cellules (A10 à C10), comme ci dessous :
=CONCATENER(A10;" " ;"puis; " ";B10;" ";"puis";" ";C10)
Comment faire pour éviter la multiplication des conditions selon que B ou C
ou B et C sont vides, pour éviter les espaces et les "puis" inutiles ?
Ex , si B10 est vide :
=Si(B10="";CONCATENER(A10;" " ;"puis; " ";C10), etc.

Quelle formule pour dire que la concaténation ne doit se faire qu'en prenant
les cellules non vides ?

D'autre part, en VBA itou : si ce sont des comboboxs qui contiennent les
textes à mettre bout à bout, comment faire pour éviter des codes lourds du
type :
If combo2.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo3.Value
Else
If combo3.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo2.Value
......
?

Quel code pour dire que seuls les comboboxs non vides doivent être inclus
dans la mise bout à bout ?

Merci de votre éclairage
--
Coriandre

4 réponses

Avatar
anonymousA
Bonjour,

parcourir la collection d'appartenance des comboboxes (Les comboboxes
appartiennent toujours à une collection quelconque qu'il te convient de
repérer : collection Oleobjects, shapes, controls , voire comboboxes
eux-mêmes eventuellement selon la nature des combobxes dont tu parles.
Il te faudra eventuellement selon leur collection d'appartenance les
discriminer d'autres contrôles) par un for each et tester si le combobox
est vide puis écrire au fur et à mesure une chaine de texte
chaine_de_texte=chaine_de_texte + " " + cb.value.

In fine, chaine_de_texte contiendra uniquement l'association des textes
contenus dans les comboboxes non vides.
Il faudra peut être faire un test si tu le souhaites lors de la 1ere
occurence non vide rencontrée pour eviter d'avoir un blanc au début de
l'expression finale de la chaine de texte ou simplement retenir dans
l'expression finale les n-1 caractères à droite de chaine_de_texte

A+

Rebonjour,

Soit le résultat en D10 de la mise bout à bout du texte contenu dans des
cellules (A10 à C10), comme ci dessous :
=CONCATENER(A10;" " ;"puis; " ";B10;" ";"puis";" ";C10)
Comment faire pour éviter la multiplication des conditions selon que B
ou C ou B et C sont vides, pour éviter les espaces et les "puis" inutiles ?
Ex , si B10 est vide :
=Si(B10="";CONCATENER(A10;" " ;"puis; " ";C10), etc.

Quelle formule pour dire que la concaténation ne doit se faire qu'en
prenant les cellules non vides ?

D'autre part, en VBA itou : si ce sont des comboboxs qui contiennent les
textes à mettre bout à bout, comment faire pour éviter des codes lourds
du type :
If combo2.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo3.Value
Else
If combo3.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo2.Value
......
?

Quel code pour dire que seuls les comboboxs non vides doivent être
inclus dans la mise bout à bout ?

Merci de votre éclairage
--
Coriandre


Avatar
LSteph
Bonjour Coriandre,

Supprimer les puis
..et puis, ... ;-)
ne pas utiliser concatener mais l'esperluette "&" soit la touche 1 de la
partie dactylographique du clavier.

=si(a10="";"";a10&";")&si(b10="";"";b10&";")&si(c10="";"";c10)

ce principe doit pouvoir être adapté idem en vba

@+

lSteph

Rebonjour,

Soit le résultat en D10 de la mise bout à bout du texte contenu dans des
cellules (A10 à C10), comme ci dessous :
=CONCATENER(A10;" " ;"puis; " ";B10;" ";"puis";" ";C10)
Comment faire pour éviter la multiplication des conditions selon que B
ou C ou B et C sont vides, pour éviter les espaces et les "puis" inutiles ?
Ex , si B10 est vide :
=Si(B10="";CONCATENER(A10;" " ;"puis; " ";C10), etc.

Quelle formule pour dire que la concaténation ne doit se faire qu'en
prenant les cellules non vides ?

D'autre part, en VBA itou : si ce sont des comboboxs qui contiennent les
textes à mettre bout à bout, comment faire pour éviter des codes lourds
du type :
If combo2.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo3.Value
Else
If combo3.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo2.Value
......
?

Quel code pour dire que seuls les comboboxs non vides doivent être
inclus dans la mise bout à bout ?

Merci de votre éclairage
--
Coriandre


Avatar
Coriandre
Tester si le combobox est vide, c'est une bonne idée, mais hélas je ne suis
pas d'un niveau suffisant en VBA pour élaborer cela.

Les comboboxs (combo1, combo2, combo3, combo4) en question sont en fait des
zones de listes modifiables dans un Userform.

Selon la manière dont l'utilisateur choisit de sélectionner ou non des
termes dans ces listes (valeur vide ou pleine), le résultat du texte (qui
est la mise bout à bout des termes des listes avec espaces et texte fixe
entre ces termes), ce résultat en cellule A1 de Excel, donc, est différent.

Comment procéder ?

--
Coriandre

"anonymousA" a écrit dans le message de
news:46e27eb3$0$5065$
Bonjour,

parcourir la collection d'appartenance des comboboxes (Les comboboxes
appartiennent toujours à une collection quelconque qu'il te convient de
repérer : collection Oleobjects, shapes, controls , voire comboboxes
eux-mêmes eventuellement selon la nature des combobxes dont tu parles. Il
te faudra eventuellement selon leur collection d'appartenance les
discriminer d'autres contrôles) par un for each et tester si le combobox
est vide puis écrire au fur et à mesure une chaine de texte
chaine_de_texte=chaine_de_texte + " " + cb.value.

In fine, chaine_de_texte contiendra uniquement l'association des textes
contenus dans les comboboxes non vides.
Il faudra peut être faire un test si tu le souhaites lors de la 1ere
occurence non vide rencontrée pour eviter d'avoir un blanc au début de
l'expression finale de la chaine de texte ou simplement retenir dans
l'expression finale les n-1 caractères à droite de chaine_de_texte

A+

Rebonjour,

Soit le résultat en D10 de la mise bout à bout du texte contenu dans des
cellules (A10 à C10), comme ci dessous :
=CONCATENER(A10;" " ;"puis; " ";B10;" ";"puis";" ";C10)
Comment faire pour éviter la multiplication des conditions selon que B ou
C ou B et C sont vides, pour éviter les espaces et les "puis" inutiles ?
Ex , si B10 est vide :
=Si(B10="";CONCATENER(A10;" " ;"puis; " ";C10), etc.

Quelle formule pour dire que la concaténation ne doit se faire qu'en
prenant les cellules non vides ?

D'autre part, en VBA itou : si ce sont des comboboxs qui contiennent les
textes à mettre bout à bout, comment faire pour éviter des codes lourds
du type :
If combo2.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo3.Value
Else
If combo3.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo2.Value
......
?

Quel code pour dire que seuls les comboboxs non vides doivent être inclus
dans la mise bout à bout ?

Merci de votre éclairage
--
Coriandre




Avatar
Coriandre
Merci LSteph de cette formule qui va bien.

Les "et puis" étaient donnés en guise d'exemple, car il me faut garder du
texte fixe entre les termes des cellules à concatener.

Et cela fonctionne très bien avec le texte à la place de tes";".

Cependant, cette formule me semble comporter l'inconvénient de multiplier
les "SI", ce qui limite le nombre de cellules à concatener.

Si on a par exemple 10 cellules à concatener ainsi, comment faire sans
passer par des cellules cachées de sous-concaténation ?

--
Coriandre

"LSteph" a écrit dans le message de
news:%
Bonjour Coriandre,

Supprimer les puis
..et puis, ... ;-)
ne pas utiliser concatener mais l'esperluette "&" soit la touche 1 de la
partie dactylographique du clavier.

=si(a10="";"";a10&";")&si(b10="";"";b10&";")&si(c10="";"";c10)

ce principe doit pouvoir être adapté idem en vba

@+

lSteph

Rebonjour,

Soit le résultat en D10 de la mise bout à bout du texte contenu dans des
cellules (A10 à C10), comme ci dessous :
=CONCATENER(A10;" " ;"puis; " ";B10;" ";"puis";" ";C10)
Comment faire pour éviter la multiplication des conditions selon que B ou
C ou B et C sont vides, pour éviter les espaces et les "puis" inutiles ?
Ex , si B10 est vide :
=Si(B10="";CONCATENER(A10;" " ;"puis; " ";C10), etc.

Quelle formule pour dire que la concaténation ne doit se faire qu'en
prenant les cellules non vides ?

D'autre part, en VBA itou : si ce sont des comboboxs qui contiennent les
textes à mettre bout à bout, comment faire pour éviter des codes lourds
du type :
If combo2.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo3.Value
Else
If combo3.Value = empty then
ActiveCell.Value = combo1.Value + " " + combo2.Value
......
?

Quel code pour dire que seuls les comboboxs non vides doivent être inclus
dans la mise bout à bout ?

Merci de votre éclairage
--
Coriandre