Boucle avec des variables "Public"

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'ai de nombreuses variables (compt1, compt2, compt3,...) déclarées "As Byte", dans un module standard, comme "Public". Ex : Public compt1 As Byte.
Lors de l'ouverture du classeur, dans le module de "ThisWorkBook", chaque variable récupère la valeur d'une cellule (qui peut être 1 ou 0) :
compt1 = [Compteur1]
compt2 = [Compteur2]...
pour faire plus court, je voudrais faire une boucle du type :
VB:
for i = 1 To n
	"compt" & i = "[Compteur" & i & "]"
next
Ça ne marche pas du tout.
Il y aurait-il un moyen pour résoudre ce problème ?
 

Magic_Doctor

XLDnaute Barbatruc
Re : Boucle avec des variables "Public"

Bonjour Yaloo, Dranreb,

Dranreb, avant de lire ton post, je m'étais orienté vers la même solution que la tienne : paramétrer la variable "compt".
Malheureusement, dans mon application ça ne marche pas. Tout reste bloqué. Ce n'est pas bien grave, puisque ça marchait, mais c'est dommage pour, disons, la "beauté du synthétique".
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Boucle avec des variables "Public"

Bonjour.
Il n'y a pas d'autre moyen que d'utiliser un tableau si on veut pouvoir traiter ses variables élémentaires dans une boucle, et je ne vois pas pourquoi ça ne marcherait pas d'utiliser partout ses éléments.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Boucle avec des variables "Public"

Bonjour Dranreb, job75, le forum,

Dranreb, tu as tout à fait raison, javais tenté un truc bidon à la hussarde et, comme je te le disais dans un précédent post, je me suis orienté vers un paramétrage de la variable "compt" (donc, comme tu le précises justement, on dresse ainsi un tableau) mais sans succès...
job, tu m'as fait connaître "Evaluate", j'avoue que j'y avais pensé, mais jonglant mal avec cette fonction, je n'avais pu résoudre le problème.
Finalement, grâce à vos interventions pertinentes, j'ai fait une synthèse de vos solutions :
VB:
Option Explicit
Public compt() As Byte 'différents compteurs de la feuille "BD"
---------------------------------------------------------------------------------
Sub ActualisationBD() 'macro reprise dans le module de classeur "ThisWorkBook" lors de l'ouverture du classeur ("Private Sub Workbook_Open()")
'Actualisation de certains paramètres de la feuille "BD" lors de l'ouverture du classeur
    Dim i As Byte
    .
    .
    .
    ReDim compt(1 To 8) 'il y a 8 compteurs
    'compt(1) : compteur du bouton "BoutonTexteMEF"
    'compt(2) : compteur du bouton "BoutonSymboles"
    'compt(3) : compteur de la cellule ("celtriproduits") qui déclenche le tri par ordre alphabétique ou chronologique des produits du tableau "ListeItems1"
    'compt(4) : compteur de la cellule ("celtrimv") qui déclenche le tri par ordre croissant ou décroissant des masses volumiques du tableau "ListeItems1"
    'compt(5) : compteur de la cellule ("celtriitems") qui déclenche le tri par ordre alphabétique ou par familles de la 1ère colonne du tableau "ListeItems2"
    'compt(6) : compteur de la cellule ("celtrifamilles") qui déclenche le tri du tableau "TableauFamilles1"
    'compt(7) : compteur de la cellule ("celalter") qui déclenche l'alternance de la couleur des lignes des tableaux
    'compt(8) : compteur de la cellule ("celcolcoul") qui déclenche le changement de couleurs des colonnes des tableaux
    
    For i = 1 To 8
        compt(i) = Evaluate("Compteur" & i)
    Next
    .
    .
    .
End Sub
Et ça marche maintenant très bien.

Merci à vous deux y muy buen fin de tarde.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Boucle avec des variables "Public"

Bonsoir,

Après tout, un forum ne set pas uniquement à poser des questions, mais aussi à comprendre.
J'en profite alors pour faire la remarque suivante. Au fond, quelle différence il y a-t-il entre :
VB:
    For i = 1 To 8
        compt(i) = Application.Range("Compteur" & i).Value
    Next
(Ça ne marche pas...)

et :
VB:
    For i = 1 To 8
        compt(i) = Evaluate("Compteur" & i)
    Next
(ça marche !)

? ? ? ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Boucle avec des variables "Public"

J'utilise peu la méthode Range de l'objet Application. Je ne pouvais pas savoir que toutes vos plages nommées étaient dans la même feuille sinon j'aurai mis le CodeName de cette feuille à la place.
 

Dranreb

XLDnaute Barbatruc
Re : Boucle avec des variables "Public"

VB:
compt(i) = Feuil1.Range("Compteur" & i).Value
À supposer que Feuil1 soit bien ne nom de l'objet Worksheet tel qu'il apparait à gauche du nom Excel rappelé entre parenthèses dans l'explorateur de projets. Si ce sont des noms définis au niveau de la feuille, c'est normal que Application.Range ne fonctionnait pas. Il eut fallu Application.Range("Feuil1!Compteur" & i), à supposer que "Feuil1" soit aussi le nom Excel de la feuille.
Si ce sont des noms définis au niveau du classeur je ne m'explique pas pourquoi ça ne fonctionne pas tel que je l'avais écrit.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Boucle avec des variables "Public"

Bonsoir tout le monde,

Pour répondre à Si..., je voulais attribuer à certaines cellules qui, quand on clique dessus déclenchent une macro événementielle, un compteur, c-à-d une variable qui peut prendre au moins 2 valeurs (la plupart du temps 2). Par exemple, je clique sur une cellule d'en-tète de tableau, tous les items au-dessous sont triés soit par ordre croissant, soit par ordre décroissant. Seulement je voulais que ces variable n'occupassent point de cellules dans la feuille. Tout devient en quelque sorte virtuel, et quand j'ouvre le classeur, fatalament toutes ces variables sont égales à 0. Voilà pourquoi je suis obligé, lors de l'ouverture du classeur, de leur attribuer les valeurs qu'elles avaient juste avant la dernière fermeture du classeur.
 

Discussions similaires

Statistiques des forums

Discussions
312 963
Messages
2 093 996
Membres
105 906
dernier inscrit
aifa