Variables "Public", avec le même préfixe, reprises dans une même macro

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai plusieurs variables déclarées "Public" et "As Byte" (ne peuvent prendre que la valeur 1 ou 2) : compt1, compt2..., comptn
Toutes ce variables sont gérées par strictement le même type de procédure, par exemple :
Code:
Sub Zaza()
	compt1 = compt1 * 2
	...
End Sub
Code:
Sub Lolo()
	compt5 = compt5 * 2
	...
End Sub
Plutôt que de chaque fois réécrire :
Code:
Sub Xxx()
	comptn = comptn * 2
	...
End Sub
j'ai essayé ceci :
Code:
Sub Compteurs(compt As String)
	compt = compt * 2
	...
End Sub
Évidemment, ça ne marche pas.
Bon, j'ai tout de suite vu l'erreur : compt1, compt2 etc. sont des bytes, alors que "compt", en paramétrage dans la macro "Compteurs", est une chaîne.
À tout hasard, j'ai même essayé sans succès ceci :
Code:
Sub Compteurs(compt As String)
	Evaluate(compt) = Evaluate(compt) * 2
	...
End Sub
Comment faire en sorte pour que cette chaîne soit reconnue comme étant une des variables "Public" déclarées ?

Merci d'avance pour tout coup de pouce.
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Variables "Public", avec le même préfixe, reprises dans une même macro

Bonjour phlaurent55,

Là je ne suis pas d'accord, une variable byte peut prendre une valeur comprise, si je me souviens bien, entre 0 et 255. Ne confondrais-tu pas avec boolean ?
 

job75

XLDnaute Barbatruc
Re : Variables "Public", avec le même préfixe, reprises dans une même macro

Bonjour Magic_Doctor, le forum,

Pas compris ton histoire de String mais tu veux peut-être ce qui suit.

Place dans un module standard :

Code:
Public compt(1 To 50) 'dimension à adapter

Sub compteurs(n As Byte)
If compt(n) = 0 Then compt(n) = 1
compt(n) = compt(n) * 2
End Sub
Et teste où tu veux avec :

Code:
Sub test()
Dim n As Byte
n = 5 'à adapter
compteurs n
MsgBox compt(n) 'pour tester
End Sub
Bonne journée.
 

job75

XLDnaute Barbatruc
Re : Variables "Public", avec le même préfixe, reprises dans une même macro

Re,

Comme tu as écris :

(ne peuvent prendre que la valeur 1 ou 2)

il faut utiliser :

Code:
Public compt(1 To 50) As Byte 'dimension à adapter

Sub Compteurs(n As Byte)
compt(n) = compt(n) + 1
If compt(n) > 2 Then compt(n) = 1
End Sub

Sub test()
Dim n As Byte
n = 5 'à adapter
Compteurs n
MsgBox compt(n) 'pour tester
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Variables "Public", avec le même préfixe, reprises dans une même macro

Re,

Si l'on veut récupérer les dernières valeurs à chaque ouverture du fichier, mémoriser dans un nom défini :

Code:
Public compt(1 To 50) As Byte 'dimension à adapter

Sub Compteurs(n As Byte)
If IsArray([Compteur]) Then compt(n) = Application.Index([Compteur], n)
compt(n) = compt(n) + 1
If compt(n) > 2 Then compt(n) = 1
ThisWorkbook.Names.Add "Compteur", compt, Visible:=False  'nom défini masqué
End Sub

Sub test()
Dim n As Byte
n = 5 'à adapter
Compteurs n
MsgBox compt(n) 'pour tester
End Sub
A+
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Variables "Public", avec le même préfixe, reprises dans une même macro

Bonjour phlaurent55, tatiak, job, le forum,

job, il s'agit en fait d'une routine que tu m'avais concoctée et qui fut décriée par les iconoclastes dont je parle dans mon avant dernier post :
Code:
    compt1 = IIf(IsNumeric(Evaluate("Compteur1")), Evaluate("Compteur1"), 0)
    compt1 = IIf(compt1 < 2, compt1 + 1, 1)
    ActiveWorkbook.Names.Add Name:="Compteur1", RefersTo:=compt1, Visible:=False
Comme j'aurais une bonne dizaine de compteurs (qui utilisent tous la même routine) sur ma feuille, je me suis dit qu'après tout pourquoi ne pas tenter de réaliser une macro paramétrée.
L'idée d'utiliser une variable matricielle (je crois que ça s'appelle comme ça) me paraît excellente.
Supposons que je nomme cette macro "Compteurs", je n'aurais plus alors qu'à écrire pour appeler le compteur :
s'il s'agit du compteur 2 (compt2) par exemple :
Code:
Compteurs compt2
Voilà pourquoi au début j'avais écrit :
Code:
Compteurs(compt As String)
Mais c'est vrai que String ça complique.

A+
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Variables "Public", avec le même préfixe, reprises dans une même macro

Re,

Je viens d'essayer (Post#8) et ça n'a pas marché.
J'ai tenté la modification suivante :
Code:
Sub Compteurs(n As Byte)
    'If IsArray([Compteur]) Then compt(n) = Application.Index([Compteur], n)
    If IsArray(Evaluate("Compteur" & n)) Then compt(n) = Application.Index(Evaluate("Compteur" & n), n)
    compt(n) = compt(n) + 1
    If compt(n) > 2 Then compt(n) = 1
    'ThisWorkbook.Names.Add "Compteur", compt, Visible:=False  'nom défini masqué
    ThisWorkbook.Names.Add "Compteur" & n, compt, Visible:=False 'nom défini masqué
End Sub
ça n'a pas marché.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Variables "Public", avec le même préfixe, reprises dans une même macro

Je viens d'essayer, avec la même philosophie, en reprenant ta routine (Post#9) :
Code:
Public compt(1 To 12) As Byte


Sub Compteurs(n As Byte)
'Administre tous les compteurs de la feuille
'job75

    compt(n) = IIf(IsNumeric(Evaluate("Compteur" & n)), Evaluate("Compteur" & n), 0)
    compt(n) = IIf(compt(n) < 2, compt(n) + 1, 1)
    ActiveWorkbook.Names.Add Name:="Compteur" & n, RefersTo:=compt(n), Visible:=False
End Sub
Pareil, ça ne marche pas.
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki