Utilisation d'un seul code sur plusieurs CheckBox

Bonjour à tous,

Mon problème est surement très simple à résoudre mais je viens de commencer à coder sur VBA et mes recherches sur internet n'ont rien donné.

Le problème est le suivant :

J'ai un code VBA qui s'effectue sur un click d'une CheckBox.

Le soucis c'est que je veux utiliser l'exact même code sur plusieurs CheckBox.

Du coup, si je crée une nouvelle CheckBox, je suis obligé de copier-coller mon code et, en plus, de changer toutes les fonctions qui utilisent le nom de ma CheckBox par exemple :

CheckBox1.Value

en

CheckBox2.Value

et ainsi de suite.

Alors, j'avais pensé à remplacer mon numéro de CheckBox par une variable pour pouvoir utiliser:

Controls("CheckBox" & i).Value

Au moins, je n'aurais que la variable en début de code à changer.

Malheureusement, cela ne marche pas. Lorsque je compile, il me pointe le "Controls" et m'écrit "Sub ou Fonction non définies".

Donc j'aimerais savoir :

  • s'il y a une méthode qui soit encore plus simple pour utiliser mon code sur plusieurs CheckBox;
  • sinon, pourquoi ma fonction Controls ne marche pas ?

Je vous remercie par avance pour votre aide.

Cordialement,

Zolhaz

Bonjour,

Déjà, il faut savoir où l'on se trouve ?

Ensuite le cas échéant, quel est le type de contrôles utilisés ?

Cordialement.

Bonjour,

Je suis novice sur VBA donc je vais essayer de te répondre du mieux possible.

Mon code se trouve dans ma feuille 1 de mon classeur.

Enfin, mon code est accessible lorsque je clique sur ma CheckBox.

Qu'entends tu par "type de contôles utilisées" ?

Merci.

Cordialement,

Zolhaz

1) La propriété Controls est une propriété d'un objet Userform. L'objet Worksheet ne dispose pas d'une telle propriété.

2) Il existe 2 types de contrôles, les contrôles dits "de formulaire", intégrés à Excel, et les contrôles ActiveX (Microsoft.Forms).

Et sans classeur, on ne pourra te répondre que des généralités !

D'accord, je comprends mieux pourquoi ça marche pas.

Par ailleurs, j'ai des contrôles ActiveX.

Du coup, il n'y a aucune solution à mon problème. Je suis obligé de copier et coller mon code à chaque fois et changer mes :

CheckBox1.Value

à la main ?

Pas de défaitisme !

Ce type d'objets, dans une feuille de calcul appartient à la collection OLEObjects, qu'il faut donc invoquer (au lieu de Controls dans un Userform).

C'est vrai que c'est un peu un maquis . Ils appartiennent aussi à la collection Shapes (à laquelle sont également rattachés les contrôles de formulaire). Mais pour accéder aux propriétés de contrôle de ces objets (dont Value fait partie), on doit invoquer une propriété intermédiaire...

Syntaxe :

Me.OLEObjects("CheckBox" & i).Object.Value

Me désignant la feuille dans un module de feuille.

Parallèlement on aurait en contrôles de formulaire :

Me.Shapes("Check Box " & i).ControlFormat.Value

Cordialement.

C'est génial, ça marche !

En revanche, j'utilise aussi la fonction .Top et là ça ne marche pas.

Sais tu pourquoi ça marche pas ?

Y a t il un moyen pour que ça marche ?

Merci pour ton aide.

Cordialement,


C'est bon, j'ai résolu le problème du Top.

Il fallait juste mettre

OLEObjects("CheckBox" & i).Top

Dernière question et je te laisse tranquille promis

J'ai encore la tache de copier coller mon code pour checkbox. Il n'y a aucun moyen sur excel pour que chaque checkbox utilise le même code ?

Cordialement,

Oui ! Pour Top, Left... ou Name, Visible... ce sont des propriétés de formes, qui n'utilisent pas Object.

Les contrôles ActiveX disposent de procédures d'évènement dans la feuille, dont évènement Click...

Tu peux à partir de là lancer une même précédure, éventuellement avec passage de paramètre les différenciant...

Quelle est ta problématique à partir des CheckBox ?


je vois que tu as croisé Thev... Un module de classe peut être une solution, si sa proposition cadre avec tes visées...

Pas assez rodé là-dessus pour intervenir efficacement... A+

Rechercher des sujets similaires à "utilisation seul code checkbox"