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.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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.
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
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
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.
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
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...
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".
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.
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é
????
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD