[Catégorie modifiée VB6 --> VBA] évènement dans UserForm dans Excel

Résolu
biopikachu Messages postés 7 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 19 août 2010 - 16 août 2010 à 13:25
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 19 août 2010 à 16:57
bonjour,

Après avoir parcouru plein de forums, je me résous à poster car aucune des solutions proposées n'a fonctionné...

Voici le problème: j'ai un UserForm avec des boutons radio. Je voudrais que quand on répond "non" ou "oui" à une des questions, cela désactive certains groupes de boutons.
J'ai fait plusieurs essais, mais au moment où je clique, rien ne se passe, c'est comme si l'évènement "click" n'était pas détecté.

Ce n'est pas mon premier formulaire, mais comme mes connaissances en vba sont limitées, j'ai besoin d'aide!!

Voici mon code:
Sub encodage()
Load FormFEI
FormFEI.Show

'*sélection de la cellule A1:
Range("A1").Select

'*renvoi du pointeur de cellule sur la dernière cellule occupée:
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select

'* réponse à la question 1 dont la variable associée est NUMFICHE sur la feuille xls
ActiveCell.Value = FormFEI.NUMFICHE

'*réponse à la question 5 dont la variable associée est EIG sur la feuille xls
ActiveCell.Offset(0, 1).Range("A1").Select
If FormFEI.EIGoui.Value True Then EIG "OUI"
If FormFEI.EIGnon.Value True Then EIG "NON"
ActiveCell.Value = EIG

'*réponse à la question 6 dont la variable associée est EIS sur la feuille xls
ActiveCell.Offset(0, 1).Range("A1").Select
If FormFEI.EISoui.Value = True Then Call grise_soins((FormFEI), (att3), (Frame1))
If FormFEI.EISoui.Value True Then EIS "OUI"
If FormFEI.EISnon.Value True Then EIS "NON"
ActiveCell.Value = EIS

'* La boîte de dialogue est déchargée de la mémoire et disparaît
Unload FormFEI
End Sub

Sub grise_soins(FormFEI As UserForm, att3 As Frame, Frame1 As Frame)

Dim Ctrl As Control
For Each Ctrl In att3.Controls
             If Ctrl.Name = EISoui Then
             If EISoui.OptionButton True Then GroupName.PATIENT.Enable False
            
End If
Next
End Sub

12 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
18 août 2010 à 18:09
Tu prends un classeur tout neuf.
Un UserForm dans lequel tu mets 2 Frames que tu nommes :FrameEIG et FrameEIS
Dans chacune de ces 2 Frames tu mets 2 OptionButton nommé:
Dans la FrameEIG: :EIGnon et EIGoui
Dans la FrameEIS :EISnon et EISoui
Tu cliques sur EISnon et mets ce code:
FrameEIG.Visible = False
Tu cliques sur EISoui et mets ce code:
FrameEIG.Visible = True
Ensuite tu compiles et cliques sur EISnon
la FrameEIG devient invisible
Tu cliques sur EISoui et elle redevient visible
Cela devrait fonctionner, c'est tout simple!!!!
Le Pivert
3
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
16 août 2010 à 13:42
Bonjour,
Je ne me suis pas penché sur le code, mais si vous voulez que l'OptionButton soit True il faut mettre le code suivant:

OptionButton1.Value = True
@+
Le Pivert
0
biopikachu Messages postés 7 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 19 août 2010
16 août 2010 à 14:21
J'ai oublié de préciser que EISoui et EISnon sont mes OptionButton.

Donc oui, j'ai déjà mis cette formule EISoui.Value = True
0
biopikachu Messages postés 7 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 19 août 2010
16 août 2010 à 16:07
mais ca ne marche pas...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
16 août 2010 à 19:09
Je ne comprends pas très bien. J'ai fait ceci qui fonctionne, mais je ne sais pas si c'est cela que vous recherchez:

Private Sub CommandButton1_Click()
ActiveCell.Offset(0, 1).Range("A1").Select
If EIGoui.Value True Then EIG "OUI"
If EIGnon.Value True Then EIG "NON"
ActiveCell.Value = EIG
End Sub
Private Sub EIGnon_Click()
ActiveCell.Offset(0, 1).Range("A1").Select
If EIGnon.Value True Then EIG "NON"
ActiveCell.Value = EIG
End Sub
Private Sub EIGoui_Click()
ActiveCell.Offset(0, 1).Range("A1").Select
If EIGoui.Value True Then EIG "OUI"
ActiveCell.Value = EIG
End Sub


J'ai mis cela dans un bouton par commodité.
@+
Le Pivert
0
biopikachu Messages postés 7 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 19 août 2010
17 août 2010 à 17:55
Merci Pivert pour ta réponse, mais en fait, ce n'est pas exactement ce que je cherche.

EIGoui/EIGnon et EISoui/EISnon sont des OptionButton. Je voudrais que quand par exemple EISoui est coché, d'autres OptionButton se désactivent immédiatement, pas avec l'utilisation d'un Bouton.

Je veux que l'évènement se produise pendant que l'utilisateur est en train de saisir le formulaire. J'ai vu un fichier avec ca mais je n'ai pas réussi à déchiffrer le code trop long et trop complexe pour moi.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
17 août 2010 à 18:40
Mettre ce code dans la Feuille où l'on saisit les données.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 On Error Resume Next
 If Target.Value = "OUI" Then
         UserForm1.EIGoui.Value = True
  UserForm1.EIGnon.Value = False
   End If
If Target.Value = "NON" Then
         UserForm1.EIGoui.Value = False
  UserForm1.EIGnon.Value = True
   End If
End Sub

On saisit "OUI" ou "NON" et l'on clique dessus et l'optionButton correspondant s'active et désactive les autres. Chaque fois que l'on clique sur les saisies les optionButton suivent
Le Pivert
0
biopikachu Messages postés 7 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 19 août 2010
18 août 2010 à 10:17
Merci Pivert, j'ai essayé mais ca ne marche pas...

Je ne suis pas sûre que tu voie vraiment ce que je veux faire, je vais tenter d'être plus précise, peut être que ca permettra également à d'autres de nous aider à trouver la solution.

Mon Userform s'appelle FormFEI. Il comporte une série de questions, dont l'une est:
"S'agit t'il d'un évènement indésirable lié aux soins ?"
Deux réponses possibles à cette question dans des OptionButton, oui et non, nommés chacun EISoui et EISnon.

Pour ce que je veux faire, j'envisage 2 stratégies.
- Soit quand on clique sur EISoui, je voudrais qu'apparaisse immédiatement un nouveau groupe de boutons radio
- Soit quand on clique sur EISnon, je voudrais qu'un groupe de boutons soit désactivé.

P.S: et bien sûr je cherche à comprendre le code, je ne cherche pas bêtement une solution toute faite !!!


Merci d'avance pour votre aide.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
18 août 2010 à 11:23
Je vois un truc tout simple:
2 Frame nommées:
FrameEIG et FrameEIS
Dans ces 2 Frames j'ai mis 2 OptionButton pour l'exemple:
FrameEIG :EIGnon et EIGoui
FrameEIS :EISnon et EISoui
Voici le code tout simple
Private Sub EISnon_Click()
FrameEIG.Visible = False
End Sub
Private Sub EISoui_Click()
FrameEIG.Visible = True
End Sub

On peut mettre aussi
FrameEIG.Enabled = False qui reste visible mais inactive
Si tu veux mettre un OptionButton coché il suffit d'ajouter
EIGoui.Value = True dans ton code
J'espère avoir compris et avoir été assez explicite
@+
Le Pivert
0
biopikachu Messages postés 7 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 19 août 2010
18 août 2010 à 17:54
bonsoir Pivert, et merci de ta patience (et du temps que tu consacres à m'aider !)

J'ai testé (je me suis même créé un petit formulaire simple pour les tests), mais au moment où je clique, rien ne se passe...

Est ce que j'ai oublié une option ou un paramètre quelque part? Parce que ca m'a fait pareil avec toutes les fonctions que j'ai testé (Onfocus etc...)
0
biopikachu Messages postés 7 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 19 août 2010
19 août 2010 à 14:13
MIRACLE, CA MARCHE !!! Merci encore pour tout Pivert...

Par contre, si ma joie est contenue (sissi!), ca m'ennuie mais je n'ai pas trouvé pourquoi ca ne fonctionnait pas avant.
-parce que je tapais le code dans "module1" sous VBA?
-parce que l'ordre de création des cadres/boutons n'était pas bon?

bref, le principal c'est que ca marche, maintenant il me reste à trouver pourquoi lol !!
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
19 août 2010 à 16:57
Si tu avez mis cela dans un module il faut appeler ton controle avec le nom de l'UserForm devant.
Mais ton ton cas cela n'est pas possible car les OptionButton sont activés depuis ton UserForm, donc le code est dans l'UserForm
Si tu veux mettre des OptionButton sur ta feuille le code se fera depuis ta feuille.
@+
Le Pivert
0
Rejoignez-nous