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

Rechercher des sujets similaires à "formater valeurs plage variable"