Excel 2007 - Macro à partir d'une case d'option (formulaire)

Résolu
guigol Messages postés 66 Statut Membre -  
guigol Messages postés 66 Statut Membre -
Bonjour,

J'aimerais pouvoir lancer 3 macros différentes en fonction de l'état de cercle situés en C15, C16 et C17. ces cercles ont été insérés via la commande developpeur/Inserer/Controle de formulaire/Case d'option
ils sont regroupés dans un bloc nommé 51.

Le fichier en question m'est fourni par mon client. Donc impossible de le modifier. mais il contient des informations précieuses (indiquées par ces fameuses cases d'options). Et en fonction de ces cercles cochés (ou non), lancer des calculs différents.

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
----------Lancer une macro qui fera différentes actions 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

6 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    Je pense qu'il faut creer un classeur avec la macro suivante :

    Sub lancer_macro() 
    
    If ActiveSheet.OptionButtons(1).Value = 1 Then 
      Call Macro1 
    End If 
    If ActiveSheet.OptionButtons(2).Value = 1 Then 
      Call Macro2 
    End If 
    If ActiveSheet.OptionButtons(3).Value = 1 Then 
      Call Macro3 
    End If 
    
    End Sub

    Macro1 2 et 3 correspondent aux traitements voulus.

    Il faut ensuite ouvrir le classeur du client, se positionner sur la feuille qui contient les case d'options et appeler la macro "lancer_macro"

    A tester

    A+
    Cordialement,
    0
  2. guigol Messages postés 66 Statut Membre 1
     
    Merci pour ta réponse.

    Mais il me répond :
    "Impossible de lire la propriété OptionsButtons de la classe Worksheet"

    J'ai essayé de le mettre en ligne.

    http://tilidom.com/tilidom/download/183245806

    Arrivez vous à y acceder?
    0
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      C'est OK on peut acceder au fichier.
      Je me penche sur le sujet et je reviens...
      0
  3. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bon c'était pas facile mais voilà mon analyse.
    On ne peut pas lire les controls parcequ'ils sont groupés.
    Donc il faut d'abord les dégrouper puis faire la macro "d'aiguillage" d'ou mes deux macros comme ceci :
    Sub Degrouper() 
    On Error Resume Next 
    ActiveSheet.Shapes.Range(Array("Group 51")).Select 
    Selection.ShapeRange.Ungroup 
    ActiveSheet.Shapes.Range(Array("Group 52")).Select 
    Selection.ShapeRange.Ungroup 
    ActiveSheet.Shapes.Range(Array("Group 53")).Select 
    Selection.ShapeRange.Ungroup 
    ActiveSheet.Shapes.Range(Array("Group 54")).Select 
    Selection.ShapeRange.Ungroup 
    End Sub 
    
    Sub lancer_macro() 
    If ActiveSheet.Shapes("Case d'option 3").ControlFormat.Value = xlOn Then 
      Call OUI3 
    End If 
    If ActiveSheet.Shapes("Case d'option 4").ControlFormat.Value = xlOn Then 
      Call OUI4 
    End If 
    If ActiveSheet.Shapes("Case d'option 5").ControlFormat.Value = xlOn Then 
      Call OUI5 
    End If 
    'etc... avec 8,9, 10 ...
    End Sub


    Sachant qu'il y a 4 groupes d'options qui sont respectivement
    3,4, 5
    8,9, 10
    14,15, 16
    19,20, 21

    A tester
    Cordialement,
    0
  4. guigol Messages postés 66 Statut Membre 1
     
    Ca marche chez toi?
    Parce que chez moi, non.

    Lorsque j'exécute pas à pas les 2 sub successivement, il :
    _____ exécute Degrouper() sans problème (et les groupes sont bien dégroupés)
    _____ bloque sur le if en indiquant "L'élément portant ce nom est introuvable"

    De plus, ma feuille étant protégé par mot de passe (que je connais) il faut que je trouve la ligne de code à ajouter pour la débloquer avant de commencer à dégrouper.

    J'édite mon message.
    Après avoir fait tourner tes 2 subs (et ou ca plante a la deuxième), je suis retourné sur mon fichier.
    je me rends compte qu'il y a des zones de groupe (22, 30, 37, 42) qui restent.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour à tous,

    Ta question m'a intéressé.
    Je n'ai pas réussi non plus à tester les boutons sans dégrouper.
    Une proposition qui ramène l'adresse des cellules avec un radio button actif :
    Dim groupe As Shape, opt As Object, adr As String
    For Each groupe In ActiveSheet.Shapes
        If groupe.Type = msoGroup Then groupe.Ungroup
    Next groupe
    For Each opt In ActiveSheet.Shapes
        If opt.FormControlType = xlOptionButton Then
            adr = opt.TopLeftCell.Address
            If opt.ControlFormat = 1 Then MsgBox (adr & ", ligne " & Split(adr, "$")(1) & ", colonne " & Split(adr, "$")(2))
        End If
    Next opt
    

    Selon la ligne et colonne tu peux choisir le traitement à effectuer

    eric
    0
  7. guigol Messages postés 66 Statut Membre 1
     
    Effectivement. cela fonctionne.

    Merci beaucoup.
    0