Checkbox se vide dans userform

agir2

XLDnaute Nouveau
Bonjour !

Tout mes checkbox dans mon userform se vide et le crochet est toujours disparu lorsque j'ouvre mon userform à nouveau.

Comment conserver mes crochet actif ?

Merci d'avance pour votre aide

Private Sub CheckBox20_Click()

End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

Bonjour.
Le seul moyen pour garder l'état des contrôles dans un userform c'est de ne pas le décharger.
Donc terminer son affichage par Me.Hide au lieu de Unload Me
Inconvénient: Un Userform_Initialize ne serait pas exécuté lors d'un Show ultérieur. Parade: écrire une Public Sub Afficher qui s'en charge et fait un Me.Show, et utiliser cette procédure au lieu de Show.
Cordialement.
 

job75

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

Bonjour agir2, Bernard :)

On peut mémoriser l'état des CheckBox dans un tableau.

Voyez le fichier joint avec ces codes :

- dans Module1 :

Code:
Public tablo(1 To 3) As Boolean 'mémorisation
- dans le code de l'UserForm :

Code:
Private Sub UserForm_Initialize()
Dim i As Byte
For i = 1 To UBound(tablo)
  Controls("CheckBox" & i) = tablo(i)
Next
End Sub

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
Dim i As Byte
For i = 1 To UBound(tablo)
  tablo(i) = Controls("CheckBox" & i)
Next
End Sub
A+
 

Pièces jointes

  • CheckBox(1).xls
    36.5 KB · Affichages: 81
  • CheckBox(1).xls
    36.5 KB · Affichages: 79
  • CheckBox(1).xls
    36.5 KB · Affichages: 85

job75

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

Re,

On peut aussi, comme le dit Dranreb, ne jamais fermer l'USF mais le cacher.

Et utiliser une macro UserForm_Activate au lieu d'une UserForm_Initialize :

Code:
Private Sub UserForm_Activate()
MsgBox "Test : UserForm activé..."
End Sub

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
cancel = True
Me.Hide
End Sub
Fichier (2).

A+
 

Pièces jointes

  • CheckBox(2).xls
    34.5 KB · Affichages: 69
  • CheckBox(2).xls
    34.5 KB · Affichages: 64
  • CheckBox(2).xls
    34.5 KB · Affichages: 63

agir2

XLDnaute Nouveau
Re : Checkbox se vide dans userform

Bon il me manque un petit bout de code pour completer le tout.
Lorsque je ferme et ouvre à nouveau mon userform mes crochet son là, mais lors de la fermeture du classeur mon userform se rafraichi et tout mes crochet disparaissent.

Merci

Je galère......
 

laetitia90

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

bonjour tous:):):):):)
normal !!
dans ce cas la tu modifie le code de l'ami job:):)
tu mets les donnees sur une colonne quand tu ferme l'user tu sauvegarde ton fichier
a l'ouverture du fichier tu recharge ton user avec les donnees de la colonne une solution
 

job75

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

Bonjour agir2, Laetitia :)

Pour conserver durablement l'état des CheckBox, mémoriser dans un nom défini ("Check") :

Code:
Private Sub UserForm_Initialize()
Dim tablo, i As Byte
tablo = [Check]
If IsError(tablo) Then Exit Sub
For i = 1 To UBound(tablo)
  Controls("CheckBox" & i) = tablo(i)
Next
End Sub

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
Dim i As Byte, tablo(1 To 3) As Boolean
For i = 1 To UBound(tablo)
  tablo(i) = Controls("CheckBox" & i)
Next
ThisWorkbook.Names.Add "Check", tablo 'mémorisation dans un nom défini
End Sub
Attention : la variable tablo ne doit plus être mémorisée dans Module1...

Fichier (2).

A+
 

Pièces jointes

  • CheckBox(2).xls
    45.5 KB · Affichages: 66
  • CheckBox(2).xls
    45.5 KB · Affichages: 62
  • CheckBox(2).xls
    45.5 KB · Affichages: 65

job75

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

Re,

Un autre "truc" pas mal pour modifier durablement les CheckBox.

Il consiste à modifier le VBProject à la fermeture de l'USF :

- dans Module1 :

Code:
Public tablo(1 To 3) As Boolean 'mémorisation

Sub USF() 'macro lancée par le bouton USF
UserForm1.Show 'vbModeless ou 0 => non...
'---s'exécute APRES la fermeture de l'USF---
Dim i As Byte
With ThisWorkbook.VBProject.VBComponents("UserForm1").Designer
  For i = 1 To UBound(tablo)
    .Controls("CheckBox" & i) = tablo(i)
  Next
End With
End Sub
- dans le code de l'USF :

Code:
Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
Dim i As Byte
For i = 1 To UBound(tablo)
  tablo(i) = Controls("CheckBox" & i)
Next
End Sub
Option importante à choisir :

- sur Excel 2003, menu Outils-Macro-Sécurité-Editeurs approuvés => cocher "Faire confiance au projet Visual Basic"

- sur Excel 2010 (2007 ?), onglet Fichier => Options => Centre de gestion de la confidentialité => Paramètres... => Paramètres des macros => cocher "Accès approuvé au modèle d'objet du projet VBA".

Fichier (3).

A+
 

Pièces jointes

  • CheckBox(3).xls
    49.5 KB · Affichages: 52
  • CheckBox(3).xls
    49.5 KB · Affichages: 46
  • CheckBox(3).xls
    49.5 KB · Affichages: 46

job75

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

Re,

Faut aller au bout des choses, alors un essai avec l'USF ouvert en mode NON MODAL :

- dans Module1 :

Code:
Public tablo(1 To 3) As Boolean, ouvert As Boolean 'mémorisation

Sub USF() 'macro lancée par le bouton USF
ouvert = True
UserForm1.Show vbModeless 'ou 0, mode NON MODAL
While ouvert
  DoEvents
Wend
'---s'exécute APRES la fermeture de l'USF---
Dim i As Byte
With ThisWorkbook.VBProject.VBComponents("UserForm1").Designer
  For i = 1 To UBound(tablo)
    .Controls("CheckBox" & i) = tablo(i)
  Next
End With
End Sub
- dans le code de l'USF :

Code:
Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
Dim i As Byte
For i = 1 To UBound(tablo)
  tablo(i) = Controls("CheckBox" & i)
Next
ouvert = False 'arrête la boucle While dans la macro USF
End Sub
Rappel : le mode NON MODAL permet d'accéder aux feuilles (et aux cellules) pendant que l'USF est ouvert.

Fichier (4).

A+
 

Pièces jointes

  • CheckBox(4).xls
    50.5 KB · Affichages: 57
  • CheckBox(4).xls
    50.5 KB · Affichages: 55
  • CheckBox(4).xls
    50.5 KB · Affichages: 57

agir2

XLDnaute Nouveau
Re : Checkbox se vide dans userform

Rebonjour et merci de votre intéret à ma cause !

Job75 ton code fonctionne bien à 3 checkbox mais j'ai besoin d'ajouter plusieurs checkbox environ une centaine dans mon USF et la cà se complique.
Seul les 3 checkbox fonctionne, les autres que j'ai ajouter refuse de suivre coché ou pas coché
????
 

job75

XLDnaute Barbatruc
Re : Checkbox se vide dans userform

Bonjour agir2, le forum,

Dans les 4 solutions des posts #3 #8 #10 #11 la dimension du tableau tablo est définie par

tablo(1 To 3).

3 parce qu'il y a 3 CheckBox.

Et ensuite les ChexkBox sont étudiées une par une dans l'ordre de leurs noms CheckBox1 CheckBox2 CheckBox3...

C'était tellement évident que je n'avais pas cru bon d'insister là-dessus...

A+
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass