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

3 réponses

1 2
Avatar
isabelle
bonjour Gloops,

il faut aussi vérifier le Style.Name
Selection.Style.Name

soit il est normal, currency ou percent et j'en passe surement

--
isabelle



Le 2012-05-18 09:35, Gloops a écrit :
Bonjour,

J'attrape la discussion au vol, j'ai vu qu'à un moment il était question 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 ...


Avatar
Gloops
isabelle a écrit, le 18/05/2012 17:37 :
bonjour Gloops,

il faut aussi vérifier le Style.Name
Selection.Style.Name

soit il est normal, currency ou percent et j'en passe surement




Bonjour Isabelle,

Dans l'exemple, le style est Normal.

Le classeur comporte 47 styles, dont celui-là.
Et ActiveWorkbook.Styles("Normal").NumberFormat vaut General.

Ah, là je sèche : je suppose qu'il faut chercher dans les options Exc el
la valeur du format de nombre General ?

Pour parler franchement, j'ai appris la notion de style sous Word. Là,
j'ai appris qu'une mise en forme locale l'emporte sur les attributs des
styles appliqués. J'imagine qu'il en va de même sous Excel ?
Avatar
Serge Nazarian
Serge Nazarian a écrit le 16/05/2012 :

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



Je pense avoir réussi ... partiellement.
http://cjoint.com/?BECp0rJ1mDM

Le seul problème restant (mais je peux me trompter sur l'adjectif seul
) est que si une cellulle contient un format conditionnel qui utilise
comme condition "La formule est" et que ladite formule utilise des
référence relatives, par exemple L(-3)C(2) (ou l'équivalent référence
A1), la concaténation a toutes les chances de ne pas fonctionner
correctement.

Merci à tous ceux qui m'ont aidé pour réaliser cette procédure, dont
l'utilité n'est pas prouvée, loin de là !

Cordialement,

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