IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Utilisation d'un seul code sur plusieurs CheckBox


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut 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

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Je pense qu'il faudrait que tu créés une classe (avec un module de classe). Par contre, je ne suis pas à l'aise avec la création de classe en VBA, donc je ne peux pas mieux t'expliquer comment faire. Je te laisse chercher des tutos par toi-même

  3. #3

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je suis novice dans ce domaine.
    Pouvez - vous me dire ce qu'un module de classe va m'apporter ?

    Cordialment,

  5. #5
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Quand tu créés une classe, tu créées une entité avec des propriétés bien définies, et des méthodes propres à cette entité. A partir de cette classe, tu pourras créer plusieurs objets de cette classe.
    Prenons un exemple avec des objets de la vie courante :
    On créé une classe "Maison". Les propriétés de la maison sont le nombre d'étages, le nombre de chambres, le nombre de fenêtre, la couleur de la maison et j'en passe...
    Les méthodes associés à la classe "Maison" sont par exemple : changer la couleur de la maison, construire une nouvelle chambre, ouvrir toutes les fenêtres etc...
    Là, on a défini la classe "Maison".
    Ensuite, on peut créer des maisons particulières en définissant les propriétés:
    On créé la maison de la famille MARTIN, avec 2 étages, 6 chambres, 10 fenêtres, couleur blanche. Maintenant qu'on a créé cette maison, on peut lui appliquer toutes les méthodes qu'on a créé pour une Maison.

    C'est la même chose que lorsque tu utilises "Range" par exemple.
    Avec Range("A1") tu dis que parmi toutes les cellules, tu t'intéresses à la cellule A1. .Copy est une méthode qui peut-être utilisée sur les objets de type Range.

    Ce que ça t'apporte: Tu écris une méthode pour la classe et elle s'applique à toutes les entités de cette classe.

    Mais comme je te disais, je connais le principe, mais pas comment l'appliquer concrètement en VBA. Je te laisse donc te renseigner sur son application concrète

  6. #6
    Invité
    Invité(e)
    Par défaut
    pour compléter le propos for judicieux de riaolle, je préciserai qu'un module de Classe (ou plus génériquement une Classe) est un modèle. on affecte une variable en prenant notre classe en modèle, mais en utilisant l'instruction New:

    on appel ça instancier une variable, ou plus exactement un objet car ici il n'est plus question de charger le contenue d'une brouette, mais en plus de savoir manipuler cette brouette!

    et comme le soulignait riaolle range est un classe!

    les voiture sont classés (Classe catégorie) par modèle et même si ton voisin à le même modèle que toi c'est quand même bien sa voiture avec ses clés dans la boîte à gants!

    un module de classe est un modèle personnalisable en fonction du propriétaire de l'instance.

    une propriété est une variable! reprenons la maison de notre amie!

    elle dispose d'une porte d'entrée. elle est ouverte/fermé; on peut l’assujettir à un booléenne elle est true/false.

    une méthode décrit la façon d’ouvrir ou fermer cette porte en 'autre terme c'est la description d'un enchaînement d'action à mener pour que la porte soit True/False!
    Dernière modification par Invité ; 22/03/2017 à 13h21.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Donc si j'ai bien compris, la marche à suivre va être de créer une classe où celle-ci va pouvoir sélectionner la checkbox voulu.

    Par exemple, ma classe se nommera "Objet" et si je l'ai bien codé, j'écrirais ce qui reviendra à écrire Du coup, dans ma classe, j'autoriserais les variables et je n'aurais plus qu'à écrire Pouvez - vous me confirmer ?

    PS : Merci pour vos explications très pédagogue et précise

  8. #8
    Invité
    Invité(e)
    Par défaut
    Dans ton UserForm tu as un truc comme ça.
    Code UserForm1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CheckBox1_Click()
    End Sub
    Private Sub CheckBox2_Click()
    End Sub
    Code Classe1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents Check As MSForms.CheckBox
    Private Sub Check_Click()
        MsgBox Check.Name
    End Sub
    Code UserForm1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ChkS(2) As New Classe1
    Private Sub UserForm_Initialize()
    For i = 1 To 2
        Set ChkS(i).Check = Me.Controls("CheckBox" & i)
    Next
    ChkS(1).Value = True
    End Sub

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Cependant, j'ai oublier de préciser que mon code n'est pas dans un UserForm mais dans une Worksheet.

    J'imagine que ça change des choses non ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/11/2010, 19h31
  2. Execution de code sur plusieurs feuilles
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/12/2006, 11h12
  3. [excel] même code sur plusieurs feuilles
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/11/2005, 12h23
  4. un seul SELECT sur plusieurs tables ?
    Par deloo dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/09/2005, 12h57
  5. Comment ecrire du code sur plusieurs lignes?
    Par tooneygirl dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo