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 :

Récupérer l'état d'une checkbox Excel 2007


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 28
    Points
    28
    Par défaut Récupérer l'état d'une checkbox Excel 2007
    Bonjour à tous!

    Je souhaiterai récupérer l'état d'une checkbox sous Excel 2007. Après qqes recherches, j'ai fait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveSheet.Shapes(Application.Caller).ControlFormat.Value = xlOff Then ...
    Mais apparement avec excel 2007 cela ne marche pas (RunTime Error '-2147024809 (80070057)')!

    Auriez vous une idée?

    Merci
    Tonave

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Je ne comprends pas très bien l'utilité du code que tu nous montres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes(Application.Caller)
    ça donne quelque chose ça ?

    Pour rercuperer la valeur de ton checkbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if CheckBox1.Value = True '...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 28
    Points
    28
    Par défaut
    Bonjour aalex!

    En fait je m'explique. Je suis en stage et mon bur premier est d'arriver à passer des macro d'excel 2003 vers 2007. Hélas ça ne marche pas toujours. En particulier lors de la mise en place de checkbox.

    Comme je suis un novice dans la matière, je les ai mis en place de cette facon :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub CreateCheckBox(Nom As String, Droite As Long, Haut As Long)
     
        'recuperation de la largeur de la feuille graphique
        Dim Largeur As Double
     
        'déclaration de la case à cocher
        Dim MonCheckBox As Shape
     
        Largeur = ActiveChart.ChartArea.Width
     
        'création de la case à cocher
        ActiveSheet.CheckBoxes.Add(Largeur - Droite, Haut, 80, 10).Select
     
        'modification du nom et du label de la case à cocher
        Dim NomLabel As String
        NomLabel = left(Nom, Len(Nom) - 2) 'supprime le numero du checkbox
        Selection.name = Nom
        Selection.Characters.Text = NomLabel
        Selection.PrintObject = False 'objet invisible à l'impression
     
        'modification de la couleur de fond et de l'emplacement du checkbox
        Selection.ShapeRange.Fill.Visible = msoTrue
        Selection.ShapeRange.Fill.Solid
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 7
        Selection.ShapeRange.Fill.Transparency = 0#
        Selection.ShapeRange.left = Largeur - Droite
        Selection.ShapeRange.top = Haut
     
        'validation par défaut de la case à cocher
        'MonCheckBox.ControlFormat.Value = 1
         Selection.Value = xlOn
        ' sauf pour Sub-Test 2 et Sub-Test 3
        If ((Nom = "Sub-Test 2  ") Or (Nom = "Sub-Test 3  ")) Then
            Selection.Value = 0
        End If
     
        'fonction à appeler dans le cas d'une modification de la valeur de la case à cocher
        If ((Nom = "Sub-Test 1  ") Or (Nom = "Sub-Test 2  ") Or (Nom = "Sub-Test 3  ")) Then
            Selection.OnAction = "'" & Application.ThisWorkbook.name & "'!SelectionCourbeInnerLoop"
        Else
            If (Nom = "Unusable Values  ") Then
                Selection.OnAction = "'" & Application.ThisWorkbook.name & "'!MaskUnusableValues"
            Else
                Selection.OnAction = "'" & Application.ThisWorkbook.name & "'!SelectionCourbe"
            End If
        End If
     
    End Sub
    Mon fichier excel comporte plusieurs pages. Sommaire, graph, data, ... Sur une de mes pages, il y a deux checkbox. ActiveSheet.Shapes(Application.Caller) a été mis en place par un stagiaire l'année dernière et donc justement je ne sais pas trop ce que cela fait mais comme j'avais trouvé ca plusieurs fois sur internet cela me semblait bon. Le problème est que sur cette page il y a deux checkboxs et lorsqu'on en décoche un, il a pour but d'afficher ou non la serie sur le graph.

    Voilà le code du stagiaire de l'année dernière :

    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
    Sub SelectionCourbe()
     
        'si on met à 0 le checkbox selectionné et que l'autre checkbox
        'est également à 0 : on met l'autre checkbox à 1 (pour éviter d'avoir les
        'deux checkbox à 0)
        If ActiveSheet.Shapes(Application.Caller).ControlFormat.Value = xlOff Then
            Dim myShape As Shape
            For Each myShape In ActiveSheet.Shapes
                If myShape.Type = msoFormControl Then 'si la forme est un checkbox
                    If myShape.name <> Application.Caller Then 'si c'est le checkbox non sélectionné
                        If ActiveSheet.Shapes(myShape.name).ControlFormat.Value = xlOff Then 'si son état est à 0
                            ActiveSheet.Shapes(myShape.name).ControlFormat.Value = xlOn 'état du checkbox = 1
                            HideUnhideSeries (myShape.name) 'affichage de la série associée au checkbox
                        End If
                    End If
                End If
        Next
        End If
     
        'masque ou démasque les séries associées au checkbox appelant suivant son état
        HideUnhideSeries (Application.Caller)
    Et donc dans ce code je ne comprends pas tout. Je comprends à quoi il sert mais déjà je ne sais pas comment mettre la condition au niveau du if.

    Je vais donc déjà essayer de faire avec la méthode que tu m a di.
    J'espère que cela va fonctionner! Merci

    Tonave

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Ok merci pour le code, je ne sais pas trop si j'aurai le temps de t'aider aujourd'hui.

    Dans la première macro
    Application.caller est censé ici renvoyer le nom de l'objet shape (ici une case à cocher)

    Cette macro sert à créer la case à cocher et cette ligne indique la macro à appeler lorsque l'on click sur la case à cocher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Selection.OnAction = "'" & Application.ThisWorkbook.name & "'!SelectionCourbeInnerLoop"
    La deuxième macro :
    Je pense que c'est elle que tu veux adapter regarde déjà avec le debuguer si
    Application.Caller renvoi bien le nom de ton checkbox
    Regarde aussi sur quelle ligne tu as le RunTime Error

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 28
    Points
    28
    Par défaut
    Merci aalex d'essayer de m'aider!

    Alors avant tout le runtime Error ce situ bien sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveSheet.Shapes(Application.Caller).ControlFormat.Value = xlOff Then
    Application.caller est bien le nom de mon checkbox, mais quand je regarde ce que me donne "ActiveSheet.Shapes(Application.Caller)" :

    <The item with the specified name wasn't found.>

    Par contre Application.caller est bien mon CheckBox....

    Qu'en penses-tu?

    Tonave (le boulet du VBA )

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Je pense que tu devrais faire simple, avec le code directement sur ta case à cocher comme je te l'ai indiqué plus haut.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 28
    Points
    28
    Par défaut
    C'est bon enfin Merci beaucoup aalex

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé
    En tout cas pour moi ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Selection.Range.FormFields(1).CheckBox.Value = True) Then
    Vu que le dernier élément sélectionné sur le formulaire est la checkbox, il suffit de l'appeler avec Selection.Range.FormFields(1).CheckBox pour agir sur la checkbox sélectionnée.
    Ensuite, il suffit de regarder l'attribut Value pour savoir si c'est vrai ou faux, Name pour le nom ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/10/2009, 16h25
  2. [PyQt] Récupérer l'état d'une QCheckBox
    Par parp1 dans le forum PyQt
    Réponses: 1
    Dernier message: 09/02/2006, 23h50
  3. Comment récupérer l'état d'une case à cocher
    Par oursquetaire dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/01/2006, 08h58
  4. récupérer la valeur d'une checkbox
    Par druglord dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/08/2005, 13h54
  5. Récupérer la couleur d'une cellule excel par Delphi
    Par teamsebracing dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/06/2003, 14h50

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