IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Cases à cocher utilisées comme des radio buttons (1 case cochable par groupe)


Sujet :

VBA Word

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    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
    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

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  5. #5
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Pour voir si mon code est executé, je l'ai modifié avec une msgBox comme tu m'as dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Librairie Niceforms - décalage des radio button
    Par lcf84 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 08/01/2009, 19h54
  2. fonction boucle des radio buttons qui ne reconnait pas le dernier radio
    Par mystro7200 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 15/09/2008, 14h06
  3. Case à cocher et suppression des enregistrements
    Par zizou86 dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2008, 17h55
  4. manipulation des radio button
    Par kris1 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 08/11/2007, 11h52
  5. Probleme avec des Radio Button
    Par beb30 dans le forum MFC
    Réponses: 7
    Dernier message: 15/05/2006, 23h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo