Formater des valeurs dans une plage avec une variable
Bonjour
j'ai essayé sans succès de repérer des discussions posant un problème analogue au mien, donc je lance ce sujet :
Excel 2003
- je dispose de plusieurs table de données, dont une d'indicateurs avec des valeurs de différents formats (nombre entiers, décimaux, %, ...)
- dans la table des données "indicateurs, avec la fonction =CELLULE("Format";réf), je sais calculer une donnée de format de nombre pour les valeurs de chaque ligne d'indicateur ;
Dans une feuille de "tableau de bord"
- avec le champ "page" d'un tableau croisé dynamique, j'affiche une sélection de données dont les identifiants des indicateurs,
- avec RechercheV, je rapatrie les valeurs des indicateurs identifiés mais je n'ai pas l'affichage du bon format ; je rapatrie aussi la valeur calculée avec =CELLULE("Format";réf)
- j'ai essayé d'élaborer une macro qui formate les données calculées par RechercheV avec le résultats de =CELLULE("Format";réf)
- la macro tourne mais ne formate pas les données, elle les transforme...
la Macro :
Sub format_valeurs_indic()
'
' formate les valeurs des indicateurs rapatriées dans la feuille "Indic par OO SRniv2"
' on masque l'agitation à l'écran :
Application.ScreenUpdating = False
' Définition des variables utilisées pour la macro :
' repére de la colonne sans ligne vide pour compter le nombre de ligne à formater
Dim posColindic As Integer
' repére de la première ligne de la zone à formater
Dim lign_Deb_Valeurs As Integer
' le nombre de lignes à formater
Dim Nb_lignes_valeurs As Integer
' repère la ligne courante à formater
Dim posLigne_Valeurs As Integer
' repère la première colonne de valeurs à formater
Dim colDebValeurs As Integer
' repère la dernière colonne de valeurs à formater
Dim colFinValeurs As Integer
' repère la colonne contenant la données de formatage des nombres
Dim colFormatValeurs As Integer
'Boucle dans la zone des indicateurs associés aux données sélectionnés
'Recherche Verticale du nombre de lignes à prendre en compte pour la boucle de formatage des valeurs
posColindic = Range("libel_indic_A").Column
lign_Deb_Valeurs = Range("valeurs_indic2008_A").Row + 1
Nb_lignes_valeurs = Application.WorksheetFunction.CountA(Range(Cells(lign_Deb_Valeurs, posColindic), Cells(20000, posColindic)))
'Application du format sur la rangée de cellules depuis les valeurs 2008 aux valeurs 2014
colDebValeurs = Range("valeurs_indic2008_A").Column
colFinValeurs = Range("valeurs_indic2014_A").Column
colFormatValeurs = Range("valeurs_indic_format_A").Column
For posLigne_Valeurs = lign_Deb_Valeurs To lign_Deb_Valeurs + Nb_lignes_valeurs
Range(Cells(posLigne_Valeurs, colDebValeurs), Cells(posLigne_Valeurs, colFinValeurs)).NumberFormat = Cells(posLigne_Valeurs, colFormatValeurs).Value
Next posLigne_Valeurs
End Sub
Le résultat : pour une cellule contenant la valeur 5, à formater avec la donnée "P0", la cellule affiche P5 mais toujours dans le même format...
J'en déduis que la données calculée par =CELLULE("Format";réf) n'est pas utilisable ainsi, mais je ne sais comment faire.
Bonjour
tu peux copier le format d'une cellule de référence
par exemple si A1 a le format à copier (la référence)
tu peux écrire
cells(2,1).numberformat=range("A1").numberformat
Merci de la proposition.
Le problème est le côté "dynamique" de la feuille ; je ne peux pas présupposer où est le bon format.
Néanmoins ta proposition m'a incité à regarder avec une macro comment VBA "écrit" les NumberFormat, et c'est là qu'était le problème ; j'ai donc fait une table de conversion, faute de mieux :
et la formule =CELLULE("Format";réf) est devenue =RECHERCHEV(CELLULE("Format";réf);conversionformat;2;FAUX)
Table de conversion des formats de nombre d'Excel à VBA (zone nommée "conversionformat" dans mon tableau,
%0 -> 0%
%1 -> 0.0%
%2 -> 0.00%
F0-> 0
F1-> 0.0
F2-> 0.00
F3-> 0.000
M0-> # ##0 €
M1-> # ##0.0 €
M2-> # ##0.00 €
S-> General
P0-> #,##0
P1-> #,##0.0
P2-> #,##0.00
P3-> #,##0.000