Excel03- format de cellule, % ou points, vba

Fermé
nemzor Messages postés 13 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 20 août 2012 - 9 août 2012 à 16:22
Raymond PENTIER Messages postés 58801 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 7 janvier 2025 - 13 août 2012 à 18:05
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 58801 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 7 janvier 2025 17 264
9 août 2012 à 16:26
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 13 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 20 août 2012 2
10 août 2012 à 09:40
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 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
10 août 2012 à 11:40
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 13 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 20 août 2012 2
13 août 2012 à 10:37
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 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
Modifié par eriiic le 13/08/2012 à 10:49
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 13 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 20 août 2012 2
13 août 2012 à 11:04
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 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
Modifié par eriiic le 13/08/2012 à 12:51
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 2567 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 novembre 2024 1 059
13 août 2012 à 11:38
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 13 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 20 août 2012 2
13 août 2012 à 12:17
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 58801 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 7 janvier 2025 17 264
13 août 2012 à 18:05
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