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 me et variables globales


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur environnement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Par défaut Unload me et variables globales
    Hello,

    A nouveau un problème sur une routine qui fonctionnait auparavant, mais plus maintenant. Dans mon formulaire, j'enregistre des variables globales afin de garder en mémoire certaines informations. Lorsque je relance le formulaire, je veux pouvoir récupérer ces informations afin de renseigner certains champs.
    Donc, au moment où je valide mon formulaire, j'enregistre dans 4 variables déclarées en globales certains champs. Puis je fais Unload formulaire
    Du coup, lorsque je réouvre ce dernier, les variables sont remises à zéro. Comment faire?
    J'avais pensé enregistré les infos non pas dans des variables mais dans des labels invisibles et réaffectés les captions de ces labels dans mes champs, mais ça me paraît un peu "bricolage"... Merci pour votre aide!

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    c'est quoi des variables globales pour toi????

    ne confondrais tu pas des variables globales dans le haut du code du userform et des variable public dans un module ou meme dans le userform !!!! c'est pas la meme chose
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    montre :
    - où et comment tu as déclaré ces variables globales
    - où et comment tu les as initialisées

    La fermeture d'un userform ne détruit pas des variables globales correctement déclarées (dans un module standard, donc).
    Il en va différemment lors de la fermeture du classeur, mais tu nous dis qu'elles "disparaissent" au unload du formulaire et non à la fermeture du classeur.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur environnement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Par défaut Variables globales, publiques, etc.
    Salut, j''ai feinté comme un brigand en récupérant les infos que je voulais conserver à la fermeture de mon formulaire dans des cellules de mon fichier Excel, puis que je récupère lorsque je le réouvre... mais c'est de la bidouille, et j'aimerais faire autrement : à savoir utiliser des variables qui "durent" c'est-à-dire qui conservent leurs informations à la fermeture du formulaire où elles sont créées (à la sortie d'un "Unload formulaire").

    Donc, pour vous répondre, dans mon formulaire, j'ai un bouton "valider" qui me permet de récupérer les infos de certaines Textbox, et que j'enregistre dans des variables.
    Le bouton appelle donc :
    - une sub "enregistrement" d'un autre module (qui enregistre certaines données que je souhaite conserver)
    - puis fait un "Unload Me"

    Tout en haut de mon module dans lequel se trouve la sub "enregistrement", j'ai déclaré en Global plusieurs variables (date1 as string, refcourrier1 as string, etc.)
    Puis j'ai une sub "enregistrement" dans laquelle j'affecte à mes variables globales certains champs de mon formulaire.
    Par exemple:
    date1 = .textdate1.value
    refcourrier1 = .textRefcourrier1.value

    Jusqu'ici, ça fonctionne. Normal, c'est juste avant le "Unload Me".

    Quand je relance mon formulaire, j'ai un autre bouton "Récupérer dernières infos" qui appelle un autre module dans lequel se trouve la sub "récupération".

    Dans cette sub, je réaffecte (opération inverse) les valeurs contenues dans mes variables aux champs de mon formulaire:
    .textdate1.value = date1
    .textRefcourrier1.value = refcourrier1

    Sauf qu'à ce stade, mes variables date1 et refcourrier1 sont vides.

    Je suppose donc m'être trompé dans la déclaration de mes variables. J'ai un peu cherché, et n'ai finalement pas bien compris la différence entre les variables Global et Public. j'ai testé les 2, aucun ne fonctionne.

    J'en profite enfin pour demander s'il y a une astuce concernant les formats "date". j'ai récupéré la super procédure de masque de saisie d'un format date (merci Patricktoulon!!) sauf que lorsque je remplis une cellule avec mon champs date1, il m'inverse les mois et les jours. J'ai lu qu'entre Excel et VBA la déclaration était inversée. j'ai donc rajouté CDate... sauf que si mon premier champs est 25/02/2002, dans Excel pas de souci, mais si mon deuxième champs est 04/02/2002, alors il m'inverse celui-là...

    merci pour toute l'aide et les explications que vous voudrez bien me donner!!

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    un petit exemple
    ouvre un fichier vierge
    met lui un module standard et un userform

    colle ceci dans le module standard

    dans le userform
    met lui autant de textbox que tu veux
    et tu va y coller ce code


    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
    Private Sub UserForm_Activate()
        Dim i&, ctrl As Object
        If IsArray(mesvaleur) Then
            For i = 1 To UBound(mesvaleur)
                Me.Controls("TextBox" & i).Value = mesvaleur(i)
            Next
            Erase mesvaleur
        End If
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        Dim tablo(), ctrl As Object
        For Each ctrl In Me.Controls
            If TypeName(ctrl) = "TextBox" Then x = x + 1: ReDim Preserve tablo(1 To x): tablo(x) = Me.Controls("TextBox" & x).Value
        Next
        mesvaleur = tablo
    End Sub
    voila ouvre tape dans tes textbox ferme et réouvre
    fait x fois la manip et vois le resultat
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur environnement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Par défaut Je vais regarder ça
    Je vais regarder ça... et surtout essayer de comprendre les fonctions que tu utilises (et que je n'ai jamais utilisées... Ubound, ctrl, etc.).

    Concernant mon problème de date, je l'ai résolu :

    Dans ma sub "enregistrement" (la procédure qui enregistre pour plus tard la valeur de ma date... plutôt que d'utiliser une variable globale), j'ai simplement remplacé Cells(1,27).Value = date1 par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If IsDate(date1) then
    Cells(1,27).Value = CDate(date1)
    End if
    Puis dans la sub "creation" (qui copie les valeurs de mon formulaire sur une nouvelle ligne), j'ai également remplacé Cells(DerLig,2).Value = Ligne_Formulaire.textDate1.Value par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If IsDate(Ligne_Formulaire.textDate1.Value) then
    Cells(DerLig,2).Value = Cdate(Ligne_Formulaire.textDate1.Value)
    End if
    Je reviens très vite...

Discussions similaires

  1. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 10h49
  2. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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