Problème pour récupérer une variable "Public" dans une macro paramétrable

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'ai la macro suivante :

'job75
compt1 = IIf(IsNumeric(Evaluate("Compteur1")), Evaluate("Compteur1"), 0)
compt1 = IIf(compt1 < 2, compt1 + 1, 1)
ActiveWorkbook.Names.Add Name:="Compteur1", RefersTo:=compt1, Visible:=False

Cette macro marche parfaitement.
compt1 est une variable "Public"
Cette macro est déclenchée au moyen d'un bouton. Quand on clique sur le bouton : compt1 = 1, quand on reclique : compt 1 =2. compt1 ne peut prendre que ces 2 valeurs (1 ou 2).
La valeur de compt1 est conservée, disons, virtuellement, ce qui évite de la mettre dans une cellule.

Cette routine est utilisée souvent avec différents boutons.
Plutôt que d'écrire à chaque fois la même routine (avec le compt correspondant), dans un esprit synthétique, j'ai voulu rédiger une macro paramétrable que j'ai nommée "Compteurs(x)" :

Sub Compteurs(x As Byte)

Dim compt As Byte

compt = compt & x

compt = IIf(IsNumeric(Evaluate("Compteur" & x)), Evaluate("Compteur" & x), 0)
compt = IIf(compt < 2, compt + 1, 1)
ActiveWorkbook.Names.Add Name:="Compteur" & x, RefersTo:=compt & x, Visible:=False

End Sub

Évidemment, ça ne marche pas du tout.

Il y aurait-il un moyen pour y pallier ?

Merci d'avance pour toute aide.
 

job75

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Bonjour Magic_Doctor,

Le code que tu indiques je l'ai en effet créé pour ce fil :

https://www.excel-downloads.com/threads/creer-un-compteur.122592/

La variable compt n'est pas du tout Public.

Par contre sa valeur, une fois calculée, est stokée dans un nom défini.

Avec ta macro paramétrée tu peux créer autant de noms définis que tu veux.

A condition de l'écrire tout bêtement :

Code:
Sub Compteurs(x As Byte)
Dim compt As Byte
compt = IIf(IsNumeric(Evaluate("Compteur" & x)), Evaluate("Compteur" & x), 0)
compt = IIf(compt < 2, compt + 1, 1)
ActiveWorkbook.Names.Add Name:="Compteur" & x, RefersTo:=compt, Visible:=False
End Sub
Une seule variable compt suffit, quel que soit le paramètre x.

A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Bonsoir job,

J'ai recherché le fil d'origine, mais ne l'ai pas trouvé ; aussi ai-je ouvert un autre fil (doublon !).

Je pensais que les différentes variables compt (1, 2, 3...) étaient "Public", aussi les avais-je déclarées ainsi et, ma foi, ça marchait...

J'ai essayé ta routine et je ne sais pas où je me suis planté.

Je joins un classeur avec 2 feuilles.
Sur la 1ère feuille l'ancienne méthode qui marche.
Sur la 2ème feuille la nouvelle méthode avec la macro paramétrable qui ne marche pas encore.
 

Pièces jointes

  • Essai Compteur.xlsm
    37.1 KB · Affichages: 37

Magic_Doctor

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Maintenant je me souviens pourquoi j'avais déclaré la variable "compt1" en "Public".
"compt1" est par la suite repris par une macro : si compt1 = 1 --> tel événement
 

job75

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Re,

Par exemple remplace ta 2ème macro :

Code:
Sub ActionBouton2_Essai2()

Call Compteur(2)

With Worksheets("Essai1").Bouton1_Essai1
    .Caption = IIf(compt1 = 1, "Modifier Liste 1", "OK !")
    .ForeColor = IIf(compt1 = 1, &H95FC7, &H3C9275)
    .BackColor = IIf(compt1 = 1, &HEFEBFF, &HE5F7D5)
End With

[B10] = compt2

End Sub
par celle-ci :

Code:
Sub ActionBouton2_Essai2()

Call Compteur(2)

With Worksheets("Essai1").Bouton1_Essai1
    .Caption = IIf([Compteur2] = 1, "Modifier Liste 1", "OK !")
    .ForeColor = IIf([Compteur2] = 1, &H95FC7, &H3C9275)
    .BackColor = IIf([Compteur2] = 1, &HEFEBFF, &HE5F7D5)
End With

[B10] =[Compteur2]

End Sub
Même principe pour la 1ère et la 3ème macro...

Edit : c'est simple, à chaque fois tu évalues les noms qui ont été définis.

Les crochets [xxx] c'est la même chose que Evaluate(xxx).

A+
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Bonsoir job,

J'ai réalisé les modifications que tu m'as précisées. C'est curieux, ça plante ; apparaît un terrible message m'informant que "les types ne coïncident pas" (traduction).

Caramba, que faire ?
 

Pièces jointes

  • Essai Compteur2.xlsm
    38.4 KB · Affichages: 36

job75

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Bonjour Magic_Doctor,

J'ai réalisé les modifications que tu m'as précisées. C'est curieux, ça plante

Dis donc, tu es surmené ou tu es têtu ???

Au post #5 j'utilise le nom [Compteur2] qui a bien été défini.

Toi tu utilises [compt2], c'est un nom qui n'existe pas.

Maintenant une autre remarque.

Tes compteurs ne prennent que 2 valeurs, 1 ou 2.

Il serait nettement plus indiqué d'utiliser des ToggleButtons à la place des CommandButtons.

Un ToggleButton a une propriété Value qui ne peut prendre que 2 valeurs : True ou False.

Il suffira de tester avec des codes comme :

Code:
 If ToggleButton1 Then
Plus besoin de créer des noms définis.

A+
 

job75

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Re,

Voici ton dernier fichier corrigé (2ème feuille) et complété (3ème feuille).

Tu avais aussi mis des noms de boutons erronés dans les macros relatives à la 2ème feuille.

Dans la 3ème feuille il y a des ToggleButtons avec une macro paramétrée :

Code:
Sub Macro(BoutonBascule As Object, cel As Range)
With BoutonBascule
  .Caption = IIf(.Value, "Modifier Liste 3", "OK !")
  .ForeColor = IIf(.Value, &H95FC7, &H3C9275)
  .BackColor = IIf(.Value, &HEFEBFF, &HE5F7D5)
  cel = .Value
End With
End Sub
A+
 

Pièces jointes

  • Essai Compteur2(1).xlsm
    53.5 KB · Affichages: 48

Magic_Doctor

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Bonjour job,

Ni surmené, ni têtu, tout simplement une grosse erreur d'inattention. Mais il est vrai qu'en ce moment, ici, il fait particulièrement chaud !

Ça marche maintenant très bien !
J'ai fait une petite rectification afin que sur chaque bouton apparaisse le Nº de liste qui lui correspond.

Enfin, plutôt que de renvoyer une valeur booléenne ("VRAI", "FAUX" ... chez toi...), peut-on récupérer une valeur numérique (1, 2) ?

Mais encore merci pour ton aide incontournable.
 

Pièces jointes

  • Essai Compteur3.xlsm
    48.9 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : Problème pour récupérer une variable "Public" dans une macro paramétrable

Enfin, plutôt que de renvoyer une valeur booléenne ("VRAI", "FAUX" ... chez toi...), peut-on récupérer une valeur numérique (1, 2) ?

Dans la macro du post #8 il te suffit d'écrire :

Code:
cel = IIf(.Value, 1, 2)
ou plus simplement :

Code:
cel = 2 + .Value
car on sait qu'en VBA True = -1

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 839
Messages
2 092 682
Membres
105 509
dernier inscrit
hamidvba