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 :

Contrôles (CheckBox) sur une feuille de calcul


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Contrôles (CheckBox) sur une feuille de calcul
    Bonjour à tous,

    Je tente de proposer un fichier de mise à jour de données via un tableau composé de 16 lignes. A chaque ligne correspond un donnée et une CheckBox y est asssociée. J'ai donc 16 cases à cocher sur ma feuille. La procédure que je veux mettre en place consiste à cocher la ou les case(s) correspondant à la ou les donnée(s) à modifier. En fonction de la valeur des cases cochées ( Value = True), diverses boites de dialogue apparaitront pour entrer les nouvelles données.
    Mon problème est d'accèder aux valeurs de ces CheckBox. Tout ce que j'ai vu pour le moment, ce sont des collection dans des UserForm et non dans une feuille de calcul. Comment donc les déclarer (sous forme de collection ou autre), y accéder (impossible par une boucle For Each CheckBox in Worksheet("Feuil1").Controls) ?

    Merci d'avance pour vos propositions

  2. #2
    Invité
    Invité(e)
    Par défaut


    Tu peux en revanche les sélectionner un par un et récupérer la valeur,
    1 si la case est cochée

    Il faut que les cases à cocher soient numéroter de 1 à 16
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      For I = 1 To 16
        ActiveSheet.Shapes("Check Box " & I).Select
        VChk = Selection.Value
      Next
    Cordialement

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Salut Bruno,

    Merci de ta réponse. Cependant, j'ai une "erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet" sur la commande "VCk = Selection.Value"
    J'ai déclarer VCk en booléen et en chaine de caractère mais rien n'y fait.
    N'étant pas expert en VBA, je pensais pouvoir déclarer les checkbox dans une collection, mais comment faire lorsque les controles sont sur une feuille de calcul ?

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


    Tout dépends comment tu as créé tes CheckBox,
    1) par la boite à outils : "boite à outils Controles"
    Le nom de tes objets = Shapes("CheckBox1"), etc...
    SANS ESPACE

    2) par la boite à outils "Formulaires"
    Le nom de tes objets = Shapes("Check Box 1"), etc...
    AVEC DES ESPACES

    Il faut que tu vérifies que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For I = 1 To 16
        ActiveSheet.Shapes("Check Box " & I).Select
    ou
        ActiveSheet.Shapes("CheckBox" & I).Select
      Next
    sélectionne bien chaque case à cocher !
    Si c'est le cas,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim VChk ' tout simplement
    VChk = Selection.Value
    , ne doit pas te donner d'erreur

    Sinon, il y a un problème !
    tu as peut être renommé tes cases à cocher !?

    A+

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    C'était bon pour l'écriture de CheckBoxn, j'ai corrigé la déclaration de VChk et quelques cases sont cochées mais rien n'y fait.

    Ce sera peut-être plus clair si je te montre mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim I As Long
        Dim VChk    
     
        For I = 1 To 16
            ActiveSheet.Shapes("CheckBox" & I).Select
            VChk = Selection.Value
            If VChk = True Then 'Cette boucle if pour tester si mon code qui suit sera accepté
                MsgBox (I) 'Histoire de faire quelque chose
            End If
        Next
    Lorsque je l'exécute, j'ai toujours le même message d'erreur '438' "Propriété ou méthode non gérée par cet objet" sur VChk = Selection.Value
    Il est vrai que j'avais renommé mes checkbox mais je leur ai réaffectés leurs valeurs initiales (CheckBox1, 2, 3, ... ).

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    tu peux tester


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim Obj As OLEObject
     
        For Each Obj In Feuil1.OLEObjects
            If TypeName(Obj.Object) = "CheckBox" Then
                    If Obj.Object.Value = True _
                        Then MsgBox Obj.Name & " =Vrai"
            End If
        Next Obj


    michel

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci les gars, ça marche
    Une question toutefois : pourquoi faire appel à un objet OLE alors que l'on se trouve uniquement sur Excel ? Je pose cette question pour comprendre un peu mieux les tréfonds de la galaxie VBA !

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    ça marche mais est-il possible de récupérer l'index des checkbox car ca alourdit enormément la suite de mon code et je pense qu'une procédure paramétrée serait bien plus claire : à vous d'en juger :
    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
    If Worksheets("Tableau").CheckBox3.Value Then
                            Bdd_Texte.Caption = "Nom de l'équipement"
                            Bdd_Texte.Et_old_Val = "Nom de l'équipement"
                            Bdd_Texte.Et_new_Val = "Nom de l'équipement"
                            Worksheets("BD_Equip").Select
                            Range("B900").Select
                            ActiveCell.Formula = "=VLOOKUP(" & ZT_Id_Bdd_Id.Value & ",A2:W4,4)" 'correspondant à la formule recherchev sous Excel
                            Bdd_Texte.ZT_Old_Val = Worksheets("BD_Equip").Cells(900, 2).Value
                            Bdd_Texte.Et_Equip.Caption = Worksheets("BD_Equip").Cells(900, 2).Value
                            Worksheets("BD_Equip").Cells(900, 1).ClearContents
                         End If
    'deuxième boucle if et il y en a 4 comme celle-ci!
                         If Worksheets("Tableau").CheckBox11.Value Then
                            Bdd_Texte.Caption = "Référent"
                            Bdd_Texte.Et_old_Val = "Référent"
                            Bdd_Texte.Et_new_Val = "Référent"
                            Worksheets("BD_Equip").Select
                            Range("B900").Select
                            ActiveCell.Formula = "=VLOOKUP(" & ZT_Id_Bdd_Id.Value & ",A2:W4,12)"
                            Bdd_Texte.ZT_Old_Val = Worksheets("BD_Equip").Cells(900, 2).Value
                            Worksheets("BD_Equip").Cells(900, 1).ClearContents
                            ActiveCell.Formula = "=VLOOKUP(" & ZT_Id_Bdd_Id.Value & ",A2:W4,4)"
                            Bdd_Texte.Et_Equip.Caption = Worksheets("BD_Equip").Cells(900, 2).Value
                            Worksheets("BD_Equip").Cells(900, 1).ClearContents
                         End If
    Merci du temps que vous consacrer à des débutants comme moi

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    je ne suis pas sur d'avoir compris ta demande mais tu peux essayer


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim i As Integer
    Dim Ws As Worksheet
     
    Set Ws = Worksheets("Tableau")
     
    'Les objets doivent être nommés CheckBox1, CheckBox2...CheckBox4
    For i = 1 To 4
        If Ws.OLEObjects("CheckBox" & i).Object.Value Then
        '
        '...
        '
        End If
    Next i


    michel

  10. #10
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour SilkyRoad,

    Merci de m'avoir répondu et de m'avoir compris alors que ma question n'était pas très claire !
    Donc, ça marche et c'est exactement ce que je voulais !
    Merci encore et une bonne continuation à toute l'équipe qui répond aux questions.
    Pour ceux que cela intéresserait, voici un bout de code qui teste la valeur des Checkboxs avant de continuer la procédure et afficher un message pour rappeler de cocher au moins une case :
    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
    Private Sub MAJ_Click()
     
        Dim Obj As OLEObject
        Dim I As Integer, A As Integer
        Dim Ws As Worksheet
     
        Set Ws = Worksheets("Tableau")
     
        'Les objets doivent être nommés CheckBox1, CheckBox2...CheckBox4
        For I = 1 To 16
            If Ws.OLEObjects("CheckBox" & I).Object.Value = True Then
                A = A + 1
            End If
        Next I
        If A = 0 Then
            MsgBox ("VEUILLEZ COCHER UNE CASE")
            Else: Bdd_Id.Show 'Affiche la boite de dialogue suivante
        End If
     
    End Sub

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/04/2011, 16h10
  2. Identifier le contrôle actif dans une feuille de calculs
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 04/03/2008, 19h47
  3. Fixer l'userform sur une feuille de calcul.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/12/2007, 18h45
  4. Grouper les contrôles sur une feuille de calcul
    Par stos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/09/2007, 16h11
  5. Comment générer du code sur une feuille de calcul?
    Par mardona dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/05/2007, 17h20

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