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 :

Portée des variables: variables locales ou public; sub, private sub et Option Explicit [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Par défaut Portée des variables: variables locales ou public; sub, private sub et Option Explicit
    Bonsoir,

    Ce post pour m'assurer que je comprends bien ces concepts.

    Un module se voit attribuer un code que l'on appelle via Call dans une feuille voire dans un UserForm ? Appelle multiple ou non.

    Une feuille peut faire appel à des UserForm, utiliser des codes ActiveX et exécuter des procédures codées dans des modules.

    Un UserForm a son propre code et évenements et peut faire appel à des procédures codées dans des modules.

    Je parle de cela car j'aimerais m'assurer de ne pas m'enmeler les pinceaux.

    Une variable déclarée avec dim dans une procédure n'est existante (reconnue) que dans la procédure déclarée. Toutefois on peut la passer en argument.

    Une variable déclarée public est accessible n'importe où dans le projet VBA. Me trompe-je ? A propos de variables déclarées Public je les déclare dans un module. Est-ce une bonne manière et le bon endroit lorsque l'on veut que nos variables soient accessibles partout ?

    Option Explicit déclarée par exempe dans Feuil1 d'un classeur implique que cette variable est accessible partout dans Feuil1 ou plus ? Et quelle est la différence avec une déclaration Public Variable as .... ?

    Merci de votre compréhnsion

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Par défaut
    Merci pour le lien communiqué. J'aurais dû y penser avant

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Tu as tout ça dans l'aide fournie par Excel et VBA.

    Mais, je veux bien répondre.

    Un module se voit attribuer un code que l'on appelle via Call dans une feuille voire dans un UserForm ? Appelle multiple ou non.
    Que veux-tu dire par Appel multiple ? (excuses moi de répondre par une autre question...) Le reste m'a l'air correcte. Et oui, le code peut être appelé plus d'une fois.

    Citation Envoyé par RicardoBxl
    Une feuille peut faire appel à des UserForm, utiliser des codes ActiveX et exécuter des procédures codées dans des modules.

    Un UserForm a son propre code et évenements et peut faire appel à des procédures codées dans des modules.

    [...]

    Une variable déclarée avec dim dans une procédure n'est existante (reconnue) que dans la procédure déclarée. Toutefois on peut la passer en argument.
    Ça aussi ça m'a l'air tout bon.

    Citation Envoyé par RicardoBxl
    Une variable déclarée public est accessible n'importe où dans le projet VBA. Me trompe-je ? A propos de variables déclarées Public je les déclare dans un module. Est-ce une bonne manière et le bon endroit lorsque l'on veut que nos variables soient accessibles partout ?
    C'est en effet la manière la plus claire. Ceci dit, il faut bien analyser le ce que tu dois faire. Certaines variables, peuvent parfois être passées en paramètre (ou argument selon le vocabulaire utilisé) dans une procédure et éviter ainsi de déclarer une variable globalement si ce n'est pas absolument nécessaire.

    Citation Envoyé par RicardoBxl
    Option Explicit déclarée par exempe dans Feuil1 d'un classeur implique que cette variable est accessible partout dans Feuil1 ou plus ? Et quelle est la différence avec une déclaration Public Variable as .... ?
    L'instruction Option Explicit ne fait qu'obliger la déclaration explicite des variables (contrairement aux déclarations implicites) avant de les utiliser.

    L'accès aux variables à partir d'une autre feuille ou module est déterminé par l'utilisation de Private ou Public, selon le cas.

    exemple, un module de 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
    18
    19
    20
    21
    22
    23
    Option Explicit     ' oblige la déclaration des variables
    Public maVar1 As Integer   ' variable de type Entier vue partout
    Private maVar1 as String    ' variable de type chaîne vue uniquement dans ce module
     
    ' dans un module, si on ne spécifie pas si une procédure est publique ou privée, elle est par défaut publique
    Sub toto()    ' procédure publique
        Dim Message As String    ' variable locale
        Message = "Vous pouvez m'appeler de partout dans votre projet"
        MsgBox Message 
     
        ' Appel d'une fonction privée
        MsgBox "L'âge du capitaine est : " & CStr(AgeDuCapitaine)
    End Sub
     
    ' Fonction pouvant être utilisée comme formule de cellule (niveau module)
    Public Function maFonction(valeur1 as Range, valeur2 as Range) as Double
        maFonction = (valeur1.Value + valeur2.Value) / 2   ' calcule la moyenne
    End Function
     
    ' Fonction privée, i.e. ne peut être appelée que dans ce module
    Private Fonction AgeDuCapitaine() As Integer
        AgeDuCapitaine = 2011 -1957
    End Function
    En espérant que ça répond à tes question.

    [Edit] Je vois que le temps que j'ai mis à répondre, on t'avais déjà donné une réponse plus rapide...

    si c'est , n'oublie pas de cliquer sur le bouton.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Public et Private sub
    Par Mairequimby dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/04/2011, 05h03
  2. Portée des variables (Public Shared)
    Par Anduriel dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/10/2009, 16h07
  3. Portée des macro-variables : un contre exemple?
    Par fafabzh6 dans le forum Macro
    Réponses: 2
    Dernier message: 23/04/2009, 17h23
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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