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
27usf-checkbox.xlsm (23.87 Ko)

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 Sub

Tâ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

Rechercher des sujets similaires à "partie mon code fonctionne pas interfacage usf"