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 :

Initialisation d'une variable Globale


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut Initialisation d'une variable Globale
    Bonjour,

    Je cherche comment procéder pour initialiser une variable globale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Global OriginFilterOn As Boolean
    Comment puis-je initialiser cette variable.
    Cette variable est utilisé dans une macro qui commence par tester la valeur de cette variable avant de décider du traitement à réaliser, et qui met à jour cette variable une fois le traitement appliqué, pour pouvoir rendre le traitement réversible.

    Merci pour vos réponses.

  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
    13 114
    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 : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour déclarer une variable globale en VBA Excel, on utilise le mot clé Public et à partir du moment où l'on type une variable, elle est initialisée à False pour un type booléen, 0 pour tous types numériques, chaîne vide ("") pour le type String et Nothing pour les variables objets

    Soit pour votre cas Public OriginFilterOn As Boolean à placer en tête d'un module standard

    A lire pour en savoir Utiliser les variables en VBA Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 484
    Par défaut
    Bonjour,
    Cette variable est utilisé dans une macro qui commence par tester la valeur de cette variable avant de décider du traitement à réaliser, et qui met à jour cette variable une fois le traitement appliqué,
    Si la variable n'est utilisée que dans une seule macro, tu as la possibilité de la déclarer en Static. La déclaration se fait au niveau de la macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static OriginFilterOn As Boolean
    Static, instruction (VBA) | Microsoft Learn

  4. #4
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Pour déclarer une variable globale en VBA Excel, on utilise le mot clé Public et à partir du moment où l'on type une variable, elle est initialisée à False pour un type booléen, 0 pour tous types numériques, chaîne vide ("") pour le type String et Nothing pour les variables objets

    Soit pour votre cas Public OriginFilterOn As Boolean à placer en tête d'un module standard

    A lire pour en savoir Utiliser les variables en VBA Excel
    Merci, effectivement le mot clé global est peu fort car il exporte la portée à l'ensemble des modules, et le mot clé Public serait amplement suffisant dans mon cas.
    La valeur d'initialisation par défaut de ma variable booléenne a le bon gout de correspondre à la valeur que je lui aurait donné au départ, mais j'ai le même problème pour une valeur entière que je souhaite faire commencer à 2. Comment dans ce cas puis-je faire, vu qu'il est impossible de déclarer une variable est de l'initialiser en même temps, et que l'on ne peut pas déclarer de code en dehors d'une Sub ou d'une Function ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Citation Envoyé par Valtrase Voir le message
    Bonjour,

    Si la variable n'est utilisée que dans une seule macro, tu as la possibilité de la déclarer en Static. La déclaration se fait au niveau de la macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static OriginFilterOn As Boolean
    Static, instruction (VBA) | Microsoft Learn
    Effectivement, j'avais écarté le coté Static à cause de la définition faite sur le site de Microsoft :
    Utilisé au niveau de la procédure pour déclarer des variables et allouer de l’espace de stockage. Les variables déclarées à l’aide de l’instruction Static conservent leurs valeurs pendant toute la durée de l’exécution du code.
    Pour moi il n'est pas clair que la variable garde sa valeur pendant toute la durée de vie du classeur au vu de la définition ci-dessus.

    Cependant je reste avec le même problème, lorsque j'appelle ma routine, je vais réaliser un traitement différent en fonction de l'état de ma variable (le but est en fait de réaliser un filtrage bien particulier à la première exécution, puis à chaque exécution de la routine soit annuler le filtrage précédemment réalisé soit en réaliser un nouveau), j'ai donc besoin de pouvoir initialiser correctement ma variable avant même de permettre à l'utilisateur d'exécuter la routine.

  6. #6
    Membre chevronné
    Inscrit en
    Avril 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 261
    Par défaut
    Bonjour à tous,

    Les deux solutions proposées fonctionnent.
    N'aimant pas trop les variables publiques, j'ai une petite préférence pour l'utilisation d'une variable statique au sein de la procédure comme proposé par Valtrase.
    L'exemple ci-dessous montre comment identifier la première exécution à l'aide d'une variable statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
    Static déjàExecuté As Boolean   'False par défaut
     
        If Not déjàExecuté Then
            MsgBox "Première exécution"
        Else
            MsgBox "Une des exécutions suivantes"
        End If
     
        déjàExecuté = True
    End Sub
    A+

Discussions similaires

  1. [XL-2016] Initialisation d'une variable globale
    Par Laskar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/03/2018, 14h53
  2. Réponses: 2
    Dernier message: 29/08/2012, 11h05
  3. [XL-2007] Initialisation d'une variable globale dans Workbook_Open()
    Par yorgh1234 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/01/2012, 03h15
  4. Comment déclarer une variable globale
    Par davkick dans le forum C
    Réponses: 13
    Dernier message: 20/05/2005, 18h50
  5. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2003, 19h11

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