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

Macros et VBA Excel Discussion :

Garder l'état d'un OptionButton dans un UserForm [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut Garder l'état d'un OptionButton dans un UserForm
    Bonjour à toutes et à tous,

    Afin de garder l'état visuel de ce qui a été choisi avant, j'ai écrit un code me permettant de garder la valeur du choix précédent dans mon UserForm.
    Pour cela je vais chercher la valeur oui ou non.
    Mon soucis est que en fait cette valeur ne s'incrémente pas dans les Cellules BD1 et BD2 et donc du fait forcement, la sélection effectué au paravent n'est pas gardé en mémoire !

    Par contre la copie d'une feuille à l'autre que je lui indique dans la suite s'effectue sans aucun problème.

    J'ai beau lire et relire mon code je ne trouve pas ou j'ai loupé quelque chose.
    Si quelqu'un peut m'aider je l'en remercie par avance

    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
     Sub UserForm5_Initialize() 'Valeurs initiales des cases à cocher
        If Range("BD2") = "oui" Then
            OptionButton1.Value = True
        End If
     
        If Range("BD1") = "oui" Then
            OptionButton2.Value = True
        End If
    End Sub
     Sub OptionButton1_Click() 'N°1
        If OptionButton1.Value = True Then 'Si coché ...
            Sheets("masque").Range("BD2") = "oui"
        Else 'Si non coché ...
            Sheets("masque").Range("BD2") = "non"
        End If
    End Sub
     Sub OptionButton2_Click() 'N°2
        If OptionButton2.Value = True Then 'Si coché ...
            Sheets("masque").Range("BD1") = "oui"
        Else 'Si non coché ...
            Sheets("masque").Range("BD1") = "non"
        End If
    End Sub
     Sub CommandButton1_Click() 'validation de la selection du format horaire
      If OptionButton1.Value = True Then
    Sheets("masque").Range("A2:DA2").Copy Destination:=Sheets(1).Range("D3:DD3")
     
    Else
      End If
        Unload Me
     
        If OptionButton2.Value = True Then
    Sheets("masque").Range("A1:DA1").Copy Destination:=Sheets(1).Range("D3:DD3")
     
    Else
       End If
    Unload Me
    End Sub
     
    Private Sub CommandButton2_Click() ' annulation de la selection du format horaire
    Unload Me
    End Sub
    Très cordialement
    Scoubi

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour,

    ben déjà à certains endroit tu précise la feuille de calcul devant range à d'autre non ....mieux vaux TOUJOURS préciser la feuille concerné devant un objet range pour éviter d'avoir un problème ..(aujourd'hui ou plus tard..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If ThisWorkbook.Sheets("masque").Range("BD2") = "oui" Then
    mais déjà tu aurais pu contrôler :

    - les valeurs "oui" ou "non" sont-elles écrites dans ta feuille ?
    - si tu modifie "manuellement" les valeurs "oui" ou "non" cella est pris en compte par ton userform ?

    histoire de savoir si c'est ton écriture ou ta lecture qui cause problème ..

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Bonsoir et merci pour ta réponse,

    Effectivement j'ai bien vérifié avant de poster, j'ai bien écrit non et non respectueusement dans les Cellules correspondantes au préalable.
    Si je coche une case dans l'userform la valeur oui ou non n'est pas changée dans la Cellule correspondante.
    Si je change manuellement la valeur l'UserForm n'affiche aucune Sélection

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    As tu rajouté feuille et classeur devant tes objets Range ???



    Pour ce qui est des événements d'userform, il ne faut pas les renommer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sub UserForm5_Initialize()
    enlève le 5 !

    pour éviter les erreurs le mieux c'est de ne jamais saisir les noms de procédures événementielles , mais tu les choisi simplement dans les deux combobox au dessus de ta page de code .

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Je viens de renommer et enlever le UserForm5, voici mon code modifié selon tes instructions :

    Par contre le fait de ne pas nommer l'userform n'est-il pas gênant vis à vis des quatres autres ?

    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
    Private Sub UserForm_Initialize() 'Valeurs initiales des cases à cocher
        If Range("BD2") = "oui" Then
            OptionButton1.Value = True
        End If
     
        If Range("BD1") = "oui" Then
            OptionButton2.Value = True
        End If
    End Sub
    Private Sub OptionButton1_Click() 'N°1
        If OptionButton1.Value = True Then 'Si coché ...
            ThisWorkbook.Sheets("masque").Range("BD2") = "oui"
        Else 'Si non coché ...
            ThisWorkbook.Sheets("masque").Range("BD2") = "non"
        End If
    End Sub
     Private Sub OptionButton2_Click() 'N°2
        If OptionButton2.Value = True Then 'Si coché ...
            ThisWorkbook.Sheets("masque").Range("BD1") = "oui"
        Else 'Si non coché ...
            ThisWorkbook.Sheets("masque").Range("BD1") = "non"
        End If
    End Sub
     Private Sub CommandButton1_Click() 'validation de la selection du format horaire
        'Application.ScreenUpdating = False
      If OptionButton1.Value = True Then
    ThisWorkbook.Sheets("masque").Range("A2:DA2").Copy Destination:=ThisWorkbook.Sheets(1).Range("D3:DD3")
     
    Else
      End If
        Unload Me
     
        If OptionButton2.Value = True Then
    ThisWorkbook.Sheets("masque").Range("A1:DA1").Copy Destination:=ThisWorkbook.Sheets(1).Range("D3:DD3")
     
    Else
       End If
    Unload Me
    End Sub
     
    Private Sub CommandButton2_Click() ' annulation de la selection du format horaire
    Unload Me
    End Sub

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu as bien mis ce code dans la page de code de l'userform ??? chaque userform à sa page de code...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Affirmatif, j'affiche le code en cliquant sur le bouton ok de l'userform (5 )

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    et vu que ces des options boutons .. tu n'as besoin que d'une seule case pour mémoriser l'état ... et tu dois mettre à jour cette case (cellule) sur les 2 clics option bouton...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    C'est à dire, je ne te comprends pas ?
    J'ai deux option boutons et deux Cellules !

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est à dire, je ne te comprends pas ?
    J'ai deux option boutons et deux Cellules !
    Un OptionButton à deux états True ou False donc une seule cellule est suffisante pour lui faire prendre l'état Vrai ou Faux (Oui ou son contraire) sinon il faut prendre un autre contrôle CheckBox
    Et plutôt que d'utiliser un If comme dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Range("A2") = "oui" Then
      OptionButton1.Value = True
     End If
    Utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     OptionButton1.Value = Worksheets("Feuil1").Range("A2") = "oui"
    et comme on est jamais certain que l'utilisateur a écrit le texte (pour ton cas "oui") en minuscule, il est préférable d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     OptionButton1.Value = LCase(Worksheets("Feuil1").Range("A2")) = "oui"
    et de plus pour éviter les espaces intempestifs avant ou après la chaîne de caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     OptionButton1.Value = Trim(LCase(Worksheets("Feuil1").Range("A2"))) = "oui"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Bonjour et merci pour ta réponse,

    Ce n'est pas l'utilisateur qui écrit oui ou non,
    Je voudrais conserver l'état de sélection dans mon userform qui a
    Deux option bouton.
    Donc je me suis dit que si j'écrivais oui ou non je pouvais aller interroger cette Cellule pour récupérer le dernier état afin de l'afficher à l'ouverture suivant de l'userform.
    Mais apparemment j'ai tout faux.
    Je cherche à conserver l'état de sélection pour que l'utilisateur puisse voir ce qui avait été sélectionné avant son intervention.
    J'espère avoir été plus claire sur mon problème.
    Te remerciant

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce n'est pas l'utilisateur qui écrit oui ou non,
    J'utiliserais alors la valeur VRAI ou FAUX qui est une valeur native et sans ambiguïté d'excel.
    Je cherche à conserver l'état de sélection pour que l'utilisateur puisse voir ce qui avait été sélectionné avant son intervention.
    Comme écrit plus haut si c'est un OptionButton, une seule cellule doit suffire (par exemple Est-un homme Oui/Non si c'est non, c'est donc une femme (en tous les cas pour l'instant) donc une seule cellule pourra donner un TRUE ou FALSE.
    Sinon si le choix est multiple, on choisi CheckBox
    Mais bien entendu tu peux prendre une autre voie, chacun est libre
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour,

    tu peu aussi faire sans aucun code ...

    tu supprime ton code ..

    puis tu modifie la propriété ControlSource de chacun de tes option boutons et tu y associe une cellule de ton fichier :

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Re bonjour à vous deux,

    J'ai donc cherché à faire plus simple en écrivant ceci.
    sur le fonctionnement ça marche impec, par contre si je ferme l'userform et que je le réouvre la selection précédente n'est plus sélectée !
    Ce que je cherche à faire.
    Je tourne en rond !!!

    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
      Private Sub CommandButton1_Click() 'validation de la selection du format horaire
        'Application.ScreenUpdating = False
      If OptionButton1.Value = True Then
    ThisWorkbook.Sheets("masque").Range("A2:DA2").Copy Destination:=ThisWorkbook.Sheets(1).Range("D3:DD3")
     
    Else
      End If
        Unload Me
     
        If OptionButton2.Value = True Then
    ThisWorkbook.Sheets("masque").Range("A1:DA1").Copy Destination:=ThisWorkbook.Sheets(1).Range("D3:DD3")
     
    Else
       End If
    Unload Me
    End Sub

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne comprends pas la logique de ta procédure par rapport à tes deux OptionButton.
    Normalement on exécute une action si c'est VRAI et une autre si c'est FAUX même si on ne fait rien et toi tu testes deux contrôles différents au sein d'une même structure décisionnelle.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Je t’explique.

    J'ai un userform
    avec possibilité de copier des Cellules sur une ligne:

    Le premier bouton permet de sélecter cette copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets("masque").Range("A2:DA2").Copy Destination:=ThisWorkbook.Sheets(1).Range("D3:DD3")
    et le deuxième permet de sélecter cette copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hisWorkbook.Sheets("masque").Range("A1:DA1").Copy Destination:=ThisWorkbook.Sheets(1).Range("D3:DD3")
    Et j'ai un commande bouton qui valide et exécute la copie.
    Afin que l'opérateur sache qu'elle procédure est en cours je voudrais qu'il puisse la voir en ouvrant l'userform avant de changer cette dernière !
    afin de ne pas se tromper et enclencher une deuxième fois la même si se n'est pas son souhait
    Tu me comprends ?

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Oui, cela j'ai compris. Je sais lire du code.
    Ce que je ne comprends pas c'est ta logique.
    Est-ce soit l'une ou l'autre copie qui peut être réalisée ? Si oui alors un seul OptionButton est nécessaire ou même un ToggleButton dans le cas contraire c'est un CheckBox qu'il faut utiliser.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  18. #18
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pour les états, sauf grosse bétise de ma part, ça devrai être suffisant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub UserForm_Initialize() 'Valeurs initiales des cases à cocher
        OptionButton1.Value = Feuil1.Range("B1")
        OptionButton2.Value = Feuil1.Range("B2")
    End Sub
    Private Sub UserForm_Terminate()
        Feuil1.Range("B1") = OptionButton1.Value
        Feuil1.Range("B2") = OptionButton2.Value
    End Sub

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Je te remercie infiniment c'est tout à fait évident userform terminate !!
    Je vais essayer cela et te tiens informé un grand merci

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Relis Bbil et Philippe, ils essaient de te faire ouvrir les yeux au delà de la question initiale.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Garder en mémoire les données introduites dans mon userform
    Par thomanneca dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2014, 21h46
  2. Garder la proportionalité de l'image dans un TImage
    Par Bourak dans le forum Composants VCL
    Réponses: 1
    Dernier message: 28/10/2005, 15h03
  3. Réponses: 2
    Dernier message: 21/10/2005, 13h22
  4. Aperçu et impression d'un état Crystal Reports 11 dans VB6
    Par badseyar dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/09/2005, 15h25
  5. [VB.NET] Problème avec un OptionButton dans Excel 2003
    Par alfprod dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/09/2004, 13h40

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