Excel03- format de cellule, % ou points, vba

nemzor Messages postés 14 Statut Membre -  
Raymond PENTIER Messages postés 71867 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je tente de créer une macro qui modifie automatiquement le format du chiffre exprimé : en points ou en %.
Dans mon tableau totalement automatisé, j'ai une colonne qui exprime les variations (croissance ou décroissance) de mes données, d'une année sur l'autre.
Exemple : mon chiffre d'affaires a augmenté de "x %" entre 2011 et 2012.
Il faut savoir que le critère "chiffre d'affaires" est choisi dans une liste déroulante. Jusque là, pas de problèmes puisque le critère est simple, et la variation en %.
Or, dans ce tableau, je peux choisir des critères de ma liste déroulante plus exotiques, tels que "marge divisé par chiffres d'affaires", ce qui va modifier ma colonne "variations", puisqu'ici j'aurai besoin qu'elles s'expriment en points, et non plus en %.

J'aimerais que l'on corrige ma tentative de code VBA afin que cette macro modifie le format de cellule de la colonne "variations" en fonction du critère choisi.
Voici le code, avec qques explications :

Sub FormatCross()
'
'
Actfeuille = ActiveSheet.Name

Crit = Range("critere1").Value => "critere1" est la cellule qui se modifie automatiquement en fonction du critère choisi. Ex : si on choisi le Chiffre d'affaires, "critere1" va prendre la valeur "%". Si on prend le critere "marge sur CA", "critere1" va prendre la valeur "pts" etc.

Application.GoTo Reference:="Format_CrossCAGR" nom de ma colonne "variations"

If Crit = "%Var. Value" Then
Selection.NumberFormat = "#,##0"
ElseIf Crit = "%" Then
Selection.NumberFormat = "#,##0.0%" Jusqu'ici ca fonctionne puisque toutes mes variations sont en %, même quand je modifie le format de cellule manuellement et éxectute la macro : les variations reviennent en %.
ElseIf Crit = "pts" Then
Selection.NumberFormat = "#,##0.0\ [$pts]" peut-être que l'erreur vient de là et simplement de l'intitulé du format en points...
ElseIf Crit = "ptsVar. Value" Then
Selection.NumberFormat = "#,##0.0\ [$pts]"
End If
Range("A1").Select
Sheets(Actfeuille).Activate

End Sub

Merci d'avance pour l'aide que vous pourrez m'apporter.

nemzor
A voir également:

5 réponses

Raymond PENTIER Messages postés 71867 Date d'inscription   Statut Contributeur Dernière intervention   17 397
 
Ne connaissant pas VBA, je pourrais te suggérer de prévoir plusieurs colonnes, l'une pour "Marge", l'autre pour "Variation" ...
0
nemzor Messages postés 14 Statut Membre 2
 
Oui ca serait une solution de dernier recours, mais dans un souci de simplicité une petite macro bien plaçée rendrait le tout + agréable!

Quelqu'un pour up ce fil? =)
Merci
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

Sans doute qu'un fichier exemple motivera les bonnes volontés.
cjoint.com et coller ici le lien fourni.
De plus tu signales une erreur sans plus de précision. On doit sortir la boule de cristal ?
eric
0
nemzor Messages postés 14 Statut Membre 2
 
Bonjour,

Voici un fichier exemple sur lequel vous pourrez vous appuyer afin de comprendre ce que je cherche à faire...

https://www.cjoint.com/?BHnkJwfasZA

Merci
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

Pas vu de listes déroulantes, pas d'indication des cellules concernées, pas plus d'explication sur l'erreur rencontrée.
Pas envie de tout deviner ou de commencer une suite de questions/réponses, j'abandonne et je passe la main à qui veut bien.

eric
0
nemzor Messages postés 14 Statut Membre 2
 
La liste déroulante est en haut à gauche en rouge, faut vraiment le faire exprès pour la louper.
Mon problème est expliqué dans mon premier post.
Enfin bref je ne vois pas l'utilité de me répondre "pas envie de répondre", eric.

Si quelqu'un d'autre a du temps à me consacrer je l'en remercie grandement.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
C'est sûr, c'est sans doute trop difficile de dire je met ça dans telle cellule, je veux que ça donne ça dans telle autre.
Autant laisser les bénévoles perdre du temps à essayer de deviner.
Désolé de préférer consacrer mon temps de loisir à ceux qui font l'effort d'explications complètes et précises.
Et crois moi que je ne suis pas le seul. Maintenant à toi de voir si tu désires interesser le maximum de personnes à tes questions ou non...

Pour ta nouvelle question c'est pareil...
Aucune macro dans ton fichier. On ne sait pas ce que tu as fait, il faut une boule de cristal.

eric
0
tontong Messages postés 2586 Date d'inscription   Statut Membre Dernière intervention   1 063
 
Bonjour,
Tel que le tableau est présenté à quoi sert une macro alors qu'une fonction Texte suffit.
La formule =SI($A$20=1;G7/E7*100;G7-E7) peut devenir =SI($A$20=1;TEXTE(G7/E7;"0,00%");G7-E7) pour résoudre le problème.
0
nemzor Messages postés 14 Statut Membre 2
 
Bonjour,
Le tableau sur lequel je travail possède une liste déroulante de plusieurs dizaines de critères, les "SI(" devriendraient alors trop nombreux.

Finalement je pense avoir trouvé d'où mon problème vient :

La macro de mon premier post fonctionne.
Or elle ne s'exécute qu'une seule fois (à l'ouverture du fichier).

Comment faire pour qu'elle s'exécute à chaque changement de critère dans la liste déroulante?

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Raymond PENTIER Messages postés 71867 Date d'inscription   Statut Contributeur Dernière intervention   17 397
 
Ecoute un peu, nemzor.

"une liste déroulante de plusieurs dizaines de critères" pourtant il n'y en a que deux dans le fichier exemple ...

"La liste déroulante est en haut à gauche en rouge, faut vraiment le faire exprès pour la louper" mais il faut commencer par deviner que le rouge est la couleur que tu emploies pour repérer les listes déroulantes !

"Si quelqu'un d'autre a du temps à me consacrer je l'en remercie grandement" nous sommes nombreux à prendre sur notre temps pour le consacrer à aider les autres ; mais aucun de nous n'aime perdre son temps.

C'est toi qui sollicites de l'aide ; c'est à toi de faire preuve d'humilité et de politesse, même si certaines réponses t'agacent ou t'indisposent. Il y a déjà près de deux mois que tu es inscrit comme membre, et tu n'as pas encore acquis l'esprit de la Charte de CCM ? Il faudra changer, si tu veux espérer des réponses à tes prochaines questions dans Bureautique (car le forum Programmation ne répond pas aussi volontiers, n'est-il pas vrai ?).
0