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 :

Unload UserForm incompatible avec mes variables publiques ? Non !


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut Unload UserForm incompatible avec mes variables publiques ? Non !
    Bonjour ...

    Vba et Excel 03
    Je bute toujours sur le même problème :

    Toute instruction de "déchargement" d'un UserForm du genre :
    vide toutes les variables "publiques" du projet et donc : bug assuré ...

    Je suis assez tenté de contourner le problème en écrivant à la place :
    Ca résoud le problème mais n'est ce pas contraire au principe d'économiser au maximum , l'espace mémoire ?…


    Merci beaucoup ...

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    As-tu du code sur l'évènement Terminate de l'userform?

    PGZ

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    Toute instruction de "déchargement" d'un UserForm du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Unload MonUserForm
    vide toutes les variables "publiques" du projet et donc : bug assuré ...
    Et tu sûre que tes variables sont publiques ?
    Regarde si ces variables sont modifiées par un évenement du userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Private Sub UserForm_Deactivate()
     
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
     
    End Sub
     
    Private Sub UserForm_Terminate()
     
    End Sub

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut
    Bonjour Patbou, bonjour Pgz

    en bref :

    je suis sur que ma variable est bien "publique"
    elle est déclarée en tête du seul module standard que contient mon projet de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public ZoneVierge as range
    Par ailleurs cette variable n'est pas modifiée par mon UserForm ... le mot "ZoneVierge" n'apparaît d'ailleurs nul par dans le code associé à l'UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Deactivate()
     
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
     
    End Sub
     
    Private Sub UserForm_Terminate()
     
    End Sub
    en fouinant sur le web , je suis tombé sur un message d'un gars ayant eu le même problème ... je vous retransmets sa supposition :

    "cela veut dire que l'interpréteur arrete l'exécution et détecte une anomalie... mais laquelle ? puisque je n'ai aucun message d'erreur !"

    plus loin , il indique avoir résolu le problème un peu au pif , et sans comprendre pourquoi ça marche ! en écrivant "option explicit" en entête de tous les modules . J'ai bien sur fait la même chose mais chez moi , ça ne change rien ...

    En tous cas , merci beaucoup de vous pencher sur mon problème et à plus tard ...... RV

  5. #5
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    A ce stade...

    As-tu fais sous VBE Debugage/Compiler? Sans erreur?

    Sinon, tu vois comment que c'est à la fermeture d'un usf que ta variable publique est réinitialisée?

    Tu as un seul usf?

    Quand tu fais une recherche sur tout le projet de 'ZoneVierge', tu trouves quelles lignes?

    PGZ

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors ton problème est ailleurs.
    Comment lis-tu ton range pour savoir que la variable globale s'est évaporée ?
    Teste ça :
    - Place des données de A1 à A10
    - Dans un module standard, ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Plage As Range
     
    Sub Test()
    Dim cell As Range
    Set Plage = Range("A1:A10")
        Load UserForm1
        UserForm1.Show
        For Each cell In Plage
            MsgBox cell
        Next
    End Sub
    Dans l'userform, un seul bouton et ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
        Unload UserForm1
    End Sub
    Bonne soirée

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut
    Re bonjour Pgz et Ouskel'nord

    Pour vous répondre à tous 2 : je sais à quel moment ma variable est réinitialisée en faisant du pas à pas et en interrogeant à chaque fois ma variable grace au volet "Exécution" de VBA ....

    Par ailleurs , le mystère s'épaissit :
    j'ai commencé par faire scrupuleusement ce que tu me conseillait Ouskel'n'or ... et miracle ! la variable publique "Plage" restait stable !!!

    comme ce n'était pas très éloigné de ce que j'avais moi même testé en tous sens , j'ai mis en parrallèle dans le même projet les 2 formes de test en les simplifiant au maximum , c'est à dire en créant 2 UserForm... et bien l'un détruit la variable , l'autre la laisse intact !!! ... pour preuve , voici le code ... si quelqu'un peut m'expliquer , j'lui paye un coup crénom !

    voici la description :
    - 1 feuille Excel avec 3 boutons , affectés àux 3 macros suivantes :
    - 1 seul module standard dont voici l'intégralité du code et qui contient les macros en question

    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
    Option Explicit
    Public Plage As Range
     
    Sub Assigne()
        Set Plage = Range("A1:A10")
    End Sub
     
    Sub Test()
        Load UserForm1
        UserForm1.Show
    End Sub
     
    Sub TEST2()
        Load USERFORM2
        USERFORM2.Show    
    End Sub
    - les 2 UserForms rigoureusement identiques aux codes rigoureusement identiques (voir ci dessous) contenant chacun 1 seul CommandButton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Private Sub CommandButton1_Click()
        Unload Me
    End Sub
    et bien l'appel de la macro TEST2 laisse intact la variable publique "Plage" , alors que l'appel de la macro Test la désinitialise !!! c'est quand même dingue , non ?

    Merci encore et bonne nuit ...

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je ne vois rien là que de très normal.
    Chaque fois que tu lances une macro placée dans un module standard tu ré-initialises la variable.
    Par contre, si tu mets bien ce code dans un module standard, dis-moi ce que ça fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Public Plage As Range
     
    Sub Assigne()
    Dim cell As Range
    Set Plage = Range("A1:A10")
        Load UserForm1
        UserForm1.Show
        Load USERFORM2
        USERFORM2.Show
        For Each cell In Plage
            MsgBox cell
        Next
    End Sub
    et dans les deux userforms, un simple bouton avec Unload.me

Discussions similaires

  1. Un souci avec mes variables
    Par arobaskette dans le forum Android
    Réponses: 5
    Dernier message: 23/11/2013, 14h19
  2. [MySQL] Problème avec mes variables de session
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/04/2011, 22h40
  3. Variable type UserForm à initialiser avec nom variable
    Par dalmasma dans le forum Général VBA
    Réponses: 2
    Dernier message: 28/04/2009, 14h03
  4. VB.NET Problème avec mes variables
    Par forsay1 dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/10/2008, 20h52
  5. erreur divers avec mes variables
    Par TheBlackReverand dans le forum MFC
    Réponses: 11
    Dernier message: 21/03/2006, 22h40

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