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 :

Explicit et Volatile


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut Explicit et Volatile
    Bonjour à toutes et à tous,
    il m'a été transmis un fichier excel que je dois "aménager" notamment avec des macros...
    Je constate que je suis contraint de déclarer mes variables, alors que je n'ai nul part "Option Explicit", que les Functions créés ne sont pas par défaut volatile...
    Des idées ?
    Bon week-end !
    SB

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Bonjour,
    Tu es obligé de déclarer une variable si tu l'utilises pour appeler une fonction à paramètre.
    Exemple : Tu veux appeler la fonction Test :
    La fonction Test est libellée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Test(i%)
    'Longue suite d'opération...
    End Function
    Cette fonction attend comme paramètre un integer (i%) :

    Si tu appelles cette fonction avec une variable elle doit être explicitement déclarée comme integer.

    A+

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Si Option Explicit n'est pas déclaré en tête de module, il n'y a aucune raison pour que le compilateur couine !

    Toutes fonction n'a pas à être déclarée Volatile. On déclare une fonction volatile si on souhaite qu'elle soit exécutée à chaque calcul de la feuille, un exemple de fonction bidon qui doit être déclarée Volatile si on souhaite qu'à chaque modif dans la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim A As Long
     
    Function MaFonction() As Long
     
        Application.Volatile
        A = A + 1
        MaFonction = A
     
    End Function
    Chaque modif d'une cellule dans la feuille où est appelée la fonction "MaFonction()" (qui ne demande aucun argument) incrémentera la valeur de A et cette dernière sera retournée par la fonction.
    Testes avec et sans "Application.Volatile" pour voir le résultat. Aujourdhui(), Maintenant(), Alea(), etc... sont des fonctions volatile.
    Si une fonction demande un ou plusieurs arguments et qu'un de ces derniers change de valeur, la fonction sera obligatoirement appelée et retournera un résultat sans avoir été déclarée volatile.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Si je peux me permettre: Il FAUT mettre Option Explicit au début de chaque module... Et il faut paramétrer l'éditeur pour qu'il le fasse à ta place pour chaque nouveau module (voir mon billet de blog)


    Citation Envoyé par galopin01;10434794[...
    Tu es obligé de déclarer une variable si tu l'utilises pour appeler une fonction à paramètre.
    [...]
    Cette fonction attend comme paramètre un integer (i%) :

    Si tu appelles cette fonction avec une variable elle doit être explicitement déclarée comme integer.

    A+
    Je serais personnellement plus nuancé.

    Par défaut, un argument est passé par référence (ByRef) ce qui veut dire que l'on ne passe pas l'argument lui-même mais son emplacement en mémoire. Et donc, puisque la fonction appelée est censée recevoir un integer et peut le transformer dans le code appelant (byref), il est logique que si elle peut manipuler un integer, il faut lui avoir passé un integer. Le gestionnaire de mémoire s'y perdrait, sinon.

    Mais si on passe les arguments par valeur (ByVal), alors, on n'est pas obligé de passer des integer (c'est mieux, évidemment) mais on doit passer des valeurs qui peuvent être transtypées en integer.

    Le code qui suit fonctionne même en passant des valeurs non typées Integer (mais si on enlève le Byval ou qu'on le remplace par ByRef, ça va coincer)

    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
    Sub TestAppel()
      Dim value As Variant
      Dim LongValue As Long
      Dim StringValue As String
     
      mafonction 54
      value = 45
      mafonction value
      LongValue = 1000
      mafonction LongValue
      StringValue = "19"
      mafonction StringValue
    End Sub
     
    Function mafonction(ByVal i As Integer)
      Debug.Print i
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut
    Merci pour tous ces détails.
    Bon dimanche,
    SB

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

Discussions similaires

  1. [Mots cles]Signification de transient et volatile
    Par Pill_S dans le forum Langage
    Réponses: 2
    Dernier message: 14/07/2004, 11h58
  2. Que veut dire "volatile" devant une variable ?
    Par altahir007 dans le forum C
    Réponses: 4
    Dernier message: 23/06/2004, 15h47
  3. Comment écrire explicitement en sortie d'un job OEM ?
    Par zestrellita dans le forum Entreprise Manager
    Réponses: 11
    Dernier message: 11/03/2004, 09h36
  4. Utilisation de Option explicit
    Par Perihan dans le forum ASP
    Réponses: 5
    Dernier message: 29/10/2003, 11h43
  5. - Insertion : valeur explicite
    Par Leoxp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/05/2003, 17h21

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