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

Concaténer les valeurs des cellules selon leur contenu

13 réponses
Avatar
Bastien Ragni
Bonjour à tous,

Voilà mon problème.
J'ai 8 cellules contenant une chaine de caractères (initiales de noms).
Chaque cellule peut, tour à tour, être vide: une au moins contient une
chaine de caractère, plusieurs cellules peuvent contenir une chaine de
caractère mais leur nombre (sur 8 cellules) est variable.
Je souhaite concaténer leurs valeurs avant impression (A1&" "&A2&"
"&...etc...jusqu'à A8).
Mais cette solution fournit des blancs inutiles et inesthétiques (par
exemple si A1=XX et A8=YY).
Avez-vous une solution pour ne concaténer QUE les cellules contenant les
chaines de caractères?
Merci d'avance aux experts!
(PS: c'est toujours un réel plaisir pour moi que d'écrire sur ce forum. Mon
classeur a beaucoup progressé depuis que j'ai découvert le forum)

10 réponses

1 2
Avatar
Pita
Bonjour,
il vous suffit d'utiliser la fonction SUPPRESPACE() qui va éliminer tout les
blancs multiples conssécutifs ainsi que les blancs de début ou de fin:
=SUPPRESPACE(A1 & " " & A2& " " &...A8) (en Anglais =TRIM())
Bonne chance,
JPP

"Bastien Ragni" wrote:

Bonjour à tous,

Voilà mon problème.
J'ai 8 cellules contenant une chaine de caractères (initiales de noms).
Chaque cellule peut, tour à tour, être vide: une au moins contient une
chaine de caractère, plusieurs cellules peuvent contenir une chaine de
caractère mais leur nombre (sur 8 cellules) est variable.
Je souhaite concaténer leurs valeurs avant impression (A1&" "&A2&"
"&...etc...jusqu'à A8).
Mais cette solution fournit des blancs inutiles et inesthétiques (par
exemple si A1=XX et A8=YY).
Avez-vous une solution pour ne concaténer QUE les cellules contenant les
chaines de caractères?
Merci d'avance aux experts!
(PS: c'est toujours un réel plaisir pour moi que d'écrire sur ce forum. Mon
classeur a beaucoup progressé depuis que j'ai découvert le forum)





Avatar
Starwing
Bonjour,
Essaie ceci:

Function CONCAT(plage As Range)
Application.Volatile
For Each c In plage
x = x & " " & c.Value
Next
CONCAT = Right(x, Len(x) - 1)
End Function

D'après une idée originale de AV

Starwing
Avatar
Jacky
Bonsoir Bastien

Ou encore, plus basic

=SI(A1<>"";A1&" ";"")&SI(B1<>"";B1& " ";"")&SI(C1<>"";C1&"
";"")&SI(D1<>"";D1&" ";"")&SI(E1<>"";E1&" ";"")&SI(F1<>"";F1&"
";"")&SI(G1<>"";G1&" ";"")&SI(H1<>"";H1;"")

Salutations
JJ

"Bastien Ragni" a écrit dans le message de
news:
Bonjour à tous,

Voilà mon problème.
J'ai 8 cellules contenant une chaine de caractères (initiales de noms).
Chaque cellule peut, tour à tour, être vide: une au moins contient une
chaine de caractère, plusieurs cellules peuvent contenir une chaine de
caractère mais leur nombre (sur 8 cellules) est variable.
Je souhaite concaténer leurs valeurs avant impression (A1&" "&A2&"
"&...etc...jusqu'à A8).
Mais cette solution fournit des blancs inutiles et inesthétiques (par
exemple si A1=XX et A8=YY).
Avez-vous une solution pour ne concaténer QUE les cellules contenant les
chaines de caractères?
Merci d'avance aux experts!
(PS: c'est toujours un réel plaisir pour moi que d'écrire sur ce forum.
Mon

classeur a beaucoup progressé depuis que j'ai découvert le forum)




Avatar
Starwing
Bonjour,

Encore une chance que ça n'allait pas jusqu'à la colonne IU...

;-))

Starwing
"Jacky" a écrit dans le message
de news:
Bonsoir Bastien

Ou encore, plus basic

=SI(A1<>"";A1&" ";"")&SI(B1<>"";B1& " ";"")&SI(C1<>"";C1&"
";"")&SI(D1<>"";D1&" ";"")&SI(E1<>"";E1&" ";"")&SI(F1<>"";F1&"
";"")&SI(G1<>"";G1&" ";"")&SI(H1<>"";H1;"")

Salutations
JJ

"Bastien Ragni" a écrit dans le message
de

news:
Bonjour à tous,

Voilà mon problème.
J'ai 8 cellules contenant une chaine de caractères (initiales de noms).
Chaque cellule peut, tour à tour, être vide: une au moins contient une
chaine de caractère, plusieurs cellules peuvent contenir une chaine de
caractère mais leur nombre (sur 8 cellules) est variable.
Je souhaite concaténer leurs valeurs avant impression (A1&" "&A2&"
"&...etc...jusqu'à A8).
Mais cette solution fournit des blancs inutiles et inesthétiques (par
exemple si A1=XX et A8=YY).
Avez-vous une solution pour ne concaténer QUE les cellules contenant les
chaines de caractères?
Merci d'avance aux experts!
(PS: c'est toujours un réel plaisir pour moi que d'écrire sur ce forum.
Mon

classeur a beaucoup progressé depuis que j'ai découvert le forum)








Avatar
Bastien Ragni
Merci Pita,
J'ai essayé mais cette solution supprime aussi les " " que j'introduit pour
séparer visuellement les chaines de caractères.
J'obtiens XXYY.
XX YY serait plus clair.
"Pita" a écrit dans le message de news:

Bonjour,
il vous suffit d'utiliser la fonction SUPPRESPACE() qui va éliminer tout
les
blancs multiples conssécutifs ainsi que les blancs de début ou de fin:
=SUPPRESPACE(A1 & " " & A2& " " &...A8) (en Anglais =TRIM())
Bonne chance,
JPP

"Bastien Ragni" wrote:

Bonjour à tous,

Voilà mon problème.
J'ai 8 cellules contenant une chaine de caractères (initiales de noms).
Chaque cellule peut, tour à tour, être vide: une au moins contient une
chaine de caractère, plusieurs cellules peuvent contenir une chaine de
caractère mais leur nombre (sur 8 cellules) est variable.
Je souhaite concaténer leurs valeurs avant impression (A1&" "&A2&"
"&...etc...jusqu'à A8).
Mais cette solution fournit des blancs inutiles et inesthétiques (par
exemple si A1=XX et A8=YY).
Avez-vous une solution pour ne concaténer QUE les cellules contenant les
chaines de caractères?
Merci d'avance aux experts!
(PS: c'est toujours un réel plaisir pour moi que d'écrire sur ce forum.
Mon
classeur a beaucoup progressé depuis que j'ai découvert le forum)







Avatar
Bastien Ragni
Merci Starwing,
mais je ne comprends pas tout (je ne suis pas bon en VB).
Avant tes lignes, si j'écris:
Range("A1:A8").Select
auquel cas "il" me réclame un End Sub sur cette ligne!!
Si j'écris CONCAT("A1:A8" As Range) je commets une erreur de syntaxe.
Comment dois-je indiquer la plage de cellules?
Merci pour tes précisions.
"Starwing" a écrit dans le message de news:

Bonjour,
Essaie ceci:

Function CONCAT(plage As Range)
Application.Volatile
For Each c In plage
x = x & " " & c.Value
Next
CONCAT = Right(x, Len(x) - 1)
End Function

D'après une idée originale de AV

Starwing




Avatar
Jacky
Encore une chance que ça n'allait pas jusqu'à la colonne IU...


Alors comme cela
=SI(A1<>"";A1&" ";"")&SI(B1<>"";B1& " ";"")&SI(C1<>"";C1&"
";"")&SI(D1<>"";D1&" ";"")&SI(E1<>"";E1&" ";"")&SI(F1<>"";F1&"
";"")&SI(G1<>"";G1&" ";"")&SI(H1<>"";H1;"") etc...etc...jusqu'à IU

;o))
JJ (pas fainéant)

"Starwing" a écrit dans le message de
news:u3bR%
Bonjour,

Encore une chance que ça n'allait pas jusqu'à la colonne IU...

;-))

Starwing
"Jacky" a écrit dans le message
de news:
Bonsoir Bastien

Ou encore, plus basic

=SI(A1<>"";A1&" ";"")&SI(B1<>"";B1& " ";"")&SI(C1<>"";C1&"
";"")&SI(D1<>"";D1&" ";"")&SI(E1<>"";E1&" ";"")&SI(F1<>"";F1&"
";"")&SI(G1<>"";G1&" ";"")&SI(H1<>"";H1;"")

Salutations
JJ

"Bastien Ragni" a écrit dans le
message


de
news:
Bonjour à tous,

Voilà mon problème.
J'ai 8 cellules contenant une chaine de caractères (initiales de
noms).



Chaque cellule peut, tour à tour, être vide: une au moins contient une
chaine de caractère, plusieurs cellules peuvent contenir une chaine de
caractère mais leur nombre (sur 8 cellules) est variable.
Je souhaite concaténer leurs valeurs avant impression (A1&" "&A2&"
"&...etc...jusqu'à A8).
Mais cette solution fournit des blancs inutiles et inesthétiques (par
exemple si A1=XX et A8=YY).
Avez-vous une solution pour ne concaténer QUE les cellules contenant
les



chaines de caractères?
Merci d'avance aux experts!
(PS: c'est toujours un réel plaisir pour moi que d'écrire sur ce
forum.



Mon
classeur a beaucoup progressé depuis que j'ai découvert le forum)












Avatar
Starwing
Bonjour,

Ceci est une Fonction VBA, Une formule que l'on invente parce qu'elle
n'existe pas dans Excel.

Pour l'utilisation, il faut le mettre dans un module standard.
Suivre les instructions suivantes:
ALT+F11
Insertion- Module
Dans le module, copiez le code suivant:

Function CONCAT(plage As Range)
Application.Volatile
For Each c In plage
x = x & " " & c.Value
Next
CONCAT = Right(x, Len(x) - 1)
End Function

Sortir en cliquant sur le X en haut à droite

Revenir sur ta feuille Excel.
Dans une cellule que tu auras choisi, tu écris =CONCAT(A1:A8)

Starwing
Avatar
Pita
Bonjour,
Relisez ce que je vous suggère... (=SUPPRESPACE(A1 & " " & A2& " "
&...A8))... la fonction "SUPPRESPACE" doit s'appliquer à l'ensemble de votre
concaténation incluant vos espaces de séparation et non à chaque fragment que
vous voulez concaténer...
sans rancune,
JPP

"Bastien Ragni" wrote:

Merci Pita,
J'ai essayé mais cette solution supprime aussi les " " que j'introduit pour
séparer visuellement les chaines de caractères.
J'obtiens XXYY.
XX YY serait plus clair.
"Pita" a écrit dans le message de news:

Bonjour,
il vous suffit d'utiliser la fonction SUPPRESPACE() qui va éliminer tout
les
blancs multiples conssécutifs ainsi que les blancs de début ou de fin:
=SUPPRESPACE(A1 & " " & A2& " " &...A8) (en Anglais =TRIM())
Bonne chance,
JPP

"Bastien Ragni" wrote:

Bonjour à tous,

Voilà mon problème.
J'ai 8 cellules contenant une chaine de caractères (initiales de noms).
Chaque cellule peut, tour à tour, être vide: une au moins contient une
chaine de caractère, plusieurs cellules peuvent contenir une chaine de
caractère mais leur nombre (sur 8 cellules) est variable.
Je souhaite concaténer leurs valeurs avant impression (A1&" "&A2&"
"&...etc...jusqu'à A8).
Mais cette solution fournit des blancs inutiles et inesthétiques (par
exemple si A1=XX et A8=YY).
Avez-vous une solution pour ne concaténer QUE les cellules contenant les
chaines de caractères?
Merci d'avance aux experts!
(PS: c'est toujours un réel plaisir pour moi que d'écrire sur ce forum.
Mon
classeur a beaucoup progressé depuis que j'ai découvert le forum)












Avatar
Bastien Ragni
Ouaaaah, c'est class!
ça m'ouvre des possibilités!
Merci beaucoup Starwing!
"Starwing" a écrit dans le message de news:

Bonjour,

Ceci est une Fonction VBA, Une formule que l'on invente parce qu'elle
n'existe pas dans Excel.

Pour l'utilisation, il faut le mettre dans un module standard.
Suivre les instructions suivantes:
ALT+F11
Insertion- Module
Dans le module, copiez le code suivant:

Function CONCAT(plage As Range)
Application.Volatile
For Each c In plage
x = x & " " & c.Value
Next
CONCAT = Right(x, Len(x) - 1)
End Function

Sortir en cliquant sur le X en haut à droite

Revenir sur ta feuille Excel.
Dans une cellule que tu auras choisi, tu écris =CONCAT(A1:A8)

Starwing




1 2