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 :

Utilisation des variables public [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut Utilisation des variables public
    Bonjour,

    je pensai avoir compris l'utilisation des variables PUBLIC mais il semble qu'il me manque un maillon

    Je voudrai simplifier l'accès au chemin d'accès à mes classeurs Excel en utilisant la fonction PUBLIC

    1) j'ai défini en un endroit unique le chemin d'accès dans le premier classeur de mon enchainement (dans la cellule "H1" de la feuille paramètre "PARAM")

    2) dans le classeur suivant il y également une feuille PARAM et la cellule H1 de cette feuille est renseignée par Excel par une équivalence avec la feuille du premier classeur (=PARAM!H1)
    pas de problème

    3) j'ai défini dans ce classeur dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public chemin As String
    pour pouvoir utiliser la variable "chemin" dans mes macros

    4) Pour donner la valeur à la variable, dans ThisWorkbook open j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = Sheets("PARAM").Range("H1").Value
    J'ai bien la valeur de mon chemin dans la variable en fin de Thisworkbook open

    Mais quand j'utilise la variable dans une macro elle a une valeur = ""

    Que manque-t-il ?

  2. #2
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    Je pense que vous devez définir la valeur de vos variables dans un module.
    Par exemple dans le module dans lequel vous avez déclaré votre variable, vous mettez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub MesVariables()
    chemin = Sheets("PARAM").Range("H1").Value
    end Sub
    et vous faite appel à MesVariables, que ce soit dans le Thisworkbook.open ou ailleurs pour attribuer la valeur publique à chemin

  3. #3
    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,
    je pensai avoir compris l'utilisation des variables PUBLIC mais il semble qu'il me manque un maillon
    Rien de tel que la lecture d'un bon tutoriel sur le sujet Utiliser les variables en VBA Excel

  4. #4
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    Merci à vous 2, je suis en train de regarder,

    en fait pour ne pas avoir à trop changer mon code j'aurai voulu remplacer dans le module où je déclare mes variables PUBLIC:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const pathServeur As String = "C:\Répertoire"
    par quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public chemin As String
    Public chemin = Sheets("Param").Range("H1").Value
    mais cela ne va pas et je ne sais même pas si c'est possible car je ne voie pas ça dans les docs

  5. #5
    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,
    Evite d'utiliser "mais cela ne va pas" car cela ne veux strictement rien dire. Soit tu as un message d'erreur et tu donnes son numéro et le texte qui l'accompagne , soit la variable est vide et tu le signales

    De deux choses l'une, soit tu choisis d'utiliser une constante publique alors c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const pathServeur As String = "C:\Répertoire"
    soit tu choisis une variable publique et dans ce cas c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public chemin As String
    Sub Init()
     chemin = Sheets("Param").Range("H1").Value
    End Sub
    Et donc au démarrage, tu dois lancer la procédure Init. Init étant un nom choisi au hasard

  6. #6
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    J'ai bien fait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public pathServeur As String
     
    Sub chemin()
    pathServeur = Sheets("Param").Range("H1").Value
    End Sub
    et dans ThisWorkbook open
    en sortie de ThisworkBook pathServeur à la bonne valeur de H1 de Param

    Quand j'utilise ensuite dans le même classeur dans une macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pathFact = pathServeur & "\" & fich12 & ".xlsm"
    pathServeur à la valeur ""

  7. #7
    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,
    C'est très curieux ce que tu écris.
    j'ai effectué un test par acquit de conscience, cela fonctionne parfaitement chez moi.

    As-tu bien placé la déclaration de la variable publique dans un module standard ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    La déclaration et sub chemin est dans module 1

    je viens de retester j'ai le même phénomène, comme tu me confirmes que c'est la bonne solution je vais regarder d'encore plus près

  9. #9
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    Pour reprendre tout à plat :

    j'ai pour l'instant le chemin d'accès au répertoire dans 7 classeurs différents dans le même module 3 de chaque classeur sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const pathServeur As String = "K:\répertoire"
    ce qui je réalise (un peu tard) va me poser un problème de portage sur les autres PC (7 modifs à faire)

    Ce que je voudrai :

    la possibilité de définir à un seul endroit le chemin, comme une définition "Public" pour la durée de l'instance Excel qui passerai automatiquement de classeur en classeur

  10. #10
    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,
    On s'éloigne très fort de ta demande initiale. Sans connaître les tenants et aboutissants de ce que tu attends, il est difficile de t'aider.

  11. #11
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    Bonsoir,

    pas tant que ça puisque c'est pour répondre à ce besoin que j'essaye de mettre en oeuvre la solution.

    pour revenir à mes tests j'ai donc dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public pathServeur As String
     
    Sub chemin()
    pathServeur = Sheets("Param").Range("H1").Value
    End Sub
    et dans ThisWorkbook open
    1) j'ouvre le classeur et en lançant en pas à pas une macro utilisant pathServeur, la valeur de la variable contient bien la contenu de H1 de Param

    2) je lance en pas à pas une 2eme fois la même macro (sans avoir fermé le classeur), la variable pathServeur = ""

    gloups…

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    Je ne comprend pas non plus que ça ne fonctionne pas. Pour moi il y a un élément que tu omets de signaler.

    Quoiqu'il en soit, ça ne t'aidera pas pour ce que tu veux, elle ne sera pas visible d'un autre classeur.

    Pour ça tu peux utiliser un nom caché.
    Résidu d'excel4, un tel nom est lié à l'application et reste donc visible pour la durée de vie de l'application (jusqu'à fermeture d'excel donc, même si le classeur l'ayant créée est fermé)), et ce de tous les classeurs.
    Création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Application.ExecuteExcel4Macro "SET.NAME(""pathServeur"",""K:\répertoire"")"
    Lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        chemin = Application.ExecuteExcel4Macro("GET.NAME(""pathServeur"")")
    eric

  13. #13
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    Je pense aussi que j'omets involontairement qq chose mais je ne vois pas quoi, j'exécute en pas à pas juste les 5 premières lignes de ma macro et je regarde les variables…

    Pour ta solution j'ai fait un premier essai rapide et pour la valeur de "chemin" j'obtiens :

    ="K:\répertoire"

    avec des décalages je peux me débrouiller bien sur

    Question : ce "résidu" de Excel 4 ne risque-t-il pas de disparaître sans préavis ?

    comment dois-je l'utiliser dans les autres classeurs ? mettre les 2 lignes dans le 1er classeur puis dans chaque Thisworbook je dois relire avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = Application.ExecuteExcel4Macro("GET.NAME(""pathServeur"")")

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Pour ta solution j'ai fait un premier essai rapide et pour la valeur de "chemin" j'obtiens :
    ="K:\répertoire"
    avec des décalages je peux me débrouiller bien sur
    ?? Je ne comprend pas bien, tu mets la chaine dont tu as besoin bien sûr


    Question : ce "résidu" de Excel 4 ne risque-t-il pas de disparaître sans préavis ?
    Ca fait 15 ans qu'il est maintenu, peu de raison que ça change.
    Il sera temps de procéder autrement à moment là, par exemple en mettant dans un fichier ou dans la base de registre.

    comment dois-je l'utiliser dans les autres classeurs ? mettre les 2 lignes dans le 1er classeur puis dans chaque Thisworbook je dois relire avec :
    oui
    Mais tant que le classeur avec la déclaration ne sera pas ouvert, elle ne sera pas connue.
    En tenir compte si tu as des workbook_open en ayant besoin dans les autres classeurs.
    eric

  15. #15
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    merci

    pour le résultat dans la variable voilà ce que j'ai dans les variables locales

    chemin "="K:\ES-SIG"" String

    je m'attendais à avoir :

    chemin "K:\ES-SIG" String
    d'où sort le signe = ?

    mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Application.ExecuteExcel4Macro "SET.NAME(""pathServeur"",""K:\ES-SIG"")"
     
    pathServeur = Application.ExecuteExcel4Macro("GET.NAME(""pathServeur"")")
     
    chemin = pathServeur
    j'ai ajouté chemin = pathServeur pour vois le contenu dans les variables locales, pathServeur étant défini en Public

  16. #16
    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,
    Pour lire la variable c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Application.ExecuteExcel4Macro("pathServeur")
    ou avec variable intermédiaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim chemin
    chemin = Application.ExecuteExcel4Macro("pathServeur")
    MsgBox chemin

  17. #17
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    d'où sort le signe = ?
    Le nom étant sensé accueillir une formule il est ajouté d'office.
    A toi de l'enlever avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =mid(Application.ExecuteExcel4Macro("GET.NAME(""pathServeur"")"),2)
    eric

  18. #18
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    merci à vous 2, cela semble donner un résultat correct quelque soit la longueur du chemin, je vais tester complétement dans tous les cas

    j'ai du adapter le code pour avoir le bon résultat, notamment pour retirer une quote en trop en début et en fin de chaîne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Application.ExecuteExcel4Macro "SET.NAME(""pathServeur"",""K:\ES-SIG"")"
     
    ' Version de test
    'Application.ExecuteExcel4Macro "SET.NAME(""pathServeur"",""Z:\Test\ES-SIGtest"")"
     
    pathServeur = Mid(Application.ExecuteExcel4Macro("GET.NAME(""pathServeur"")"), 2)
    pathServeur = Replace(pathServeur, """", "")
    vous auriez surement une solution plus "propre" mais cela semble convenir

  19. #19
    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,
    vous auriez surement une solution plus "propre" mais cela semble convenir
    Je t'ai pourtant donné la syntaxe qui te renvoie la chaîne sans le signe d'égalité ni les guillemets

  20. #20
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 255
    Points : 475
    Points
    475
    Par défaut
    oui en effet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pathServeur = Application.ExecuteExcel4Macro("pathServeur")
    pour être sur d'avoir bien compris :

    dans le premier classeur je mets dans ThisworkBook open :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Application.ExecuteExcel4Macro "SET.NAME(""pathServeur"",""K:\ES-SIG"")"
    pathServeur = Application.ExecuteExcel4Macro("pathServeur")
    et dans chaque macro de tous les modules utilisant "pathServeur" je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pathServeur = Application.ExecuteExcel4Macro("pathServeur")
    inutile de remettre dans les "ThisWorkbook open" des classeurs qui sont ouverts ensuite dans la même instance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ExecuteExcel4Macro "SET.NAME(""pathServeur"",""K:\ES-SIG"")"
    c'est bien cela ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] utilisation des variables public
    Par bigboy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/08/2009, 22h36
  2. Utiliser des variables d'une BDD
    Par Ragnarok_1er dans le forum Access
    Réponses: 3
    Dernier message: 25/01/2006, 08h32
  3. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55
  4. [MFC] utilisation des variables associées
    Par Grey dans le forum MFC
    Réponses: 2
    Dernier message: 18/11/2005, 14h00
  5. Utiliser des variables d'environnements
    Par Xam335 dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/08/2004, 14h15

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