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

concaténer avec attributs

13 réponses
Avatar
Serge Nazarian
Bonjour,

Je cherche à concaténer des cellules en conservant leur attibuts.

J'ai partiellement réussi à faire ce que je voulais (voir ci dessous ou
fichier http://cjoint.com/?BEqjDYxAzIO), mais il reste encore des
problèmes...

1) Je souhaite créer une fonction, c'est à dire pouvoir écrire dans une
cellule =CCAA(plage) où plage peut-être, si l'on veut sélectionnée avec
la souris, et que le résultat soit inscrit dans la cellule où se trouve
la formule CCAA(plage) (sans pour autant, si c'est possible, effacer
ladite formule !)

2) Si une des cellule de plage n'est pas une chaîne, utiliser le
contenu affiché à l'écran.

3) Dans un même ordre d'idée : dans mon exemple une cellule contient
0.07 mais le formatage la fait afficher 7%. Je souhaiterais que ce soit
7% qui apparaisse et non pas 0.07 dans le résultat final.

J'ouvre un autre sujet de discussion, car le sujet actuel n'a plus de
rapport avec le titre initial ! Veuillez répondre dans le nouveau
sujet.

Merci pour toute aide.
Cordialement,

***********************
Function CCAA(plage As Range)
'ConcaténerChaîneAvecAttribut
'concaténer les cellules d'une plage ne contenant que des chaînes en
conservant l'attribut de chaque cellule

numéro_ligne = ActiveCell.Row
numéro_colonne = ActiveCell.Column
'MsgBox "ligne " & numéro_ligne & " colonne " & numéro_colonne

chaine = ""
For Each cell In plage
chaine = chaine & cell
Next
'MsgBox chaine
'Cells(numéro_ligne + 1, numéro_colonne).Value = chaine
Cells(7, 1).Value = chaine

index_début = 1

For Each cell In plage
'valeur = cell.Value
longueur = Len(cell.Value)
With cell.Characters.Font
gras = .Bold
italique = .Italic
taille = .Size
barré = .Strikethrough
couleur = .Color
souligné = .Underline
police = .Name
stylef = .FontStyle
exposant = .Superscript
indice = .Subscript
ombré = .Shadow
outline_font = .OutlineFont
End With

'MsgBox _
"valeur = " & valeur & vbCrLf & _
"longueur = " & longueur & vbCrLf & _
"gras = " & gras & vbCrLf & _
"italique = " & italique & vbCrLf & _
"taille = " & taille & vbCrLf & _
"barré = " & barré & vbCrLf & _
"couleur =" & couleur & vbCrLf & _
"souligné = " & souligné & vbCrLf & _
"police = " & police & vbCrLf & _
"style = " & stylef & vbCrLf & _
"exposant = " & exposant & vbCrLf & _
"indice = " & indice & vbCrLf & _
"ombré = " & ombré & vbCrLf & _
"outline_font = " & outline_font



With Cells(7, 1).Characters(Start:=index_début, Length:=longueur).Font
.Bold = gras
.Italic = italique
.Size = taille
.Strikethrough = barré
.Color = couleur
.Underline = souligné
.Name = police
.FontStyle = stylef
.Superscript = exposant
.Subscript = indice
.Shadow = ombré
.OutlineFont = outline_font
End With

index_début = index_début + longueur
Next


CCAAA = "fin"
End Function
Sub test()
CCAA Selection
End Sub

--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu

10 réponses

1 2
Avatar
Serge Nazarian
Pour faire avancer le schliblick...
Si j'inverse le commentaire entre les lignes

Cells(n_l_s, numéro_colonne).Value = chaine

et

'Cells(7, 1).Value = chaine

ça marche.
La question est :
Pourquoi la ligne

Cells(n_l_s, numéro_colonne).Value = chaine

renvoie-t-elle une erreur, alors que numéro_ligne, numéro_colonne et
n-l_s sont corrects compte tenu des MsgBox ?
************************
Function CCAA(plage As Range)

numéro_ligne = Range(Application.Caller.Address).Row
numéro_colonne = Range(Application.Caller.Address).Column
n_l_s = numéro_ligne + 1
MsgBox "ligne " & numéro_ligne & " colonne " & numéro_colonne & " ligne
suivante : " & n_l_s

chaine = ""
For Each cell In plage
chaine = chaine & cell
Next
MsgBox chaine

Cells(n_l_s, numéro_colonne).Value = chaine
'Cells(7, 1).Value = chaine

End Function

--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Avatar
Serge Nazarian
Serge Nazarian a écrit le 16/05/2012 :
Pour faire avancer le schliblick...
Si j'inverse le commentaire entre les lignes

Cells(n_l_s, numéro_colonne).Value = chaine

et

'Cells(7, 1).Value = chaine

ça marche.
La question est :
Pourquoi la ligne

Cells(n_l_s, numéro_colonne).Value = chaine

renvoie-t-elle une erreur, alors que numéro_ligne, numéro_colonne et n-l_s
sont corrects compte tenu des MsgBox ?
************************
Function CCAA(plage As Range)

numéro_ligne = Range(Application.Caller.Address).Row
numéro_colonne = Range(Application.Caller.Address).Column
n_l_s = numéro_ligne + 1
MsgBox "ligne " & numéro_ligne & " colonne " & numéro_colonne & " ligne
suivante : " & n_l_s

chaine = ""
For Each cell In plage
chaine = chaine & cell
Next
MsgBox chaine

Cells(n_l_s, numéro_colonne).Value = chaine
'Cells(7, 1).Value = chaine

End Function



Désolé, j'ai tapé trop vite, aucune des solutions ne marche.

--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Avatar
pom...pom...pom..
Bonsour®

"Serge Nazarian" a écrit
Je cherche à concaténer des cellules en conservant leur attibuts.

J'ai partiellement réussi à faire ce que je voulais (voir ci dessous ou
fichier http://cjoint.com/?BEqjDYxAzIO), mais il reste encore des problèmes...

Dans un même ordre d'idée : dans mon exemple une cellule contient 0.07 mais le
formatage la fait afficher 7%. Je souhaiterais que ce soit 7% qui apparaisse
et non pas 0.07 dans le résultat final.




chaine = ""
For Each cell In plage
chaine = chaine & cell.text
Next
Avatar
Jacquouille
Salut Beethoven V° -))



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"pom...pom...pom.." a écrit dans le message de groupe de discussion :
jp0a41$hdo$

Bonsour®

"Serge Nazarian" a écrit
Je cherche à concaténer des cellules en conservant leur attibuts.

J'ai partiellement réussi à faire ce que je voulais (voir ci dessous ou
fichier http://cjoint.com/?BEqjDYxAzIO), mais il reste encore des
problèmes...

Dans un même ordre d'idée : dans mon exemple une cellule contient 0.07
mais le formatage la fait afficher 7%. Je souhaiterais que ce soit 7% qui
apparaisse et non pas 0.07 dans le résultat final.




chaine = ""
For Each cell In plage
chaine = chaine & cell.text
Next
Avatar
Serge Nazarian
pom...pom...pom.. a écrit le 16/05/2012 :
Bonsour®

"Serge Nazarian" a écrit
Je cherche à concaténer des cellules en conservant leur attibuts.

J'ai partiellement réussi à faire ce que je voulais (voir ci dessous ou
fichier http://cjoint.com/?BEqjDYxAzIO), mais il reste encore des
problèmes...



Dans un même ordre d'idée : dans mon exemple une cellule contient 0.07 mais
le formatage la fait afficher 7%. Je souhaiterais que ce soit 7% qui
apparaisse et non pas 0.07 dans le résultat final.




chaine = ""
For Each cell In plage
chaine = chaine & cell.text
Next



Ceci pose un nouveau problème, dû à la longueur différente de
cell.Value et cell.Text.

Comment écrire en vba :

if (cellule est une chaine de caractères) then
chaine = chaine & cell
longueur = Len(cell)
else
chaine = chaine & cell.Text
longueur = Len(cell.Text)
End If


--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Avatar
Serge Nazarian
Serge Nazarian a écrit le 16/05/2012 :
pom...pom...pom.. a écrit le 16/05/2012 :
Bonsour®

"Serge Nazarian" a écrit
Je cherche à concaténer des cellules en conservant leur attibuts.

J'ai partiellement réussi à faire ce que je voulais (voir ci dessous ou
fichier http://cjoint.com/?BEqjDYxAzIO), mais il reste encore des
problèmes...



Dans un même ordre d'idée : dans mon exemple une cellule contient 0.07
mais le formatage la fait afficher 7%. Je souhaiterais que ce soit 7% qui
apparaisse et non pas 0.07 dans le résultat final.




chaine = ""
For Each cell In plage
chaine = chaine & cell.text
Next



Ceci pose un nouveau problème, dû à la longueur différente de cell.Value et
cell.Text.

Comment écrire en vba :

if (cellule est une chaine de caractères) then
chaine = chaine & cell

else
chaine = chaine & cell.Text
longueur = Len(cell.Text)
End If



Je pense avoir trouvé.

If (VarType(cell.Value) = 8 Or VarType(cell.Value) = 7) Then
chaine = chaine & cell
longueur = Len(cell)
Else
chaine = chaine & cell.Text
longueur = Len(cell.Text)
End If

--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Avatar
Serge Nazarian
Serge Nazarian a écrit le 16/05/2012 :
Bonjour,

Je cherche à concaténer des cellules en conservant leur attibuts.



Voici la version (définitive ?) de la procédure.

http://cjoint.com/?BErrdfIM34F

En fait, j'ai mis deux procédures, aucune n'étant complétement
satisfaisante, mais CCAAC a ma préférence.

Si quelqu'un veut modifier le le fichier joint pour résoudre les
problèmes mis en évidence, il est le bienvenu.

Meri à tous ceux qui m'ont aidé.

Cordialement,

--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Avatar
Serge Nazarian
Serge Nazarian a écrit le 16/05/2012 :

Bonjour,

Je cherche à concaténer des cellules en conservant leur attibuts.



Voici la version (définitive ?) de la procédure.

http://cjoint.com/?BEshRMTEbkL

Si quelqu'un veut modifier le fichier joint pour résoudre le problème
du format conditionnel, il est le bienvenu.

Meri à tous ceux qui m'ont aidé.

Cordialement,




--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Avatar
Jacquouille
Salut Beethoven (V°)



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"pom...pom...pom.." a écrit dans le message de groupe de discussion :
jp0a41$hdo$

Bonsour®

"Serge Nazarian" a écrit
Je cherche à concaténer des cellules en conservant leur attibuts.

J'ai partiellement réussi à faire ce que je voulais (voir ci dessous ou
fichier http://cjoint.com/?BEqjDYxAzIO), mais il reste encore des
problèmes...

Dans un même ordre d'idée : dans mon exemple une cellule contient 0.07
mais le formatage la fait afficher 7%. Je souhaiterais que ce soit 7% qui
apparaisse et non pas 0.07 dans le résultat final.




chaine = ""
For Each cell In plage
chaine = chaine & cell.text
Next
Avatar
Gloops
Bonjour,

J'attrape la discussion au vol, j'ai vu qu'à un moment il était quest ion
de faire apparaître chaque cellule telle qu'à l'écran, du moins en
tenant compte de son "format de nombres".

Assez classiquement on fait ça comme ça :

Format(Selection, Selection.NumberFormat)

en remplaçant Selection par la cellule à traiter.

En fait je viens de faire un essai sous Excel 2007, c'est un peu
décevant : la cellule est affichée en format monétaire, ce qui fait
qu'avec 2 comme valeur, la formule ci-dessus retourne
2,00 _¤

Or, dans la cellule on voit bien 2,00 mais le signe ¤ n'apparaît pas.

Un spécialiste d'Excel va bien savoir dire quelle mise à jour j'ai
loupée ...
1 2