L'objet a été déchargé (Err 364)

Résolu
Signaler
Messages postés
82
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2010
-
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Bonjour,
J'ai un probléme avec Load/Unload :
Proc [Dblclick sur une liste]
[Instructions...]
Load FormZ
Fin Proc
Du coup,
Proc [Chargement FormZ]
[Instructions...]
Appel de procédure (ProcX)
Fin Proc
Proc [ProcX]
[Instructions...]
MsgBox "Message"
Unload Me
Fin Proc
=> Le message s'affiche,puis vb mbloque sur une erreur d'execution '364' : "l'objet a été déchargé"
Lorque je passe en mode Debug,je m'apercoit que vb stop sur la ligne Load FormZ de la 1er procédure (Dblclick sur une liste).
Pourquoi réexectute t-il la procédure,normalement evénementielle Dblclick sur une liste ?
Et en addmetant qu'il l'éxecute je ne sait trop comment,je ne comprend pas ce message "l'objet a été déchargé".
A quoi sert Load,si ce n'est a chargé un objet qui ne l'est pas ?
Merci de votre aide.

8 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
me choque pas...

Private Sub FormZ_Load()
Instructions sans importances
Appel de procédure
End Sub

Tout un tas de procédures s'encainent jusque a cette derniére :

Public Function Procédure() as Booleab
If Variable = 0 Then
MsgBox "Cette base est vide !", vbExclamation
Procédure = False
Unload formZ
End if
Instructions...
Procédure = True
End sub

Private Sub FormZ_Load()
Instructions sans importances
If procédure Then
'# Suite des instructions
End If
End Sub
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
RIEN compris a ton pseudo code...

en gros, cette erreur survient par exemple si tu fais :

Form2.Show

et que dans le Form_Load de ta Form2, tu fais :

Unload Me

une fois le Form_Load appelé, Form2 a été déchargé, et le .Show est impossible alors...
Messages postés
82
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2010

"en gros, cette erreur survient par exemple si tu fais :
Form2.Show
et que dans le Form_Load de ta Form2, tu fais :
Unload Me"
En fait la feuille est appelé via Load,et n'est pas affiché.
Ensuite,la procédure Load de cette form en appel une autre,qui effectue des instructions avant de terminer par l'affichage d'une MsgBox,puis Unload Form.
J'ai essayé en Steep into,aprés le unload,il m'afiche ce message d'erreur et je me retrouve dans la procédure qui a appelé la form a l'origine...sur la ligne Form Load
Messages postés
82
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2010

Private Sub File1_Click()
If File1.FileName <> Empty Then
Load formZ
End If
End Sub

Private Sub FormZ_Load()
Instructions sans importances
Appel de procédure
End Sub

Tout un tas de procédures s'encainent jusque a cette derniére :

Public Sub Procédure()
If Variable = 0 Then
MsgBox "Cette base est vide !", vbExclamation
Unload formZ
End if
Instructions...
End sub
C'es tcomme si aussitot la form déchargée (Unload formZ) il la rechargait de suite.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
[...]
Instructions...
Procédure = True
End Function

bien entendu ^^ (copier-coller.....)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

pourquoi utiliser une Form si ce n'est pas pour l'afficher ?
Dans ce cas, autant utiliser un module pour effectuer tes instructions !

@++

(
Messages postés
82
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2010

"pourquoi utiliser une Form si ce n'est pas pour l'afficher ?
Dans ce cas, autant utiliser un module pour effectuer tes instructions !"
Parceque je récupére le contenue d'un fichier txt et étant débutant,j'utilise la propriété filename (trés pratique) des RTB et differents label pour stoker de longues valeurs.
Merci pour ta correction Renfield  .
la derniére procédure ne c'est pas exécuté mais cela doit étre la faute de ma "condition".
Toujours est-il que le form ne se recharge plus indéfiniment.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
se recharge dès que tu fais reference a l'un de ses objets...

ppour bien faire, il faudrait supprimer TOUTE manipulation exterieure des controles de tes Forms...

souvent, j'utilise un methode publique de ma form, lorsque, par exemple je fais des boites de dialogue :

plutot que de faire :

FrmEditClient.TxtClientID.Text = Rs!ClientID
[...]
FrmEditClient.TxtClientName.Text = Rs!ClientName
FrmEditClient.Show vbModal
'# Mise a jour de l'affichage... (ou pire, manipuler cette Form-ci depuis FrmEditClient :-S

je prefere faire par exemple :

If FrmEditClient.Launch (Rs) Then
'# Mise a jour de l'affichage...
End If

avec :

Private mbDialogResult As Boolean

Public Function Launch(ByRef voRs As RecordSet) As Function
TxtClientID.Text = Rs!ClientID
...
Me.Show vbModal
Launch = mbDialogResult
If mbDialogResult Then
'# L'utilisateur a pressé la touche OK.
'# On met a jour les données, controlées dans le BtnOk_Click
End If
End Function

Private Sub BtnCancel_Click()
Me.Hide
End Sub

Private Sub BtnOK_Click()
'# Verification de la saisie...
[...]
mbDialogResult =True
Me.Hide
End Sub



bon, c'est du code tapé de tête, mais le principe est largement éprouvé, et fonctionne au poil. On s'approche un peu d'une regle de la programmation orienté objet... on ne manipule pas directement les valeurs internes de la Form, mais on passe par les methodes et propriétés qu'elle exporte...