IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Libération des variables


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Libération des variables
    Bonjour à tous,

    Je viens de découvrir l'instruction End (lol)

    Avant, si je devais quitter une procédure (pour une info manquante comme par exemple une colonne dans une extraction),
    après un msgbox, je mettais un boolean à true, quittais ma procédure (Exit Sub) et quand je revenais sur la procédure d'origine, je testais le booléen.
    Si celui-ci était True, alors je libérais mes variable (Set MyObject = Nothing) puis quittais la procédure (Exit Sub).

    Avec End, pas besoin de mon boolean, il met fin directement au code et ne revient pas à la procédure précédente :-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub OpenFile(NameFile As String)
    '---- Process
     
    If Found = False Then 'Si le classeur n'est pas ouvert
        If Len(Dir(sPath & sFileName)) > 0 Then 'si le classeur existe
            Workbooks.Open sPath & sFileName 'on l'ouvre
        Else
            MsgBox ("The excel file '" & NameFile & "' doesn't exist on the current folder.")
            End 'On stoppe le code ET ne revient pas ds la précédente Sub :-)
        End If
    Else
        Workbooks(NameFile).Activate 'on active le classeur s'il était déjà ouvert
    End If
     
    Set Export = ActiveWorkbook
     
    End Sub
    Ma question:

    j'ai lu qu'il n'était pas nécessaire de libérer les variables (Set MyObject = Nothing) car le end s'en chargeait.
    J'aimerai avoir une confirmation sur ce point svp.
    Et si c'est vrai, est-ce également le cas pour l'instruction End Sub?

    Merci par avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'ai lu qu'il n'était pas nécessaire de libérer les variables (Set MyObject = Nothing) car le end s'en chargeait.
    J'ai des doutes par rapport à ce que tu as écris. C'est vrai pour les variables "classiques" déclarées à l'intérieur de la procédure mais pas pour les variables objet.
    Pour moi, il faut libérer l'espace réservé à la variable objet lorsque l'on quitte la procédure

    A lire Utiliser les variables en VBA Excel et tout particulièrement le chapitre II-K. Object

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Points : 661
    Points
    661
    Par défaut
    Bonjour,

    En lisant l'aide, il semblerait que End libère vraiment toute la mémoire du programme.
    Qu'en pensez-vous ?

    Lorsqu’elle est exécutée, l’instruction End réinitialise toutes les variables au niveau du module et toutes les variables locales statiques dans tous les modules. Pour conserver la valeur de ces variables, utilisez l’instruction Stop à la place. Vous pourrez ainsi reprendre l’exécution tout en préservant la valeur des variables.
    Notes

    L’instruction End met immédiatement fin à l’exécution du code, sans appeler d’événement Unload, QueryUnload ou Terminate, ou tout autre code Visual Basic. Le code que vous avez écrit dans les événements Unload, QueryUnload et Terminate des feuilles et des modules de classe n’est pas exécuté. Les objets créés à partir de modules de classe sont détruits, les fichiers ouverts à l’aide de l’instruction Open sont fermés et la mémoire utilisée par votre programme est libérée. Les références d’objet appartenant à d’autres programmes ne sont plus valides.
    https://docs.microsoft.com/fr-fr/off.../end-statement

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Le End termine toutes les macros en cours, il n'a d'intérêt que dans certains cas très particuliers de fin de macro (utilisation de variables Static lourdes, non fermeture de fichiers binaires.... )

Discussions similaires

  1. [Toutes versions] Libération des variables, gain de place ?
    Par FtF Nemesis dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/05/2011, 10h07
  2. FreeOnTerminate libération des variables
    Par Nillak dans le forum Delphi
    Réponses: 2
    Dernier message: 14/01/2007, 21h48
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo