Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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")
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
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
Re
Idx : j'aurais pu l'appeler Colonne et 10 c'est la Dizaine de la valeur des Colonnes
soit 11 à 19
Ensuite on incrément !(en fonction de I)
Idx=Idx+1
n'hésite pas
jean marie
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
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
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
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
>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
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
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)
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)
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.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.