Synthaxe "OptionButton" en VBA Ecel?

Résolu
Furtif Messages postés 9956 Statut Contributeur -  
Furtif Messages postés 9956 Statut Contributeur -
Bonjour,

Voilà, c'est tout bète ... j'ai fait mon user form avec (entre autres) 4 boutons dont le 1er est présélectionné (true), mais je ne me souviens plus de la synthaxe de code VBA pour positionner une variable en fonction du bouton sélectionné : ex :

Bouton A .... toto
Bouton B .... bidule
Bouton C .... machin
Bouton D .... truc

je voudrai donc :
if OptionButton A = true, nom = toto
if OptionButton B = true, nom = bidule
etc ..
endif

à vous lire ... merci ....
--

*** @+ / Furtif ***
*** J'aime l'épicure ! ***
Configuration: Windows XP
Internet Explorer 7.0

10 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    C'est la propriété .value :
    if OptionButtonA.value = true then nom = toto

    eric
    1
    1. Furtif Messages postés 9956 Statut Contributeur 933
       
      Merci à toi ... c'est bète, je butais là-dessus ... Grand merci.
      0
  2. Furtif Messages postés 9956 Statut Contributeur 933
     
    Up ... merci
    0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    De rien..
    Bonne continuation :-)
    0
  4. Furtif Messages postés 9956 Statut Contributeur 933
     
    Bonjour

    Bon, je me suis emballé un peu vite. Je n'arrive pas à récupérer la variable. J'explique (mieux) :

    J'ai regroupé mes OptionButton dans un Frame :
    Private sub frame2_click()
    if optionbutton1.value = true then Nom=toto
    if optionbutton2.value = true then Nom=tata
    if optionbutton3.value = true then Nom=titi
    end if
    end sub

    puis plus loin

    Private sub
    Cells(LigneSuivante, 1 ... jusqu'à 5) ... = Variable.text .... ça me recopie ce que j'ai inscrit dans mes TextBox 1 à 5
    Cells(LigneSuivante, 6) = Ville.text
    Cells(LigneSuivante, 7) = Nom.Text ............ je souhaite récupérer la valeur de la variable Nom et la placer dans une cellule (ça fonctionne déjà avec les autres variables "textes")

    etc ....

    Mais ça me répond systématiquement pour cette variable Nom : Variable non définie.

    Et là, novice en VBA, je sèche ... merci de votre aide.

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

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Si c'est une variable il faut juste l"appeller par son nom sans rien ajouter.
    Cells(LigneSuivante, 7) = Nom
    Mais tout dépend de sa portée, il faut qu'elle soit déclarée dans un module en dehors de toute procédure pour être visible partout. Consulte l'aide excel si veux plus de détail sur la portée et la durée de vie d'une variable.

    eric
    0
  7. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 565
     
    Bonjour Furtif

    Pour des optionbuttons dans un frame, je ferais une boucle comme ceci :

    For Each p In Me.frame2.Controls
    If p.Value = True Then resultat = p.Caption
    Next p

    C'est plus clean qu'une suite de IF...

    Ensuite, tu peux mettre ta variable "resultat" dans ta cellule :

    Cells(LigneSuivante, 7) = resultat

    m@rina
    0
    1. Furtif Messages postés 9956 Statut Contributeur 933
       
      Bonjour

      J'ai essayé vos 2 méthodes mais ça ne fonctionne pas.

      Je les ai d'abord déclaré dans un private sub, puis, sans succés, je les ai déplacé dans la la private sub qui remplit les cellules ... ça ne marche pas non plus.

      Dans la solution de m@rina, ça bloque sur le "p"
      Dans l'autre solution il ne veut pas prendre ma variable resultat

      Je n'y comprend rien. ça semble bien compliqué pour un malheureux OptionButton.

      0
      1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281 > Furtif Messages postés 9956 Statut Contributeur
         
        Bonsoir furtif,

        J'avais lu un peu vite sans remonter le fil et j'ai répondu juste à ton pb de variable.
        Et il y a tellement de possibilité pour faire qcq chose qu'il faudrait je pense reprendre à 0 certains trucs.

        Tu as un formulaire avec des optionbutton, des zones texte et sans doute un bouton ok...
        Ton code tu peux le mettre dans les optionbutton1_click, optionbutton2_click, dans le TextBox1_Change, dans le CommandButtonOK_Click, là tu seras dans ton formulaire et tu n'auras pas besoin de le désigner.

        Tu peux très bien fixer la valeur ta variable nom dans les optionbutton1_click, optionbutton2_click etc, ou bien balayer tes optionbuttonx.value dans le CommandButtonOK_Click et là faire comme marina l'expliquait, eventuellement en testant le type d'objet avec If TypeOf Ctrl Is ... then ... (mais pour ré-utiliser ta variable ailleurs, dans un autre module il faut qu'elle soit publique)

        Si tu désires tester ou utiliser optionbutton1.value ailleurs, dans un module par exemple, il faudra que tu désigne ton formulaire explicitement MsgBox(UserForm1.OptionButton1.Value).

        Pour les variables, si tu la déclares dans une procédure elle ne sera vue que de cette procédure.
        Si tu la déclares en début d"un module (avant le 1er sub) avecv Dim elle sera visible dans toutes les procédure de ce module.
        Si tu la déclares en début d"un module (avant le 1er sub) en en plus que tu la déclares avec Public elle sera vue dans toutes les procédures de tous les modules.

        Maintenant je ne sais pas trop comment tu as déclarer tes variables ni où tu les utilises...
        Et si la variable nom tu ne l'utilises que pour mettre à jour une cellule et qu'elle ne te sert plus ensuite tu peux très bien le faire directement dans les procédures click, change,... des objets de ton formulaire.

        Peut-être qu'avec ces éléments tu y verras plus clair sur la portée des variables si c'était là ton pb.

        eric
        0
      2. Furtif Messages postés 9956 Statut Contributeur 933 > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci de ta réponse ... je regarder tout ça au calme et te tiendrais au courant.
        0
  8. Furtif Messages postés 9956 Statut Contributeur 933
     
    Merci de vos réponses, je vais voir dès que possible, et vous tiens informé.

    Pour "l'aide", j'ai l'impression que c'est mal installé (je l'ai reçu comme ça de mon entreprise), il me demande en permanence de consulter en ligne, ou me renvoie à l'aide Excel mais pas au VBA.
    0
  9. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Pour l'aide va dans le menu aide justement et sélectionne 'option pour les commentaires client...' et dans la catégorie 'contenu en ligne' tu décoches.
    Ce truc m'a fait braire un bon moment avant de trouver par hasard où le désactiver
    Quelle idée de mettre des options dans le menu aide pfffff
    0
    1. Furtif Messages postés 9956 Statut Contributeur 933
       
      Merci, je vais voir ça aussi.

      Dit donc, j'ai un truc qui me chiffone sur Excel 2007 et je voudrai savoir si ce défaut existe aussi chez d'autres :

      Je fais une mise en forme conditionnelle d'une cellule (changement de couleur et de police sur conditions) .. ça n'est traité à l'affichage que si je scrolle ma page jusqu'à faire disparaitre ma cellule, puis scroll inverse .. sinon, la condition n'est pas traitée.
      0
    2. Furtif Messages postés 9956 Statut Contributeur 933
       
      Re

      Je cherche mais ne troupe pas ce que tu m'indiques ... Je suis en Office 2007 / et XP SP2

      Dans Excel, j'ai juste un point d'interrogation en bout de bandeau et rien de ce que tu m'indiques, et dans le helper du menu "Démarrer", je ne trouve pas ton option ...

      Mébon, faut que je vérifie s'ils tout bien installé, j'ai les CD d'origine, je verrai ça plus tard.
      0
      1. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 565 > Furtif Messages postés 9956 Statut Contributeur
         
        Bonjour,

        Concernant l'aide sur le VBA 2007, il est vrai qu'il faut désactiver l'aide en ligne qui est inexistante.
        Clique sur F1 pour afficher l'aide, puis en bas à gauche de la fenêtre d'aide, tu as une liste déroulante : choisis "Afficher un contenu à partir de cet ordinateur uniquement".

        m@rina
        0
      2. Furtif Messages postés 9956 Statut Contributeur 933 > m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci ... mais non, je n'ai pas ce terme sur la liste des diffréents modules d'aide

        Ni sur Excel, ni sur le VBE
        0
      3. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 565 > Furtif Messages postés 9956 Statut Contributeur
         
        Bonsoir,

        Euh... j'ai quelques difficultés avec ma droite et ma gauche !!! :D
        Donc, je rectifie : en bas dans l'angle, à droite...

        Je t'ai mis une capture d'écran ici :
        https://www.cjoint.com/?cwuQYApgV3

        m@rina
        0
  10. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Et oui, ce que je t'ai indiqué c'est sur excel 2003.
    Aucune idée de où ça se trouve sur 2007, désolé.
    Pour ton pb de rafraichissement écran sur 2007 j'ai vu une question à ce sujet il y a qcq temps mais je ne me rappelle pas si c'était sur une MFC.
    eric
    0
  11. Furtif Messages postés 9956 Statut Contributeur 933
     
    Bonsoir

    Alors un grand merci à eriiic et m@rina.

    J'ai déplacé le bloc de sélection OptioButton dans la même sub que la saisie des autres TextBox, et ça marche. Je récupère correctement ma variable.
    Effectivement, les variables déclarées dans un "PrivateSub" ne concernent que celui-ci.

    Bon, je clique en résolu, mais j'aurais certainement encore des questions VBA sur d'autres fonctions .. plus tard ..

    Merci encore
    0