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
Bonsoir le fil

Juste histoire d'ajouter de la variante aux variantes ;)
(aprés IIF, Choose et Switch il restait de la place pour Mid)
VB:
Private Sub CommandButton1_Click()
Cells(1) = Mid("COMVALLit", -((1 * OptionButton1) + (4 * OptionButton2) + (7 * OptionButton3)), 3)
End Sub

Private Sub UserForm_Initialize()
On Error Resume Next
Me("OptionButton" & Application.Match(Cells(1), Array("COM", "VAL", "Lit"), 0)) = True
End Sub
bonjour job75 en faite je vous donne mon code complet il est intégré dans un formulaire qui me sert a écrire, consulter et modifier le contenu de mon tableau quand je veux modifier mes données tous ce remet en place dans mon formulaire ainsi que les boutons d' options "normalement" le problème est que le code est fait pour des groupes de deux boutons actions et que moi j'ai besoin de groupe de trois boutons il me manque plus que cela et j'aurais terminé mon frm et je n'y arrive pas et j'ai besoin de votre aide. Merci d'avance

Private Sub ReadRecord(ByVal RecordNumber As Long)
' Lecture de l'enregistrement
RecordNumber = RecordNumber + 1
With rng
Me.txtAffaire = .Cells(RecordNumber, 2)
Me.txtClient = .Cells(RecordNumber, 3)
Me.txtLivraison = .Cells(RecordNumber, 4)
Me.TxtCouleur = .Cells(RecordNumber, 5)
Me.TxtTemps = .Cells(RecordNumber, 6)
Me.cboPays = .Cells(RecordNumber, 7)
Me.cboGamme = .Cells(RecordNumber, 8)
'partie du code qui me fait tirer les cheveux il doit finir pour la 1er ligne en ex avec OptlitAlu
If UCase(.Cells(RecordNumber, 11)) = "Com" Then Me.OptComAlu.Value = True Else Me.OptValAlu = True
If UCase(.Cells(RecordNumber, 12)) = "Com" Then Me.OptComAluDivers.Value = True Else Me.OptValAluDivers = True
If UCase(.Cells(RecordNumber, 13)) = "Com" Then Me.OptComAcces.Value = True Else Me.OptValAcces = True
If UCase(.Cells(RecordNumber, 14)) = "Com" Then Me.OptComAcier.Value = True Else Me.OptValAcier = True
If UCase(.Cells(RecordNumber, 15)) = "Com" Then Me.OptComPlastique.Value = True Else Me.OptValPlastique = True
If UCase(.Cells(RecordNumber, 16)) = "Com" Then Me.OptComBois.Value = True Else Me.OptValBois = True
If UCase(.Cells(RecordNumber, 17)) = "Com" Then Me.OptComVitrage.Value = True Else Me.OptValVitrage = True
If UCase(.Cells(RecordNumber, 18)) = "Com" Then Me.OptComTransport.Value = True Else Me.OptValTransport = True
If UCase(.Cells(RecordNumber, 19)) = "Com" Then Me.OptComElectronique.Value = True Else Me.OptValElectronique = True
Me.frmMember.Caption = "Fiche " & Format(RecordNumber, "R000")
End With
End Sub

j'ai trouvé comme un grand et ce n’était pas si compliqué j'ai remplacé Else par Or évidement ce qui donne

If UCase(.Cells(RecordNumber, 11)) = "COM" Then Me.OPTComAlu = True Or Me.OPTValAlu = True Or Me.OPTLitAlu = True

maintenant quand je revient sur mon formulaire et recherche avec le combobox un nom de chantier que je souhaite modifier les infos du chantier ainsi que les cases options reprennent les valeurs enregistrer " je sais pas si c'est clair mais ça marche"
Merci a tous pour votre aide j'ai appris des choses utiles
 

sebastaupole

XLDnaute Nouveau
C'est quand tu veux pour décrire comment sont constitués les groupes d'options et ce que tu veux obtenir groupe par groupe.

Bonjour j'ai 9 groupes de 3 boutons option qui sont dans un formulaire pour exemple le premier groupe se nomme "Alubrut" qui contient 1er bouton "OPTComAlu" 2eme boutons "OPTValAlu" 3eme boutons "OPTLitAlu" suivant le bouton que je sélectionne ils affichent dans une cellule de feuille "plan" soit les mots com ou val ou alors lit pour faire cela pas de soucis mais je souhaite que dans mon formulaire en sélectionnant le nom d'un chantier dans un combobox puis en appuyant sur un bouton MODIFIER les boutons option ai la même valeur que le tableau "si j'avais mis com alors je retrouve le bouton option "OPTComAlu validé, avec un groupe de 2 boutons je n'ai pas de problème mais avec plus de deux je bloque . je joint mon fichier en pièce jointe mon problème doit ce situé sur la ligne de code lecture de l'enregistrement enfin je pense !!
 

Pièces jointes

  • FICHIER LANCEMENT FINAL.xlsm
    123.1 KB · Affichages: 15
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonsoir sebastaupole
Bonsoir le Fil ,le Forum
une approche ( perfectible ! ) qui fait je pense le Boulot
dans la procédure "ReadRecord"
j'ai remplacé les Lignes apostrophées(marron) par :
VB:
[SIZE=4]'If UCase(.Cells(RecordNumber, 11)) = "COM" Then Me.OPTComAlu = True Or Me.OPTValAlu = True And Me.OPTLitAlu = True
  Me.OPTComAlu = UCase(.Cells(RecordNumber, 11)) = "COM"
  Me.OPTValAlu = UCase(.Cells(RecordNumber, 11)) = "VAL"
  Me.OPTLitAlu = UCase(.Cells(RecordNumber, 11)) = "LIT"
'If UCase(.Cells(RecordNumber, 12)) = "COM" Then Me.OptComAluDivers.Value = True Or Me.OptValAluDivers = True Or Me.OptLitAluDivers = True
  Me.OptComAluDivers.Value = UCase(.Cells(RecordNumber, 12)) = "COM"
  Me.OptValAluDivers = UCase(.Cells(RecordNumber, 12)) = "VAL"
  Me.OptLitAluDivers = UCase(.Cells(RecordNumber, 12)) = "LIT"
'If UCase(.Cells(RecordNumber, 13)) = "COM" Then Me.OptComAcces.Value = True Or Me.OptValAcces = True Or Me.OptLitAcces = True
  Me.OptComAcces.Value = UCase(.Cells(RecordNumber, 13)) = "COM"
  Me.OptValAcces = UCase(.Cells(RecordNumber, 13)) = "VAL"
  Me.OptLitAcces = UCase(.Cells(RecordNumber, 13)) = "LIT"
'If UCase(.Cells(RecordNumber, 14)) = "COM" Then Me.OptComAcier.Value = True Or Me.OptValAcier = True Or Me.OptLitAcier = True
  Me.OptComAcier.Value = UCase(.Cells(RecordNumber, 14)) = "COM"
  Me.OptValAcier = UCase(.Cells(RecordNumber, 14)) = "VAL"
  Me.OptLitAcier = UCase(.Cells(RecordNumber, 14)) = "LIT"
'If UCase(.Cells(RecordNumber, 15)) = "COM" Then Me.OptComPlastique.Value = True Or Me.OptValPlastique = True Or Me.OptLitPlastique = True
  Me.OptComPlastique.Value = UCase(.Cells(RecordNumber, 15)) = "COM"
  Me.OptValPlastique = UCase(.Cells(RecordNumber, 15)) = "VAL"
  Me.OptLitPlastique = UCase(.Cells(RecordNumber, 15)) = "LIT"
'If UCase(.Cells(RecordNumber, 16)) = "COM" Then Me.OptComBois.Value = True Or Me.OptValBois = True Or Me.OptLitBois = True
  Me.OptComBois.Value = UCase(.Cells(RecordNumber, 16)) = "COM"
  Me.OptValBois = UCase(.Cells(RecordNumber, 16)) = "VAL"
  Me.OptLitBois = UCase(.Cells(RecordNumber, 16)) = "LIT"
' If UCase(.Cells(RecordNumber, 17)) = "COM" Then Me.OptComVitrage.Value = True Or Me.OptValVitrage = True Or Me.OptLitVitrage = True
  Me.OptComVitrage.Value = UCase(.Cells(RecordNumber, 17)) = "COM"
  Me.OptValVitrage = UCase(.Cells(RecordNumber, 17)) = "VAL"
  Me.OptLitVitrage = UCase(.Cells(RecordNumber, 17)) = "LIT"
' If UCase(.Cells(RecordNumber, 18)) = "COM" Then Me.OptComTransport.Value = True Or Me.OptValTransport = True Or Me.OptLitTransport = True
  Me.OptComTransport.Value = UCase(.Cells(RecordNumber, 18)) = "COM"
  Me.OptValTransport = UCase(.Cells(RecordNumber, 18)) = "VAL"
  Me.OptLitTransport = UCase(.Cells(RecordNumber, 18)) = "LIT"
' If UCase(.Cells(RecordNumber, 19)) = "COM" Then Me.OptComElectronique.Value = True Or Me.OptValElectronique = True Or Me.OptLitElectronique = True  
  Me.OptComElectronique.Value = UCase(.Cells(RecordNumber, 19)) = "COM"
  Me.OptValElectronique = UCase(.Cells(RecordNumber, 19)) = "VAL"
  Me.OptLitElectronique = UCase(.Cells(RecordNumber, 19)) = "LIT"[/SIZE]
jean marie
 

ChTi160

XLDnaute Barbatruc
Re
en ayant renommer les OptionButton de 10 en 10 par Groupe et de 0 à 2
VB:
Opt_10 ,Opt_11,Opt_12
Opt_20 ,Opt_21,Opt_22
Opt_30 ,Opt_31,Opt_32
Etct
Opt_90,Opt_91,Opt_92
j'ai remplacé le code ci dessus par
VB:
Dim xx As Byte
Dim I As Byte
Dim Idx As Byte
Dim StrCaption$
...
...
   Idx = 10
For I = 10 To 90 Step 10
   Idx = Idx + 1
  StrCaption = UCase(rng.Cells(RecordNumber, Idx))
   For xx = 0 To 2
    With Me.Controls("Opt_" & I + xx)'Avec le Control ainsi défini
        .Value = IIf(.Caption = StrCaption, True, False)
        If .Value = True Then Exit For 'On quitte si trouve correspondance
    End With
   Next xx
Next I
jean marie
 

sebastaupole

XLDnaute Nouveau
Re
en ayant renommer les OptionButton de 10 en 10 par Groupe et de 0 à 2
VB:
Opt_10 ,Opt_11,Opt_12
Opt_20 ,Opt_21,Opt_22
Opt_30 ,Opt_31,Opt_32
Etct
Opt_90,Opt_91,Opt_92
j'ai remplacé le code ci dessus par
VB:
Dim xx As Byte
Dim I As Byte
Dim Idx As Byte
Dim StrCaption$
...
...
   Idx = 10
For I = 10 To 90 Step 10
   Idx = Idx + 1
  StrCaption = UCase(rng.Cells(RecordNumber, Idx))
   For xx = 0 To 2
    With Me.Controls("Opt_" & I + xx)'Avec le Control ainsi défini
        .Value = IIf(.Caption = StrCaption, True, False)
        If .Value = True Then Exit For 'On quitte si trouve correspondance
    End With

   Next xx
Next I
jean marie

Merci JeanMarie je ferai un essai demain et vous tiendrai au courant pour info je mais mon fichier en pièce jointe l’entête du code est Lecture de l'enregistrement
 

Pièces jointes

  • FICHIER LANCEMENT FINAL.xlsm
    121.8 KB · Affichages: 3

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

Sans titre.png



Les noms des contrôle du formulaire doivent être les titres des colonnes de la BD.


Boisgontier
 

Pièces jointes

  • FICHIER LANCEMENT FINAL.xlsm
    170.8 KB · Affichages: 9
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour tous
perso j'aurais nommé les optionbutton avec la lettre de la colonne correspondante au tableau
4 ou 5 ligne de code en lecture par rapport a la sélection dans la combo
pareille en écriture du userform vers le tableau
c'est ultra basique et propre et efficace (groupe ou pas groupe)
A mediter;)
 

patricktoulon

XLDnaute Barbatruc
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 ;)

demo3.gif
 

Discussions similaires

Statistiques des forums

Discussions
311 735
Messages
2 082 024
Membres
101 873
dernier inscrit
excellllll