Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pb d'initialisation de UserForm !

  • Initiateur de la discussion Creepy
  • Date de début
C

Creepy

Guest
Bonjour le forum,

Voila j'ai 2 boutons qui lancent la même Userform mais pas avec les même boutons et titre à l'interieur de celle-ci.

Mes bouton ont ce code :

Private Sub Ajouter_Click()
Sheets("Formulaire").Range("A1").Value = 2
ModifDial.Show
End Sub

En faites pour savoir comment initialiser ma Userform, j'ecris une valeur (1 ou 2) dans une cellule.
Et l'initialisation de ma Userforme ce fait comme ca :

Private Sub UserForm_Initialize()
If Sheets("formulaire").Range("A1").Value = "" Then
Exit Sub
ElseIf Sheets("formulaire").Range("A1").Value = 1 Then
Sheets("formulaire").Range("A1").Value = ""
With ModifDial
.Caption = "Modification enregistrement..."
.BtAjouter.Visible = False
etc...
ElseIf Sheets("formulaire").Range("A1").Value = 2 Then
Sheets("formulaire").Range("A1").Value = ""
With ModifDial
.Caption = "Ajout d'un enregistrement..."
etc.....

Quand je quitte ma Userform de n'importe quelle facon (fin de procedure ou bouton annuler) j'ai ca :

Unload.me
ModifDial.Hide

Mon probleme est que si je click 2 fois de suite sur mon bouton de départ, en tracant, je m'apercois que la première fois ca lance bien ma procedure Userform_initialize, par contre la 2eme fois mon code s'arrete à Modifdial.show de mon bouton !!

Ce qui fait que j'obtiens une Userform sans titre et avec tous les boutons ensemble !! bref elle est pas initialisée.

Pkoa ???

Merci

Creepy
 
Z

zon

Guest
Bonjour à tous,




C'est normal dans tous tes If, tu vides ta cellule A1 la 1ere fois, donc la 2 eme fois, quand tu testes si A1 est vide alors tu sors de la procédure...




A+++
 
J

jaccard

Guest
Hello, mais pourquoi tu ne mettrais pas les différentes caractéristiques de ton userform (caption, bouton visible, etc..) dans chaque evenement click des boutons ? du genre :

Private Sub Ajouter_Click()
With ModifDial
.Caption = "Ajout d'un enregistrement..."
etc...

end With
ModifDial.Show
End Sub

Private Sub Modifier_Click()
With ModifDial
.Caption = "Modification enregistrement..."
etc...

end With
ModifDial.Show
End Sub

etc...

dom ;-)
 
C

Creepy

Guest
Re all,

Ce que je vaisdireest débile, mais je le dis quand même !!

En faites j'ai l'impression que quand je clique 2 fois de suite sur mon bouton, je le fais trop vite.

Du coup j'ai l'impression qu'en mémoire l'initialisation de ma userform n'est pas lancée la deuxième fois.

C'est peut être mal exprimé mais j'ai ca

Est-ce possible ??

Y'a une solution ??

Merci

Creepy
 
Z

zon

Guest
Bonjour à tous,



Creepy, impossible ce que tu dis, part contre comme je te l'ai déjà fait remarqué, tu vides A1 la 1ere fois que tu initialises...et tu sors donc de suite dés la seconde procédure..pOUR ESSAYER METS 1 msgbox dans chacune de tes conditions Det tu verras
qe qui se passe...


Private Sub UserForm_Initialize()
If Sheets("formulaire").Range("A1").Value = "" Then
msgbox "A1 VIDE"
Exit Sub
ElseIf Sheets("formulaire").Range("A1").Value = 1 Then
Sheets("formulaire").Range("A1").Value = ""
msgbox"A1 était égal à 1 et maintenant à " & Sheets("formulaire").Range("A1").Value
With ModifDial
.Caption = "Modification enregistrement..."
.BtAjouter.Visible = False
etc...
ElseIf Sheets("formulaire").Range("A1").Value = 2 Then
Sheets("formulaire").Range("A1").Value = ""
msgbox"A2 était égal à 1 et maintenant à " & Sheets("formulaire").Range("A1").Value
With ModifDial
.Caption = "Ajout d'un enregistrement..."
etc.....


A+++
 
C

Creepy

Guest
Alors très bizarre ca !!!

Zon j'ai fait ce que tu m'as dit, j'ai ajouter des message box partout dès que je change la valeur de A1. Quand je clique sur mon bouton modifier la première fois j'ai :

A1 = 1 en msgbox (dans ma procedure bouton modifier_click), puis
A1 etait egale à 1 et est maintenant egale à 0 (dans ma procedure initialize).

C'est donc que je rentre dans ma procedure Initialize de ma userform

Je fais une modification je valide, et là je me dit Zut j'ai oublié de modifier kke chose.
Je reclique et là j'ai :

A1 = 1 en megbox (dans ma procedure bouton modifier_click).
et puis ma userform apparait.

Je n'ai pas le deuxième, c'est donc que je ne passe pas par la procedure initialize de ma userform. j'ai bien essayé de virer la ligne qui met à chaque fois a1 à "" mais ca change rien !

Bizarre bizarre non ?

Quelle est la methode pour decharger completment une combobox de la mémoire ? C'est bien :

unload me
Userform.hide

Comment faire pour que je passe à chaque fois par la procedure initialize en faite je pensais que j'y passais à chaque fois que je demande à afficher la userform.

a+

Creepy
 
@

@+Thierry

Guest
Salut Creepy


Unload Me suffit, inutile de rajouter UserFormX.Hide (ou Me.Hide)

Je n'ai pas le temps de suivre tes aventures de procédure If pour avoir un UserForm qui aura tel ou tel Controls.Captions etc...

Mais je te conseille de faire un tour sur ce fil de discussion Lien supprimé

Ensuite tes If ne sont pas trop clairs... et ATTENTION ElseIf est subordonnée à ce que la condition du block If soit False... Dans ce Cas tous les ElseIf seront testés...

Aide VB (Version US)
When executing a block If (second syntax), condition is tested. If condition is True, the statements following Then are executed. If condition is False, [each]each ElseIf condition (if any) is evaluated in turn[/b]. When a True condition is found, the statements immediately following the associated Then are executed. If none of the ElseIf conditions are True (or if there are no ElseIf clauses), the statements following Else are executed. After executing the statements following Then or Else, execution continues with the statement following End If.

Et toi entretemps tu changes la valeur de ton ta cellule de référence...

En espérant vous mettre sur une bonne voie...

@+Thierry
 
Z

zon

Guest
Re,



Vite fait au lieu d'utiliser des elseif, utilises plutôt des select case....


Private Sub UserForm_Initialize()
select case Sheets("formulaire").Range("A1").Value

case 1
Sheets("formulaire").Range("A1").Value = ""
With ModifDial
.Caption = "Modification enregistrement..."
.BtAjouter.Visible = False
etc...
case 2
Sheets("formulaire").Range("A1").Value = ""
With ModifDial
.Caption = "Modification enregistrement..."
.BtAjouter.Visible = False
etc...
case else
exit sub
end select
end sub

A+++
 
@

@+Thierry

Guest
SALUT Creepy et Zon et Jaccard ert les ami(e)s du Forum


Euh oui j'espère...... mais attention au ElseIf.......car tu es en blème (activate ou pas!!! lol)

Select Case peut être sympa (zon)

bon je ne fais que passer

@+Thierry
 
L

LaurentTBT

Guest
Bonjour le forum.

Je viens de survoler ce fil, pas dans le détail.
Mais j'ai noté ceci:

Creepy a écrit:
Quand je quitte ma Userform de n'importe quelle facon (fin de procedure ou bouton annuler) j'ai ca :
Unload.me
ModifDial.Hide


Or Unload Me va décharger ModifDial de la mémoire.
Mais ModifDial.Hide va dans la foulée le recharger, et donc faire exécuter la procédure Initialize. (Je viens de tester, en exécutant pas à pas sur un userform tout simple, et en effet, Initialize s'est relancé à la fin)

Par conséquent, il est normal que si on relance une deuxième fois le userform, étant déjà chargé, la procédure Initialize de se relance pas. De plus, comme Initialize s'était relancée à la fin de ta procédure qui avait remis Sheets("formulaire").Range("A1").Value = "", elle a rencontré un Exit Sub dés la 2ème ligne, et n'initialise concrétement rien du tout!

J'irai donc plus loin que Thierry: il n'est pas "inutile de rajouter UserFormX.Hide (ou Me.Hide)". Pour moi, il est dangereux de rajouter UserFormX.Hide (ou Me.Hide).

Creepy, essayes donc de supprimer cette ligne, et dis nous si cela suffit!

@+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…