Réinitialiser UserForm pour le réutiliser "vierge"
Bonsoir,
Afin de conclure en beauté mon exercice, je me retrouve bloqué malgré mes efforts je n'arrive pas à trouver quelle fonction utiliser afin de :
(explications)
J'ai crée mon UserForm1, avec tout son code et les variables.
Je dois pouvoir exécuter ce UserForm1 plusieurs fois (un peu à l'image d'une suite), mais je dois réutiliser le UserForm1 "vierge", je veux dire par-là que je dois réinitialiser les propriétés des objets lors de l'exécution de mon programme.
Voici mon programme quelque peu long, mais il fonctionne parfaitement. Jusqu'à ce que je bloque pour le reset du UserForm1.
Mon objectif est de :
- Supprimer les valeurs de la plage de données de ma feuille "facture". Fait.
- Augmenter ma ligne de 1, normalement c'est fait. (pas sûr que ce soit bon)
- Recommencer un second (et n-ième) UserForm1 "vierge" afin de recommencer les manipulations effectuées dans le UserForm1 et de stocker le résultat dans la ligne "F+1"
OptionExplicitDim Plage As Range
Dim E AsIntegerDim B AsIntegerDim C AsIntegerDim D AsIntegerDim A AsInteger'F pour la ligne dans compta'Dim F AsInteger'G pour la valeur de E14'Dim G AsIntegerPrivateSub UserForm_Initialize()
Worksheets("facture").Select
dat.Caption = Range("B2").Text + Range("D2").Text + Range("C2").Text
Worksheets("compta").Range("B7:C16").ClearContents
Worksheets("facture").Range("E6:E14").ClearContents
NombreVieux.Locked = True
NombreJeune.Locked = True
NombreGroupe.Locked = True
NombreTN.Locked = TrueIf Worksheets("facture").Cells(2, 5).Value = 2Then
Tarifs.Visible = FalseElse
Tarifs.Visible = True
CheckTL.Locked = TrueEndIf
Mode.Visible = False
Suivant.Visible = False
Fin.Visible = False
F = 7EndSubPrivateSub NombreTN_AfterUpdate()
A = NombreTN.Value
Worksheets("facture").Cells(7, 5).Value = A
EndSubPrivateSub CheckTN_Click()If CheckTN.Value = FalseThen
NombreTN.Locked = TrueElse
NombreTN.Locked = FalseEndIfEndSubPrivateSub NombreVieux_AfterUpdate()
E = NombreVieux.Value
Worksheets("facture").Cells(9, 5).Value = E
EndSubPrivateSub CheckVieux_Click()If CheckVieux.Value = FalseThen
NombreVieux.Locked = TrueElse
NombreVieux.Locked = FalseEndIfEndSubPrivateSub NombreTL_AfterUpdate()
B = NombreTL.Value
Worksheets("facture").Cells(6, 5).Value = B
EndSubPrivateSub CheckTL_Click()If CheckTL.Value = FalseThen
NombreTL.Visible = FalseElse
NombreTL.Visibe = TrueEndIfEndSubPrivateSub NombreGroupe_AfterUpdate()
C = NombreGroupe.Value
Worksheets("facture").Cells(11, 5).Value = C
EndSubPrivateSub CheckGroupe_Click()If CheckGroupe.Value = FalseThen
NombreGroupe.Locked = TrueElse
NombreGroupe.Locked = FalseEndIfEndSubPrivateSub NombreJeune_AfterUpdate()
D = NombreJeune.Value
Worksheets("facture").Cells(8, 5).Value = D
EndSubPrivateSub CheckJeune_Click()If CheckJeune.Value = FalseThen
NombreJeune.Locked = TrueElse
NombreJeune.Locked = FalseEndIfEndSubPrivateSub Valider_Click()
Mode.Visible = TrueIf Worksheets("facture").Cells(2, 5).Value = 2Then
Worksheets("facture").Cells(14, 5) = B
G = B
Else
Worksheets("facture").Cells(14, 5).Value = A + C + D + E
G = A + C + D + E
EndIf
Worksheets("compta").Cells(F, 2).Value = G
EndSubSub suivant_fin()
Suivant.Visible = True
Fin.Visible = TrueEndSubPrivateSub OptionCB_Click()If OptionCB.Value = TrueThen
suivant_fin
ElseEndEndIf
MsgBox ("Vous devez " & Worksheets("facture").Cells(14, 6).Value & " par Carte Bancaire")
Worksheets("compta").Cells(F, 3).Value = "carte bancaire"
nombre_f
EndSubPrivateSub OptionEspece_Click()If OptionEspece.Value = TrueThen
suivant_fin
ElseEndEndIf
MsgBox ("Vous devez " & Worksheets("facture").Cells(14, 6).Value & " en Espèces")
Worksheets("compta").Cells(F, 3).Value = "espèces"
nombre_f
EndSubPrivateSub OptionCheque_Click()If OptionCheque.Value = TrueThen
suivant_fin
ElseEndEndIf
MsgBox ("Vous devez " & Worksheets("facture").Cells(14, 6).Value & " en Chèque")
Worksheets("compta").Cells(F, 3).Value = "chèque"
nombre_f
EndSubSub nombre_f()If F > 16Then
Suivant.Visible = FalseElse
Suivant.Visible = TrueEndIfEndSubPrivateSub Fin_Click()EndEndSub
Voici l'esquisse du code que je souhaite réaliser. "F = F + 1" me faisant descendre d'une colonne supplémentaire dans le tableur pour afficher la liste des résultats.
Code:
1 2 3 4 5 6
PrivateSub Suivant_Click()
Worksheets("facture").Range("E6:E14").ClearContents
F = F + 1EndSub
Merci beaucoup pour votre patience et pour votre aide !!! :)
PS : Je précise que je ne suis pas sûr que certaines données de mon UserForm1 puissent être compatibles avec ce qui m'est demandé dans cette question.
Je te remercie de ton aide Theze, mais j'ai finalement trouvé en cherchant plus assidûment un code beaucoup plus simpe.
Code:
1 2
Unload UserForm1
UserForm1.Show
20/11/2015, 17h09
Invité
Bonjour,
Oui beaucoup plus simple et beaucoup moins propre!
23/11/2015, 08h57
GastonLagaffe25
Bonjour rdurupt,
Peux-tu m'expliquer pourquoi tu dis cela ?
Quel est le gain de réinitialiser tous les contrôles par rapport à celui de décharger / charger une instance de Userform ?
D'avance merci.
23/11/2015, 12h43
Theze
Bonjour,
C'est un peu comme pour débarrasser une table, soit tu enlèves les couverts soit tu bascule la table, c'est plus rapide mais moins propre !
23/11/2015, 13h41
Invité
bonjour,
je n'aurai pas dit mieux!
23/11/2015, 15h40
GastonLagaffe25
J'avais bien compris l'aspect philosophique du "propre".
Je cherchais plus une réponse en terme de gain/performance entre ces 2 solutions (et d'une éventuelle dépendance vis à vis du nombre de contrôle de la UserForm utilisée).
23/11/2015, 16h00
Theze
Je pense que de boucler sur les contrôles pour les réinitialiser ne doit pas prendre plus de temps que décharger et recharger la Form