Microsoft 365 Garder les cases checkbox cocher lors de la fermeture d'un userform

Marthe

XLDnaute Nouveau
Bonjour,
J'ai crée un userform avec une checkbox qui lorsqu'elle est cochée colorie des casses dans les différentes classeurs.
mais lorsque je quitte le userform ou je ferme le fichier, je perd le cochage si présent.

Comment conserver mes crochet actif ?

En regardant les précédents forum, j'ai appliqué les lignes ci-dessous mais cela ne fonctionne pas :

1703844095283.png
 

Pièces jointes

  • LDP essais.xlsm
    33.6 KB · Affichages: 10

Dranreb

XLDnaute Barbatruc
Bonjour.
Il n'y a qu'une CheckBox1 dans votre UserForm2, or le code mal repris parle de plusieurs.
Cela dit, l'idée de stocker leur état dans un Nom du classeur est bonne.
VB:
Private Sub UserForm_Initialize()
   Dim Ctrl As MSForms.Control, N As Byte, Tablo()
   Tablo = [Check]
   For Each Ctrl In Me.Controls
      If TypeOf Ctrl Is MSForms.CheckBox Then
         N = N + 1: Ctrl.Value = Tablo(N): End If
      Next Ctrl
   End Sub
Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
   Dim Ctrl As MSForms.Control, N As Byte, Tablo()
   For Each Ctrl In Me.Controls
      If TypeOf Ctrl Is MSForms.CheckBox Then
         N = N + 1: ReDim Preserve Tablo(1 To N)
         Tablo(N) = Ctrl.Value: End If
      Next Ctrl
   ThisWorkbook.Names.Add "Check", Tablo 'mémorisation dans un nom défini
   End Sub
S'il n'y en a vraiment qu'une c'est plus simple :
VB:
Private Sub UserForm_Initialize()
   CheckBox1.Value = [Check]
   End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   ThisWorkbook.Names.Add "Check", CheckBox1.Value
   End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonsoir
pour un seul checkbox
VB:
Private Sub UserForm_Initialize()
    Dim nam As Name
    UserForm2.TextBox1.Value = Worksheets("Page de garde").Range("D6").Value
    For Each nam In ThisWorkbook.Names
        If nam.Name = "Check" Then Me.CheckBox1.Value = nam.Value = "=1":exit for
    Next
End Sub

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
    On Error Resume Next
    ThisWorkbook.Names.Add "Check", "0"
    Err.Clear
    ThisWorkbook.Names("Check").Value = Abs(Me.CheckBox1.Value)
End Sub
ps: je ne savais pas que l'on pouvais mémorisé un array dans les names dans sa forme d'array

entre nous je serais surpris que cela soit possible
 

patricktoulon

XLDnaute Barbatruc
non j'ai essayé refersto
et comment ce serait possible d'ailleurs
c'est une formule attendu

en string oui
exemple plusieurs checkbox
VB:
Private Sub UserForm_Initialize()
    Dim nam As Name, t
    For Each n In ThisWorkbook.Names
        If n.Name = "Check" Then t = Split(Replace(n.Value, "=""", ""), ";"): Exit For
    Next
    If IsArray(t) Then
        For Each Ctrl In Me.Controls
            If TypeName(Ctrl) = "CheckBox" Then
                A = A + 1: Ctrl.Value = Val(t(A - 1))
            End If
        Next
    End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim Ctrl, A&, t(), nam As Name
    On Error Resume Next
    Set nam = ThisWorkbook.Names.Add("Check", "0)")
    On Error GoTo 0
    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "CheckBox" Then
            A = A + 1: ReDim Preserve t(1 To A): t(A) = Abs(Ctrl.Value)
        End If
    Next
    Debug.Print Join(t, ";")
    ThisWorkbook.Names("Check").Value = Join(t, ";")
End Sub
 

Dranreb

XLDnaute Barbatruc
J'ai regardé dans l'explorateur d'objets et aussi fait quelques tests.
La propriété Value d'un Name est une propriété String. On ne peut donc lui spécifier qu'une valeur String ou une référence commençant par "=".
RefersTo est une propriété Variant. Mes tests sur Excel 2016, montrent qu'en écriture une valeur d'un autre type que String ou ne commençant pas par "=" est acceptée: il en déduit automatiquement une référence telle que cette valeur sera reproduite par une évaluation ultérieure du nom. Sont acceptés tous types de données supportés par Excel, y compris les tableaux.
 

Membres actuellement en ligne

Statistiques des forums

Discussions
314 708
Messages
2 112 090
Membres
111 416
dernier inscrit
philipperoy83