XL 2016 groupe de trois boutons options

sebastaupole

XLDnaute Nouveau
bonjour je recherche un code pour un groupe de trois boutons d'options j'ai celui la avec la fonction IIF mais bien sur il ne sert que pour deux boutons pouvez vous m'aider svp
.Cells(RecordNumber, 11) = IIf(Me.OPTComAlu = True, "COM", "VAL", "Lit")
 

sebastaupole

XLDnaute Nouveau
Re
bon j'avais pas bien vu mais c'est du pareil au même
tu a 3 valeur pour une cellule
ça tombe bien des groupe d'optionbutton sont dans des frames

donc pour la demo j'ai supprimé tout le code de l'userform

j'ai renommé les frames avec la lettre de la colonne correspondante au tableau la frame alubrut devient "K" , la frame alu divers devient"L" ,etc.....
après tes 3 option dans chaque frames ont respectivement comme tabindex 0 pour lit ,1 pour val , 2 pour com

parti de la c'est tres simple


VB:
 Option Explicit
Private Sub cboMember_Click()
    updateoptionbutton
End Sub

Private Sub UserForm_Activate()
    Dim rng
    Set rng = PLAN.[A2].CurrentRegion.Offset(1)
        With cboMember
            .List = rng.Value
            .ColumnCount = rng.Columns.Count
            .ColumnWidths = "0;200;0;0;0;0;0;0;0"
        End With
  
End Sub
Sub updateoptionbutton()
    Dim Ligne&, cel As Range, nom$, i&, c&
    Ligne = cboMember.ListIndex + 2
    For c = 11 To 19
        Set cel = PLAN.Cells(Ligne, c)
        nom = Split(cel.Address, "$")(1)
        i = Switch(cel.Value = "COM", 2, cel.Value = "VAL", 1, cel.Value = "Lit", 0)
        Me.Controls(nom).Controls(i) = True
    Next
End Sub

regarde tes optionbutton ;)

Regarde la pièce jointe 1045504
Bonjour c'est beaucoup plus clair moi je m’entêtait avec UCase(.Cells(RecordNumber, bon après j'ai beaucoup a apprendre en tout cas merci pour votre aide
 

sebastaupole

XLDnaute Nouveau
Bonjour,

Fait à partir d'un programme générique qui traite tous les champs du formulaire


VB:
Private Sub b_valid_Click()
  If Me.Affaire = "" Or ligneEnreg = 0 Then Exit Sub    ' adapter
'---- contrôles particuliers
'----
  If MsgBox("Etes-vous certain de vouloir modifier?", vbYesNo, "Demande de confirmation") = vbYes And ligneEnreg > 1 Then
        For Each c In Me.Controls
          nom_control = c.Name
          If nom_control <> "CléCherchée" And nom_control <> "Enreg" Then
            col = Application.Match(nom_control, [titre], 0)
            If Not IsError(col) Then
              Select Case TypeName(c)
                Case "TextBox", "ComboBox"
                  tmp = Me(nom_control)
                  If IsNumeric(tmp) Then
                    If InStr(tmp, " ") > 0 Then tmp = "'" & tmp Else tmp = CDbl(tmp)
                  End If
                  If IsDate(tmp) Then tmp = CDate(tmp)
                  f.Cells(ligneEnreg, col) = tmp
                Case "CheckBox"
                   tmp = Me(nom_control)
                   f.Cells(ligneEnreg, col) = tmp
                Case "Frame"
                  tmp = ""
                  For Each opt In c.Controls
                    If opt.Value Then tmp = opt.Caption
                  Next opt
                  f.Cells(ligneEnreg, col) = tmp
                 End Select
              End If
           End If
      Next c
      raz
      UserForm_Initialize
      ligneEnreg = f.[a65000].End(xlUp).Row + 1
  End If
End Sub

Boisgontier
Merci beaucoup je vais regarder le code et essayé de bien comprendre
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Une autre façon plus classique


VB:
Private Sub B_validation_Click()
  If Me.textbox2 = "" Then
     MsgBox "Saisir une affaire"
     Me.textbox2.SetFocus
     Exit Sub
  End If
  '--- Transfert Formulaire dans BD
     Me.enreg = ligneEnreg
   For i = 1 To 8
     If IsNumeric(Me("textbox" & i)) Then
       f.Cells(ligneEnreg, i) = Val(Me("textbox" & i))
     Else
       f.Cells(ligneEnreg, i) = Me("textbox" & i)
     End If
   Next i
   '-- groupes
   For i = 1 To 9
     temp = ""
     For Each c In Me("groupe" & i).Controls
       If c.Value = True Then temp = c.Caption
     Next c
     f.Cells(ligneEnreg, i + 10) = temp
   Next i
End Sub

Boisgontier
 

Pièces jointes

  • FormGroupesOptions.xlsm
    154.2 KB · Affichages: 5
Dernière édition:

sebastaupole

XLDnaute Nouveau
Une autre façon plus classique


VB:
Private Sub B_validation_Click()
  If Me.textbox2 = "" Then
     MsgBox "Saisir une affaire"
     Me.textbox2.SetFocus
     Exit Sub
  End If
  '--- Transfert Formulaire dans BD
     Me.enreg = ligneEnreg
   For i = 1 To 8
     If IsNumeric(Me("textbox" & i)) Then
       f.Cells(ligneEnreg, i) = Val(Me("textbox" & i))
     Else
       f.Cells(ligneEnreg, i) = Me("textbox" & i)
     End If
   Next i
   '-- groupes
   For i = 1 To 9
     temp = ""
     For Each c In Me("groupe" & i).Controls
       If c.Value = True Then temp = c.Caption
     Next c
     f.Cells(ligneEnreg, i + 10) = temp
   Next i
End Sub

Boisgontier
le code a totalement changé, donc en utilisant "=c.Caption" cela reprend les valeurs du caption des parametres pour le mettre dans la cellule suivant le choix voulu, je suis novice j'essaye de comprendre et glane des codes ici et la, c'est pas facile mais ça m’intéresse beaucoup
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonsoir,

>le code a totalement changé, donc en utilisant "=c.Caption" cela reprend les valeurs du caption des parametres pour le mettre dans la cellule suivant le choix voulu, je suis novice j'essaye de comprendre et glane des codes ici et la, c'est pas facile mais ça m’intéresse beaucoup

Voici un exemple simple: Quelque soit le nombre d''options, le code reste inchangé.

VB:
   '-- Civilité
   temp = ""
   For Each c In Me.Civilité.Controls
     If c.Value = True Then   temp = c.Caption
   Next c
   f.Cells(ligneEnreg, 2) = temp

Sans titre.png


Boisgontier
 

Pièces jointes

  • Copie de FOrmModifCreation-2.xls
    85 KB · Affichages: 7
Dernière édition:

sebastaupole

XLDnaute Nouveau
re

essaie celui la ;)
super, merci pour le travail fourni, j'ai eu plusieurs proposition et toute différente pour le même résultat je suis débutant et le vba m'interresse beaucoup j'essaye de comprendre mais c'est pas toujours facile surtout quand je vois que pour une utilisation il y a plusieurs façon de faire, j'aimerai savoir a quoi correspond ce bout de code placé dans le formulaire
Function ok()
ok = t2 <> "" And t3 <> "" And t4 <> "" And t5 <> "" And t8 <> "" And t6 <> "" And t7 <> ""
ok = ok And Len(K.Tag & L.Tag & M.Tag & N.Tag & O.Tag & P.Tag & Q.Tag & R.Tag & S.Tag) = 27
End Function

merci pour l'aide que vous m'avez apporté.
 

patricktoulon

XLDnaute Barbatruc
re


t2 , t3 , t4 , t5 , t8 sont les text box
t7 et t6 sont les combobox

pour ne pas generer d'erreur ou des enregistrement a moitié on control que tout soit duement remplie
alors
ca
VB:
ok = t2 <> "" And t3 <> "" And t4 <> "" And t5 <> "" And t8 <> "" And t6 <> "" And t7 <> ""
ca se traduit parok= t1 à t8 qui ne sont pas vides donc si c'est tout rempli ok=true



comme dans le clic des optionsbutton le parent.tag reçoit le caption (com , val ou lit)quand il est true on a plus qu'a contrôler les tag des frames parent des options
pour cela les valeurs réunies doivent faire 27 caractères
donc maintenant je rajoute a ok le contrôle que tout les groupes ont un option choisi

ok = ok And Len(K.Tag & L.Tag & M.Tag & N.Tag & O.Tag & P.Tag & Q.Tag & R.Tag & S.Tag) = 27

donc si l'un d'entre eux n'est pas rempli ou coché pour les optionbutton ok sera false sinon true

et après
si ok on inscrit la nouvelle ligne ou modifie une ligne si c'est le bouton modifier et si PAS OK on a le msgbox

c'est ce que l'on appelle des additions logiques truc =condition1 et condition2 et condition3 et etc.....
on s'en sert pour une variable boolean OK sera true ou false

en gros on rassemble toutes condition en une seule


un exemple simple
Code:
sub test()

a=10

b=20

c=25

ok=a<20 and b<20 and c<20

msgbox ok 'le msgbox devrait renvoyer false  car l'un d'entre eux est plus grand que 20



'maintenant

a=10

b=15

c=18

ok=a<20 and b<20 and c<20

msgbox ok 'le msgbox devrait renvoyer true car il sont tous en dessous de 20

end sub

les operateurs des additions logiques sont :
And ceci =et ceci
Or ceci= ou ceci
Xor ceci =et/ou ceci
et les composé
Or not ceci = ou pas(ceci)
And not cela= et pas (cela)

selon ton besoins tu peux jouer avec
 
Dernière édition:

sebastaupole

XLDnaute Nouveau
re


t2 , t3 , t4 , t5 , t8 sont les text box
t7 et t6 sont les combobox

pour ne pas generer d'erreur ou des enregistrement a moitié on control que tout soit duement remplie
alors
ca
VB:
ok = t2 <> "" And t3 <> "" And t4 <> "" And t5 <> "" And t8 <> "" And t6 <> "" And t7 <> ""
ca se traduit parok= t1 à t8 qui ne sont pas vides donc si c'est tout rempli ok=true



comme dans le clic des optionsbutton le parent.tag reçoit le caption (com , val ou lit)quand il est true on a plus qu'a contrôler les tag des frames parent des options
pour cela les valeurs réunies doivent faire 27 caractères
donc maintenant je rajoute a ok le contrôle que tout les groupes ont un option choisi

ok = ok And Len(K.Tag & L.Tag & M.Tag & N.Tag & O.Tag & P.Tag & Q.Tag & R.Tag & S.Tag) = 27

donc si l'un d'entre eux n'est pas rempli ou coché pour les optionbutton ok sera false sinon true

et après
si ok on inscrit la nouvelle ligne ou modifie une ligne si c'est le bouton modifier et si PAS OK on a le msgbox

c'est ce que l'on appelle des additions logiques truc =condition1 et condition2 et condition3 et etc.....
on s'en sert pour une variable boolean OK sera true ou false

en gros on rassemble toutes condition en une seule


un exemple simple
Code:
sub test()

a=10

b=20

c=25

ok=a<20 and b<20 and c<20

msgbox ok 'le msgbox devrait renvoyer false  car l'un d'entre eux est plus grand que 20



'maintenant

a=10

b=15

c=18

ok=a<20 and b<20 and c<20

msgbox ok 'le msgbox devrait renvoyer true car il sont tous en dessous de 20

end sub

les operateurs des additions logiques sont :
And ceci =et ceci
Or ceci= ou ceci
Xor ceci =et/ou ceci
et les composé
Or not ceci = ou pas(ceci)
And not cela= et pas (cela)

selon ton besoins tu peux jouer avec
Bonjour merci je comprend mieux, souvent se qui est dommage sur les sites qui parle de code VBA ils donnent des exemples sans vraiment approfondir les explications ce qui n'est pas évident a déchiffrer, en tout cas merci beaucoup et je garde excel-downloads sous le coude.
 

Discussions similaires

Statistiques des forums

Discussions
312 205
Messages
2 086 199
Membres
103 156
dernier inscrit
Ludo94130