Gestion des OptionButton "intelligente"

ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012 - 27 sept. 2012 à 21:19
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 28 sept. 2012 à 12:54
Bonsoir a toutes et a tous,

Je travaille sur un code que je peaufine au fur et a mesure depuis quelques mois pour arriver au code ultime de saisie par userform. il marche déjà très très bien MAIS !
J'aimerais pouvoir différencier le traitement des Optionbutton par rapport aux CheckBox et TextBox.
Je m'explique et vous colle mon code après : je réccupère a la fin du code une colone par controle, et c'est embetant quand on a des optionsbuttons, le but est d'en retirer qu'une seule réponse.
Plutot que d'avoir en colonne OptionButton1 = vrai et optionbutton2=faux je veux que le résultat apparaisse dans une seule colonne en OptionButton1.caption.

J'espère ne pas etre trop flou... et maintenant voici le code :
Private Sub CommandButton1_Click()

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
'  Améliorer les réponses en OptionButton   *
'      pour la suite du developpement       -
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-


Dim MesFrames As New Collection, MesTexts As New Collection
Dim CtrlForm As Control, CtrlFrame As Control
Dim Num As String
Dim b As Integer, i As Byte, j As Byte, Temp As Integer, Ligne As Integer

Ligne = ThisWorkbook.Worksheets("Base").Range("A65536").End(xlUp).Row + 1


'compte page
For Each Page In MultiPage1.Pages
    'compte frame
    For Each CtrlForm In Page.Controls
        If TypeName(CtrlForm) = "Frame" Then
            i = i + 1
            Num = CStr(CtrlForm.TabIndex + iprime)
            MesFrames.Add Item:=CtrlForm, Key:=Num
        End If
        'MsgBox MesFrames.Item(CStr(0)).Name
    Next CtrlForm
    iprime = i
Next Page


For j = 0 To i - 1
    Dim FrameActive As Object
    Set FrameActive = MesFrames.Item(CStr(j))
    
    'compte textbox ou optionbutton
    For Each CtrlFrame In FrameActive.Controls
        If TypeName(CtrlFrame) "TextBox" Or TypeName(CtrlFrame) "CheckBox" Or TypeName(CtrlFrame) = "OptionButton" Then
            Num = CStr(CtrlFrame.TabIndex + 1)
            MesTexts.Add Item:=CtrlFrame, Key:=Num
        End If
    Next CtrlFrame
    
    For Temp = 1 To MesTexts.Count
        b = b + 1
        If b < 248 Then ThisWorkbook.Worksheets("Base").Cells(Ligne, b) = MesTexts.Item(CStr(Temp)).Value
        If b > 247 Then ThisWorkbook.Worksheets("Base2").Cells(Ligne, b - 247) = MesTexts.Item(CStr(Temp)).Value
    Next Temp

    'Del collec text
    For Temp = 1 To MesTexts.Count
        MesTexts.Remove 1
    Next Temp
Next j

'Del Collec Frame
For Temp = 1 To MesFrames.Count
    MesFrames.Remove 1
Next Temp

RAZ

End Sub


*(RAZ est une sub de remise a zéro du form...)

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 sept. 2012 à 21:29
Avant d'aller plus loin :
ce qui serait "intelligent", déjà, serait d'ouvrir tes discussions dans la section correspondant à ton langage de développement.
Non, tu ne développes pas dans :
Forum > VB.NET et VB 2005

Je ne veux par ailleurs pas commenter (je préfère m'abstenir) ce que tu as compris du rôle des optionbuttons (ton texte) et du mécanisme qui les régit).
Et confondre avec des checkboxes -le code montré) l'est encore plus
C'est inquiétant !
Je te suggère donc de :
- ouvrir une nouvelle discussion dans la section Langages dérivés > VBA
- apporter le plus grand soin à tes explications, à leur clarté et à leur "harmonie" avec le code montré.
Il n'est jamais trop tard pour réellement s'y mettre, hein !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012
27 sept. 2012 à 21:34
Ok pour le mauvais emplacement de la discussion, je n'avais pas vu.
Par contre je ne confond rien du tout, dans mon code justement je n'arrive pas a séparer la gestion des optionbutton du reste c'est pour ça qu'il est pas au top, et c'est même ce pourquoi j'ai créé le sujet...
Si tu veux aider je t'écoute volontiers mais si tu as décidé de passer tes nerfs, passe ton chemin !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 sept. 2012 à 21:37
Désolé, mais je ne peux aider qu'en "osmose". Elle n'est pas présente et je suis fatigué<.
Ne t'inquiète pas : un autre prendra le relais.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 sept. 2012 à 10:04
Pour que tu comprennes mieux de quoi je veux parler, lorsque j'utilise certains termes, dont "osmose", je vais t'aider en te demandant de faire ce tout petit test qui, lui, n'utilise que des notions de base :
For Each c In Me.Controls
   If TypeName(c.Parent) = "Page" Then
     MsgBox c.Name & " est un contrôle " & TypeName(c) & " posé sur la page " & c.Parent.Name & vbCrLf
   End If
 Next

Cela devrait te mettre sur la voie de la sagesse... et de revoir toute ta gymnastique.
Bonne chance


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 sept. 2012 à 10:37
Ah oui, tu as également à recenser ce qui se trouverait dans des Frames sur tes pages ?
Alors on continue un peu plus loin le test :
For Each c In Me.Controls
   If TypeName(c.Parent) = "Page" Then
     MsgBox c.Name & " est un contrôle " & TypeName(c) & " posé sur la page " & c.Parent.Name
     If TypeName(c) = "Frame" Then
       For Each sousc In c.Controls
         MsgBox "et ce Frame " & c.Name & " contient le contrôle " & TypeName(sousc) & " nommé " & sousc.Name
       Next
     End If
   End If
 Next

Si tu ne sais pas comprendre et utiliser à ta guise tout cela ... ===>> ("")


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012
28 sept. 2012 à 12:53
Bien, je connais tes deux bouts de code et il se trouve que ca ne m'aide pas.
J'ai posté sur ce forum pour avoir de l'aide pas pour me faire descendre. aide moi ou arrete de poster sur mes discutions merci.
(Vu la qualité de ton aide je préfèrerai d'ailleurs que tu arrete de poster tout simplement sur mes discutions)
Je poste pas sur un forum pour passer pour un abruti, merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 sept. 2012 à 12:54
Amen, donc
Bonne chance.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous