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 :

Peut-on simplifier Sub checkbox1, 2, ..n_click () en checkbox+i?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut Peut-on simplifier Sub checkbox1, 2, ..n_click () en checkbox+i?
    Bonjour,
    J'ai 24 checkbox et j'aimerais simplifier les codes, est-ce possible?
    Peut-on simplifier le code qui suit comme tel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub checkboxi_click()
    For i = 1 To 24
      If CheckBoxi.Value = True Then
        Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = "8"
      Else
        Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = ""
      End If
    Next
     
    End Sub
    Peut-on intégrer For i = 1 to 24 d'une manière ou d'une autre ?
    Merci beaucoup

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Il faudrait d'abord savoir quelle sorte de checkbox il s'agit.
    Est-ce sur un UserForm ou une feuille ?
    Si sur une feuille, de quel type s'agit-il ? contrôle formulaire ou ActiveX ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    J'imagine que c'est sur un UserForm, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("CheckBox" & I).Value

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    C'est en effet bien sur une userform..

    Je vais essayer ce dernier code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.controls("checkbox"&I).value
    mais comment dois-je l'introduire? dans une procédure?
    et avec cela, je suppose que je suis quand même obligé d'ajouter :
    sub checkbox1_click () et ce pour les 24 checkboxs ?

    Merci pour votre aide

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Oui, tu auras à mettre du code dans chaque ChekboxXYZ_Click()
    Par contre, il y a des gens qui créent leurs contrôles par code et, en passant par une classe, tu pourrais réduire cette tâche de multiples _Click(), je pense...

    Il y a eu des discussions là-dessus il n'y a pas très longtemps.
    Tu pourrais faire une recherche sur WithEvents..
    Mais comme je ne suis pas un expert dans ce domaine, je laisserai le soin à d'autres de t'expliquer.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Modules de classe
    Bonjour, et Bonjour au Forum,

    Les modules de classe.

    Je voulais mentionner le tutoriel de Pierre FAUCONNIER, mais je ne parviens pas à y accéder. Si quelqu'un peut me l'indiquer...

    Utiliser un module de classe consiste, pour ce qui nous concerne ici, à définir une collection (classe) d'objets répondant au critère de leur nature (CheckBox).
    Cette classe est alimentée via une variable Tableau à l'initialisation du formulaire (Userform).
    C'est elle qui gère les évènements par rapport à ses occurences, ici tous les CheckBox.

    Ce qui se traduit comme suit.

    Dans le module du formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    'Module de classe
    'ClassCheckBox est le nom de la classe d'objets Textbox
    Dim CTB() As New ClassCheckBox
     
     
    Private Sub UserForm_Initialize()
     
    Dim ct As Control
    Dim n As Byte
     
    n = 0
    'balayage des contrôles
    For Each ct In Me.Controls
            If TypeName(ct) = "CheckBox" Then
                    n = n + 1
                    ReDim Preserve CTB(1 To n)
                    'alimentation de la classe si le contrôle est un CheckBox
                    Set CTB(n).TB = ct
            End If
    Next ct
     
    End Sub
     
    Private Sub Btn_Valider_Click()
     
    Me.Hide
    Unload Me
     
    End Sub
    Attention à l'homogénéisation de nom des divers objets(TB, CTB, ClassCheckBox..)

    Création d'un module de classe nommé ClassCheckBox.
    Dans le module y afférant, coder (bien entendu, évènement à adapter):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Public WithEvents TB As MSForms.CheckBox
     
    Private Sub TB_Click()
     
    MsgBox TB.Caption
     
    End Sub
    Personnellement, c'est mon seul emploi des modules de classe. Pour l'instant.
    Mais il y de nombreux types d'utilisation, plus puissants mais plus compliqués (Je débute en la matière)

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour,

    tout est dans la FAQ Excel : les modules de classe

Discussions similaires

  1. Peut-on simplifier ce code conditionnel
    Par alheuredudejeuner dans le forum Android
    Réponses: 3
    Dernier message: 14/04/2013, 20h49
  2. Peut-on raccourcir ou simplifier cette syntaxe ?
    Par clavier12AZQSWX dans le forum Android
    Réponses: 9
    Dernier message: 12/06/2012, 16h13
  3. Réponses: 4
    Dernier message: 03/01/2009, 14h15
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  5. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

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