Mise bout à bout de textes dans Excel et en VBA

Le
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
anonymousA
Le #4683941
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


LSteph
Le #4683791
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


Coriandre
Le #4683741
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" 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




Coriandre
Le #4683731
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" 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




Publicité
Poster une réponse
Anonyme