Une partie de mon code ne fonctionne pas (interfacage usf)
Salut le forum
J’ai obtenu ce code de Lermite pour gérer l’interfaçage du formulaire avec ma feuille DONNE.
Tout fonctionne comme souhaité sauf les checkbox.
Normalement tout élement coché devrais s’afficher dans les cellules définies.
Mais c’est pas le cas. Lorsque je coche plusieurs éléments d’un frame, un seul élément se répète plusieurs fois.
Ex1 : dans le frame1 de la page1, lorsque je coche tous les éléments, ils s’affichent de la sorte (voir DONNE !C12),
Ex2 :Idem comme pour le 1er exemple. J’ai coché 3 éléments du 2è frame de la page2 et voici comment ca s’affiche (voir DONNE !C22).
Je souhaite que les éléments cochés s’affichent et non pas le meme élément qui se répète.
Merci de m’aider et encore merci à lermite qui m’a bcp coacher dans le sujet en question et bien d’autres.
NB : la logique du code me convient ssi on pourrait corriger ce qui fait que le même élément se repète.
Je suppose que c'est dans cette partie du code ou y'a le problème
ElseIf TypeOf Ctl Is MSForms.CheckBox Then
If Ctl.Value Then
Lig = Ctl.Tag
If Ctl.Tag = 12 Then
Fr5 = Fr5 + IIf(Fr5 = "", Ctl.Caption, ", " & Fr5)
.Cells(Lig, Col).Value = Fr5
ElseIf Ctl.Tag = 22 Then
Fr6 = Fr6 + IIf(Fr6 = "", Ctl.Caption, ", " & Fr6)
.Cells(Lig, Col).Value = Fr6
End If
End if
Next Ctl
End Sub
Re,
Private Sub Valider_Click()
Dim Ctl As Control
Dim Col As Integer, Lig As Integer
Dim Fr5 As String, Fr6 As String
Col = 3 'pour la colonne B
'Boucle sur tout les contrôles de l'userform
'If Not ControlerRemplir() Then Exit Sub
With Sheets("DONNE")
For Each Ctl In Me.Controls
If TypeOf Ctl Is MSForms.TextBox Then
If Ctl.Tag <> "" And Ctl <> "" Then
Lig = Ctl.Tag
..Cells(Lig, Col).Value = Ctl.Text
End If
ElseIf TypeOf Ctl Is MSForms.OptionButton Then
If Ctl.Value Then
'l'OptionButton est checker
Lig = Ctl.Tag
.Cells(Lig, Col).Value = Ctl.Caption
End If
ElseIf TypeOf Ctl Is MSForms.ComboBox Then
Lig = Ctl.Tag
.Cells(Lig, Col).Value = Ctl.Text
ElseIf TypeOf Ctl Is MSForms.CheckBox Then
If Ctl.Value Then
Lig = Ctl.Tag
If Ctl.Tag = 12 Then
Fr5 = Fr5 & IIf(Fr5 = "", Ctl.Caption, ", " & Ctl.Caption)
.Cells(Lig, Col).Value = Fr5
ElseIf Ctl.Tag = 22 Then
Fr6 = Fr6 & IIf(Fr6 = "", Ctl.Caption, ", " & Ctl.Caption)
.Cells(Lig, Col).Value = Fr6
End If
End If
End If
Next Ctl
End With
End SubTâche d'indenter ton code, c'est plus lisible.
A+
SalutLermite
Merci pour la solution.
Je sais pas si c'est trop demandé mais je constate que que les éléments cochés ne s'affichent pas selon l'ordre du cochage.
Est-il possible de personnaliser l'ordre d'affichage.
Comment réaliser cela?
encore merci pour le conseil (indentation).
Re,
Quand ont fait une boucle sur les contrôles d'un UF ou Feuille il sont listé dans l'ordre de leur création.
Une piste pour avoir l'ordre que tu veux.
Tu supprime les CheckBox (TOUS) et tu les recrée dans l'ordre voulu.
Si c'est par copier/coller, un seul à la fois.
Salut Lermite
Merci pour le conseil.
Cdlt