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 :

Macro à partir d'une case d'option (formulaire) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut Macro à partir d'une case d'option (formulaire)
    Bonjour,

    Ci-joint mon fichier exemple

    J'aimerais pouvoir lancer 3 macros différentes en fonction de l'état des cercles situés en C15, C16 et C17
    ils sont regroupés dans un bloc nommé 51.

    Je ne souhaite pas lancer une macro lorsque je vais cliquer sur l'un de ces 3 cercles.
    Ce que je souhaite, c'est :
    ----------Ouvrir le fichier
    ----------Voir que l'un des 3 cercles est coché
    ----------Lancer une macro différente en fonction du cercle cliqué.

    J'ai beau retourner le truc dans tous les sens, à base de shapes, de "option button",.... rien n'y fait, la macro plante.

    Une idée?

    Par avance, merci
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Tu affectes une cellule comme cellule liée aux boutons (clic droit sur le bouton, choix "format de contrôle", onglet "Contrôle", zone "Cellule liée"). Par exemple, H1 pour les boutons "Rouen gare". Ensuite tu testes la valeur de H1 (1, 2 ou 3) et tu lances la macro en conséquence.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Ce fichier m'est envoyé directement par mon client sans que je puisse le modifier la feuille est protégée par mot de passe. j'ai le mot de passe. mas bon, a la main ...
    et surtout, je vais en avoir des centaines a faire.

    Je souhaiterais donc faire tour cela sans intervention manuelle.

    au dela de ca, je n'ai pas accès à l'onglet "controle" dont tu parles (voir copie d'ecran jointe)
    Images attachées Images attachées  

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Grrrr. Comment est-ce que tu fais pour attacher une miniature ? J'ai, moi, un onglet Contrôle. C'est ton classeur qui est bridé, je ne sais pas comment. Parce que :

    1. je vois cet onglet avec Excel 2013.
    2. je ne le vois pas avec Excel 2007.
    3. les propriétés de l'onglet "Dimension" sont grisées (Excel 2007)
    mais si tu mets une case d'option sur un classeur vierge, tu vois cet onglet.
    Je regarde dès que possible.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Effectivement, je suis sous Excel 2007.

    Pour attacher une miniature lorsque tu réponds a un message, soit :
    -----tu cliques sur le trombone a coté de gras/italique/souligne/...
    -----tu cliques sur "gérer les pièces jointes" dans les "options supplémentaires" juste en dessous de la fenêtre de saisie de réponse.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bé oui, mais ca ajoute une pièce jointe, pas une insertion dans le message ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Apparemment, lorsqu'il s'agit d'une image, il en fait une miniature. sinon cela reste un fichier attaché.

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Merci, j'essaierai.
    Mets la macro suivante dans ton classeur de macros personnelles. Remplace les "MsgBox" par tes macros. (je n'ai fait que les 3 boutons de "Rouen"). Je peux compléter si ça te convient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
        With ActiveSheet
            If .Shapes("Group 51").GroupItems(2).ControlFormat.Value = 1 Then
                MsgBox "Case d'option 3 testée"
            ElseIf .Shapes("Group 51").GroupItems(3).ControlFormat.Value = 1 Then
                MsgBox "Case d'option 4 testée"
            ElseIf .Shapes("Group 51").GroupItems(4).ControlFormat.Value = 1 Then
                MsgBox "Case d'option 5 testée"
            End If
        End With
    End Sub

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Ca me renvoit :
    "Impossible de lire la propriété OptionsButtons de la classe Worksheet"

    sur le premier If.

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Juste. J'ai testé avec Excel 2013. J'y retourne.

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Je n'y arrive pas. Je vais poser la question sur le forum.

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Le lien de la nouvelle discussion est :

    http://www.developpez.net/forums/d13...s/#post7142758

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Merci,

    j'espère que les réponses ne seront pas trop du chinois pour moi.

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Comme tu as pu le lire, il faut dégrouper les ensembles boutons d'option et zone de groupe pour pouvoir récupérer le bouton activé. J'ai ajouté une fermeture du classeur sans enregistrement, mais si tu souhaites enregistrer après exécutation de tes macros, il faudra peut-être (mais est-ce nécessaire ?) regrouper les éléments dissociés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
        With ActiveSheet
            .Shapes("Group 51").Ungroup
            If .Shapes("Option Button 3").ControlFormat.Value = 1 Then
                MsgBox "Case d'option 3 testée"
            ElseIf .Shapes("Option Button 4").ControlFormat.Value = 1 Then
                MsgBox "Case d'option 4 testée"
            ElseIf .Shapes("Option Button 5").ControlFormat.Value = 1 Then
                MsgBox "Case d'option 5 testée"
            End If
        End With
        ActiveWorkbook.Close False ' pour ne pas enregistrer le classeur
    End Sub

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Merci beaucoup.

    Malheureusement, cela se corse.

    Je viens de recevoir un nouveau fichier de mon client.
    Et les noms des groupes changent.

    ainsi sur l'exemple envoyé, c'etait 51, 52, 53 et 54
    mais la c'est 35, 36, 41 et 47

    les numeros des options buttons ne changent pas. mais je ne peux l'assurer pour les prochains fichiers.

    Ne pourrait on pas essayer de recuperer le nom des groupes en fonction de la colonne ou ils sont placés puisque je dois lancer des actions en fonction des sites ?


    A moins que je reprenne plutot la solution que j'ai évoqué sur l'autre sujet
    Ca semble plus simple pour la suite. (les cases semblant etre toujours les meme, je peux tester la ligne et la colonne)

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    En m'inspirant de la macro de Mercatog, j'ai fini par pondre ceci (pour la colonne C). Le résultat est l'adresse du bouton sélectionné.

    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
    Sub test3()
    Dim Shp As Shape, Gpe As Shape
    Dim i As Integer, j As Integer
    Dim Tb(), G As Shape
    With ActiveSheet
        'boucle sur les formes
        For Each Shp In .Shapes
            'si groupe
            If Shp.Type = msoGroup Then
                'si colonne 3
                If Shp.TopLeftCell.Column = 3 Then
                    'enregistrement du nom du grooupe dans la table
                    j = 0
                    ReDim Preserve Tb(j)
                    Tb(j) = Shp.Name
                    'boucle sur les formes du groupe
                    For Each Gpe In Shp.GroupItems
                        'enregistrement dans la table
                        j = j + 1
                        ReDim Preserve Tb(j)
                        Tb(j) = Gpe.Name
                    Next Gpe
                    'dissociation du groupe
                    Shp.Ungroup
                    'boucle sur les boutons et récupération de l'adresse du bouton sélctionné
                    For i = 2 To 4
                        If .Shapes(Tb(i)).ControlFormat.Value = 1 Then
                            MsgBox .Shapes(Tb(i)).TopLeftCell.Address & " sélectionnée"
                            Exit For
                        End If
                    Next i
                    '*** reformation du groupe
                    Set G = .Shapes.Range(Array(Tb(1), Tb(2), Tb(3), Tb(4))).Group
                    'on rebaptise le groupe avec son nom d'origine
                    G.Name = Tb(0)
                End If
            End If
        Next Shp
        End With
    End Sub

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/12/2009, 17h52
  2. Réponses: 5
    Dernier message: 04/01/2007, 16h46
  3. Réponses: 4
    Dernier message: 25/10/2006, 10h13
  4. [Requete] cas de 2 critères venant d'une case d'un formulaire
    Par antoine0207 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/07/2006, 12h53
  5. Choisir à partir d'une table dans un formulaire
    Par couguar dans le forum IHM
    Réponses: 28
    Dernier message: 06/06/2006, 08h47

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