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 -
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
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
-
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, -
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? -
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, -
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -