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

Résolu/Fermé
Signaler
Messages postés
65
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
30 janvier 2019
-
Messages postés
65
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
30 janvier 2019
-
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

Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
624
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,
Messages postés
65
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
30 janvier 2019
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?
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
624
C'est OK on peut acceder au fichier.
Je me penche sur le sujet et je reviens...
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
624
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,
Messages postés
65
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
30 janvier 2019
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.
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 981
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
Messages postés
65
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
30 janvier 2019
1
Effectivement. cela fonctionne.

Merci beaucoup.