Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/04/2011, 16h20   #1
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Par défaut Cases à cocher utilisées comme des radio buttons (1 case cochable par groupe)

Bonjour,

J'ai besoin de votre aide pour une histoire de cases à cocher.

J'ai un document word où j'ai voulu ajouter des cases à cocher B1C1, B1C2, B1C3, B1C4. Je souhaite qu'une seule case soit cochable à la fois, c’est-à-dire:
- Si B1C1 est cochée, B1C2, B1C3 et B1C4 ne peuvent pas l'être également
- Si B1C2 est cochée, B1C1, B1C3 et B1C4 ne peuvent pas l'être également
- Si B1C3 est cochée, B1C1, B1C2 et B1C4 ne peuvent pas l'être également
- Si B1C4 est cochée, B1C1, B1C2 et B1C3 ne peuvent pas l'être également

Pour ajouter mes cases, j'ai été dans l'onglet "développeur", partie "contrôles", formulaires hérités et j'ai choisi la case à cocher.

J'ai créé 4 cases à cocher. Pour chacune d'entre elles, j'ai rempli de la façon suivante:
- Valeur par défaut = case désactivée
- Executer la macro à la sortie
- Case activée "cochée"
- Signet B1Cn (n=1,2,3,4)
- Macro CheckboxB1Cn (n=1,2,3,4)

J'ai pris la macro dans le tutoriel http://heureuxoli.developpez.com/off...d/formulaires/
J'ai bien protégé le document (restriction pour remplissage de formulaire).

Voici le code:
Code :
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
41
42
43
 
Sub CheckboxB1C1()
    If ActiveDocument.FormFields("B1C1").Result Then
        With ActiveDocument
            .FormFields("B1C2").Result = False
            .FormFields("B1C3").Result = False
            .FormFields("B1C4").Result = False
        End With
    End If
End Sub
 
 
Sub CheckboxB1C2()
    If ActiveDocument.FormFields("B1C2").Result Then
        With ActiveDocument
            .FormFields("B1C1").Result = False
            .FormFields("B1C3").Result = False
            .FormFields("B1C4").Result = False
        End With
    End If
End Sub
 
 
Sub CheckboxB1C3()
    If ActiveDocument.FormFields("B1C3").Result Then
        With ActiveDocument
            .FormFields("B1C1").Result = False
            .FormFields("B1C2").Result = False
            .FormFields("B1C4").Result = False
        End With
    End If
End Sub
 
 
Sub CheckboxB1C4()
    If ActiveDocument.FormFields("B1C4").Result Then
        With ActiveDocument
            .FormFields("B1C1").Result = False
            .FormFields("B1C2").Result = False
            .FormFields("B1C3").Result = False
        End With
    End If
End Sub

Ça ne fonctionne pas.
Etapes:
1. Je coche B1C1
2. Je coche B1C2
=> B1C1 reste cochée
+ B1C2 est décochée
+ B1C3 est cochée
+ B1C4 est cochée


Sauriez vous d'où vient le problème ?
Merci de votre aide.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 18h04   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 322
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 322
Points : 29 223
Points : 29 223
Salut,

C'est l'inconvenient masjeur des champs de formulaire, il faut quitter le champ pour qu'il fonctionne.

Ajoute un champ de formulaire text et si tu vas sur ce champ, la macro sera exécutée.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h18   #3
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Bonjour,

Merci pour ta réponse.

J'ai essayé d'ajouter un champ texte (formulaires hérités - zone d'édition):
1. Je coche B1C1
2. Je coche B1C2
=> B1C1 reste cochée
+ B1C2 est décochée
+ B1C3 est cochée
+ B1C4 est cochée
3. Je vais sur le champ texte
=> rien ne se passe.


Cela étant dit, j'ai ajouté le champ texte pour tester ta solution. Mais à la base dans mon document word, je n'aurai pas de champ texte. C'est juste un tableau de 2 colonnes:
- 1ère ligne, 1ère colonne: aucun champ, case libre d'un tableau normal
- 1ère ligne, 2ème colonne: mes 4 cases à cocher
et ainsi de suite pour toutes les lignes.

Tu me dis
Citation:
C'est l'inconvenient masjeur des champs de formulaire
Est ce que je peux utiliser autre chose que des champs de formulaire ?

C'est la première fois que j'utilise cela sur word, c'était histoire de protéger un peu la saisie.

Merci
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h15   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 322
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 322
Points : 29 223
Points : 29 223
Salut,

Es-tu sur que ton code est exécuté ?

Que se passe-t-il lorsque tu mets un MsgBox dans ta procédure ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 15h17   #5
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Pour voir si mon code est executé, je l'ai modifié avec une msgBox comme tu m'as dit:
Code :
1
2
3
4
5
6
7
8
9
10
Sub CheckboxB1C1()
    If ActiveDocument.FormFields("B1C1").Result Then
        With ActiveDocument
            .FormFields("B1C2").Result = False
            .FormFields("B1C3").Result = False
            .FormFields("B1C4").Result = False
        End With
    End If
    MsgBox "Macro finished."
End Sub
Execution:
1. Je coche B1C1
2. Je coche B1C2
=>
B1C1 reste cochée
+ B1C2 est cochée
+ B1C3 est cochée
+ B1C4 est cochée
3. La boite de dialogue "Macro finished" apparait
4. Je clique ok sur la boite de dialogue => B1C2 se décoche.






Je viens de faire d'autres tests. J'ai l'impression que c'est result=false qui ne passe pas.
Voici mon code test:
Code :
1
2
3
4
5
6
7
8
 
'cette macro est exécutée à la sortie de B1C2
Sub CheckboxB1C2()
    If ActiveDocument.FormFields("B1C2").Result = True And ActiveDocument.FormFields("B1C1").Result = True Then
        MsgBox "Macro finished."
        ActiveDocument.FormFields("B1C1").Result = False
    End If
End Sub
Execution:
1. Je coche B1C1
2. Je coche B1C2
3. Je coche B1C3 /* pour sortir de B1C2 */
=>
B1C1 reste cochée
+ B1C2 est cochée
+ La boite de dialogue "Macro finished" apparait
3. Je clique ok sur la boite de dialogue => B1C3 se coche.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h27.


 
 
 
 
Partenaires

Hébergement Web