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 :

Boucle sur checkbox et label


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut Boucle sur checkbox et label
    Bonjour,

    A partir de ce code :

    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
    30
    31
    32
    33
    34
    35
    Private Sub CheckBox1_Click()
    If CheckBox1.Value Then
    Label1.Caption = Sheets("feuil1").Range("B1").Value
    Else
    Label1.Caption = "merci de valider"
    End If
    End Sub
    Private Sub CheckBox2_Click()
    If CheckBox2.Value Then
    Label2.Caption = Sheets("feuil1").Range("B1").Value
    Else
    Label2.Caption = "merci de valider"
    End If
    End Sub
    Private Sub CheckBox3_Click()
    If CheckBox3.Value Then
    Label3.Caption = Sheets("feuil1").Range("B1").Value
    Else
    Label3.Caption = "merci de valider"
    End If
    End Sub
    Private Sub CheckBox4_Click()
    If CheckBox4.Value Then
    Label4.Caption = Sheets("feuil1").Range("B1").Value
    Else
    Label4.Caption = "merci de valider"
    End If
    End Sub
    Private Sub CheckBox5_Click()
    If CheckBox5.Value Then
    Label5.Caption = Sheets("feuil1").Range("B1").Value
    Else
    Label5.Caption = "merci de valider"
    End If
    End Sub
    Serait-il possible de créer une boucle afin d'éviter de le répéter xfois.
    Pour l’exemple j'en ai que 5, mais dans la réalité j'en des centaines.
    Dans mon idée, ça serait quelque chose comme :
    Si case à cocher n = true alors label n = "b1" sinon "merci de valider".
    Tout se passe sur une feuille excel et non dans un Userform

    Merci pour votre aide

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour le forum, rakhann974

    A essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Integer
     
    For i = 1 To 5
      With Sheets("feuil1")
          If .OLEObjects("CheckBox" & i).Object.Value Then
            .OLEObjects("Label" & i).Object.Caption = .Range("B1").Value
          Else
            .OLEObjects("Label" & i).Object.Caption = "merci de valider"
          End If
      End With
    Next i
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Bonjour Casefayere,

    Merci beaucoup pour ce code qui fonctionne très bien, mais (ben oui sinon ca serait trop facile ) il n'est pas interactif. A moins que ça vienne de moi.
    je l'ai placé dans ma feuille comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub validation()
     Dim i As Integer
    For i = 1 To 2
      With Sheets("feuil1")
          If .OLEObjects("CheckBox" & i).Object.Value Then
            .OLEObjects("Label" & i).Object.Caption = .Range("B1").Value
            Else
            .OLEObjects("Label" & i).Object.Caption = "merci de valider"
          End If
      End With
      Next i
    End Sub
    je coche mes cases mais la valeur du label ne change que si je lance la procédure à la main.
    Il y a quelque chose que j'ai dû certainement louper.
    j'ai pensé également passer par un module afin de pouvoir l'appeler depuis n'importe quel feuille, mais je vois pas comment faire.
    Je précise que je suis un peu débutant et que jusqu'à présent je me cantonais à des fonctions basique en vba.

    Merci beaucoup de ton aide.

    Afin de répondre à mon problème, j'ai du le contourner comme suit :

    dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub validation(i As Integer)
    'For i = 1 To 5
      With Sheets("feuil2")
          If .OLEObjects("CheckBox" & i).Object.Value Then
            .OLEObjects("Label" & i).Object.Caption = .Range("B1").Value
          Else
            .OLEObjects("Label" & i).Object.Caption = "merci de valider"
          End If
      End With
    'Next i
    End Sub
    Dans ma feuille ("feuil2") pour l'exemple :
    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
    Private Sub CheckBox1_Click()
    Call validation(1)
    End Sub
     
    Private Sub CheckBox2_Click()
    Call validation(2)
    End Sub
     
    Private Sub CheckBox3_Click()
    Call validation(3)
    End Sub
     
    Private Sub CheckBox4_Click()
    Call validation(4)
    End Sub
     
    Private Sub CheckBox5_Click()
    Call validation(5)
    End Sub
    Pourriez-vous me dire si c'est la bonne méthode, ou il y a t'il une méthode plus simple.
    La valeur du "label" ne doit plus changer une fois mis à jour.
    J'espère avoir été un peu plus clair dans mon explication.

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je n'ai pas vraiment regardé de près, mais un module de classe semble être adapté. Il vaut mieux poster en section Macro VBA.

    Est-ce que cette question est toujours d'actualité ?

  5. #5
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Comme je débute, je n'ai pas encore essayé de travailler sur les modules de classe.
    je regarderai ça, mais des conseils me seraient bien utiles.

    Rakhann974

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    OK, attendons de voir si quelqu'un te réponde.
    Sinon, je pourrai peut être t'aider demain.

    A+

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    en fait ta demande n'est pas tres precises
    a quel moment les checkboxs sont verifié pour modifier le label correspondant ??????


    dans ce cas la une classe n'est pas forcement necessaire

    soit plus precis dans ta question

    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Déjà, merci de l'attention que vous portez à mon cas.

    Pour te répondre, la validation se fait à chaque fois que la checkbox est coché.

    J'ai commencé à regarder les module de class sur quelques forum et je suis tombé sur un code qui pourrai correspondre à mon besoin. Mais je vais devoir l'adapter. ( du moins si c'est possible).
    Je posterai bien le code d'origine, mais je voudrai le faire par moi même avant que vous donniez la solution.

    Pour ça je vais passer la le tuto sur les module de class afin de bien comprendre leur fonctionnement et leur porté

    Rakhann974

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Salut patricktoulon & rakhann974,

    @rakhann974,
    Ça fais déjà plaisir de savoir que tu ne cherche pas forcément une solution toute préfaite, mais que tu cherche à comprendre le fonctionnement. Pour ma part, je ne suis pas un As des modules de classes, mais pour ton cas, c'est sûr et certain qu'un module de classe est adapté.
    Dès qu'il y a un événement, un module objet est nécessaire, très souvent, un module de classe répond à la question.
    Quelques liens:
    http://www.cpearson.com/excel/AppEvent.aspx
    http://www.cpearson.com/excel/classes.aspx (et bien d'autres)
    http://www.jkp-ads.com/Articles/ControlHandler00.asp (adapté à ton cas, à lire je pense car très rapide à faire)
    et bien sûr, les liens de DVP http://excel.developpez.com/faq/?page=ModuleClasse

    A+

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec le code suivant basé sur une classe.

    1) créez un module de classe Class1 et copiez le code suivant
    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
    Public WithEvents CheckBoxGroup As MSForms.CheckBox
     
    Private Sub CheckBoxGroup_Click()
    Dim OL As OLEObject
    Dim LB As MSForms.Label
    Dim i&
    Dim myItem$
    '--- Détermine l'ID du CheckBox (les chiffres en final) ---
    For i& = 1 To Len(CheckBoxGroup.Name)
      If IsNumeric(Mid(CheckBoxGroup.Name, i&, 1)) Then
        myItem$ = myItem$ & Mid(CheckBoxGroup.Name, i&, 1)
      End If
    Next i&
    '--- Recherche l'OLEObject correspondant  et l'affecte à une variable object MSForms.Label ---
    Set OL = ActiveSheet.OLEObjects("Label" & myItem$ & "")
    Set LB = OL.Object
    '--- Change le caption et la couleur de fonds en fonction de la coche de la CheckBox ---
    If CheckBoxGroup.Value Then
      LB.Caption = [b1]
      LB.BackColor = RGB(204, 255, 204)
    Else
      LB.Caption = "Merci de valider"
      LB.BackColor = RGB(255, 204, 255)
    End If
     
    '--- On s'amuse avec d'autres propriétés (accessoirement) ---
    LB.WordWrap = False
    LB.AutoSize = True
    End Sub
    2) copiez le code suivant dans la fenêtre de code de ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Activate()
    Call InitializeCheckBoxes(ThisWorkbook.Sheets("test")) 'à adapter par la feuille concernée
    End Sub
     
    Private Sub Workbook_Deactivate()
    Set MyClass = Nothing
    End Sub
    3) copiez le code suivant dans un module Standard
    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
    Public MyClass As Classe1
    Public CollCheckBoxes As Collection
     
    Public Sub InitializeCheckBoxes(Feuille As Worksheet)
    Dim OL As OLEObject
    Set MyClass = Nothing
    '---
    Set CollCheckBoxes = New Collection
    For Each OL In Feuille.OLEObjects
      If TypeOf OL.Object Is MSForms.CheckBox Then
        Set MyClass = New Classe1
        Set MyClass.CheckBoxGroup = OL.Object
        CollCheckBoxes.Add MyClass
      End If
    Next OL
    End Sub
    4) renommez une feuille "test", créez un ActiveX CheckBox1 et un ActiveX Label1.
    Sélectionnez les 2 contrôles, copiez les et collez les plusieurs fois de suite pour en avoir une quantité conséquente.
    Les contrôles sont appariés de manière qu'à chaque CheckBoxX correspond un LabelX.

    5) lancez la procédure "Workbook_Activate" qui est dans ThisWorkBook pour initialiser les contrôles CheckBox

    Je mets le classeur exemple en pièce jointe pour faciliter.

  11. #11
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Bonjour PMO2017,

    Ca marche nickel ton code.
    J'étais pas loin de trouver une solution, même si je tournais en rond sur le module standard.
    L'essentiel est que je commence tout juste à comprendre le fonctionnement et je devrais pouvoir l'adapter, comme par exemple la gestion de plusieurs feuilles.

    Merci de ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle sur CheckBox, OptionButton
    Par GoFio dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/02/2014, 23h28
  2. [XL-2007] Boucle sur Checkbox
    Par guigui69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2011, 16h47
  3. boucle sur checkbox
    Par kOrt3x dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/04/2011, 21h20
  4. [XL-2007] Problème boucle sur checkbox
    Par amelyfred dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2010, 22h13
  5. Probleme de boucle sur checkbox
    Par nuFox dans le forum VBA Access
    Réponses: 10
    Dernier message: 05/12/2008, 14h25

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