Programme fermé mais processus toujours actif [Résolu]

Signaler
Messages postés
27
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
8 mai 2009
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour, j'ai un petit soucis avec un programme. Le programme en lui même fonctionne comme il faut mais je remarque malgré tout quelque chose d'anormal. Lorsque je ferme le programme, il se ferme correctement, il dissparait aussi bien de l'écran que dans la barre des tâches... mais en ouvrant mon Gestionnaire des tâches, je remarque que le programme est toujours présent. (le nom du programme, avec son icone, et "En cours d'exécussion" dans la colonne à coté) A quoi est-ce dû? Et comment puis-je résoudre cette anomalie?

16 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
c'est même certain

faire "If About.Visible = False Then"
concrètement çà charge la form About.
elle passe par le load
ne passe pas par paint (puisque pas de show)

tu as donc une réponse false mais ta form est chargée
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
Salut,


Peu etre que tout tes objet ne sont PAS Correctment dechargés.






@+,   Ju£i?n
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,
tu as pu fermer avec des Me.hide

il peux y avoir d'autres form (ou objets comme le dit JRivet) en cours d'utilisation
tu peux avoir un timer à petit intervalle en cours de fonctionnement
ou boucle....

etc.....
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
27
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
8 mai 2009

Quels objets seraient suceptible de ne pas être déchargé? Mon programme est composé de plusieurs feuilles mais l'instruction "Unload Me" est toujours appelé lors de la fermeture de n'importe laquelle d'entres elles. J'ai également une base de donnée Access qui est ouverte à une certaine partie de mon programme mais lors de la fermeture de la feuille, je fais pourtant un "Titres.Close" (la table), un "BD.Close", (la base de donnée)", puis un "Unload Me".
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
DB (entre autres) est un objet, donc à détruire ensuite
(set DB = nothing)

mais il y a forcément autre chose...

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
BD*
Messages postés
27
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
8 mai 2009

Il y'a aussi un timer dans mon programme mais il se trouve sur une autre feuille et parametré par défaut en "Enabled = False". Le probleme survient même sans appeler cette feuille dans laquelle se trouve le timer. (par sécurité je viens d'ajouter un "Timer.Enabled = False" dans le "Unload" de la feuille dans laquelle il se trouve, pour m'assurer qu'il ne continue pas.)

Par contre, j'appel peut-etre mes autres fenêtes de la mauvaise maniere. Mon programme est composé de 4 feuilles (FormMain, Invitation, Localisation, About) et elles sont appelées de la maniere suivante:

1) Load Invitation
    Invitation.Show vbModal

2) Localisation.Show
        If Localisation.WindowState = vbMinimized Then
            Localisation.WindowState = vbNormal
        End If
    Localisation.SetFocus

3) About.Show vbModal

Et elles sont toutes refermée par un Unload Me. Est-ce suffisant?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
faut voir le code dans leur form_load et leur form_unload mais leur appel semble correct

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
27
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
8 mai 2009

Est-ce que cela peut être du à des variables que je définis sur base d'objets ou variables publiques se trouvant sur d'autres feuilles?

Du genre, dans ma feuille FormMain, si je met "If About.Visible = False Then" (et ce meme sans jamais appeler la feuille "About" pendant l'exécution du programme) est-ce que ca pourrait provoquer le probleme?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
teste en dessous avec ce code :

    Dim Frm As Form 
    Dim bFound As Boolean 
    bFound =  False 
    For Each Frm In Forms 
        If Frm.Name = "About" Then bFound = True: Exit For 
    Next Frm 

    If bFound Then 
        MsgBox "chargée" 
    Else 
        MsgBox "pas chargée" 
    End If

<small> Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT   [AFCK]

<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
27
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
8 mai 2009

Aaah, d'accord.. je viens de tester en enlevant cette vérification du "If About.visible = false then" et en effet le processus n'est plus en cours d'exécution quand je quitte le programme.
C'est donc ca... Merci beaucoup!

Malheureusement, il me faut maintenant trouver une solution alternative pour remplacer mon test (If .visible = false) et je ne sais pas comment faire.. En fait, appeler un SetFocus sur une textbox lorsqu'un évenement survient dans la FormMain.. mais il arrive que l'évenement survienne pendant que je suis dans une autre feuille modale, comme "About".. et j'aimerai qu'il ne fasse pas de SetFocus tant que je suis dans une autre fenêtre modale de mon programme.
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonsoir,

pour la base Access, il y a surement plusieurs "set" (Db et Rs), donc,
en fin, il faut autant de suppression.
D'une manière générale, tous les set créés doivent être supprimés.
Set Db  = Nothing
Set Rs  = Nothing
jean-marc
Messages postés
27
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
8 mai 2009

Oui, pour les bases de donnée, je me contente d'un Titres.Close et BD.Close. Je ne sais pas si c'est suffisant.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut JMO,
en effet, je n'ai pas mis le RS (puisque nommé Titles), "en autres" puisque je supposais que les objets étaient multiples (plus de 2)

Aphex,
juste les fermer est suffisant sur le principe pour un utilitaire, mais autant prendre l'habitude de décharger tous tes objets.
et une solution alternative au .visible?
et hop, un snippetde plus

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
27
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
8 mai 2009

Merci PCPT :) je vais essayer avec ca.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut,


En principe, pour quitter un programme de façon "sécuritaire" il faut
fermer chaque objet du programme et de les mettre à Nothing. Par objet,
je pense à toutes sortes de choses qui utilisent SET


De plus, tu dois fermer le ou les Timers et fermer toutes les Forms.

Si tu appliques cela à tous tes programmes, tu ne devrais plus avoir de problèmes.


Donc, dans le Form_Unload de la Form principale, si tu utilises des Recordsets, BD...

    If (Rs Is Nothing) False Then Set Rs Nothing (après un .Close si c'est pas déjà fait)

    If Db.Connect <> "" Then Db.Close

    Workspaces(0).Close  'pas certain de celle-là...

    Set Db = Nothing

    ....


Pour les Forms

    Dim frm as Form

    For Each frm In Forms

        Unload frm

        Set frm = Nothing

    Next

MPi