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 :

Déclarer des constantes [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Points : 17
    Points
    17
    Par défaut Déclarer des constantes
    Bonjour,

    Je suis en train de réaliser une feuille VBA, pour laquelle j'ai une multitude de fonctions. Celles-ci font appellent à des constantes présentes dans des cellules du tableur.
    Puis-je définir ces constantes une bonne fois pour toutes, ou suis-je obligé de rappeler pour chaque fonction à quelle cellule correspondent ces constantes ?

    J'ai essayé de les définir avant les codes des fonctions, mais cela ne fonctionne pas...

    Dois-je mettre toutes ces fonctions dans un Sub() (qui ferait alors appel à un bouton) ?

    Merci pour votre réponse, j'espère avoir assez détaillé ma question.

  2. #2
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Bonjour

    Peut tu nous mettre un bout de ton code

    je pense qu'avec des variables correctement positionnées cela devrait fonctionner

    bon courage

  3. #3
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,


    Nous sommes d'accord qu'une constante ne peux changer de valeur en cours d'application
    Elles se déclarent dans un module (standard ou de classe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global Const MaConstante As Integer = 12
    A noter qu'une constante VBA ne peut être appelée dans une formule (=MaConstante)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si tes constantes doivent être dans des cellules d'une feuille, il faut passer par des variables et remplir celle-ci avec les valeurs des cellules dans une routine sur l'évènement Open du classeur.

    Philippe

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Par exemple, j'ai ça :


    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
    Function flowrate(Tf)
    Cd = Cells(9, 2)
    A = Cells(7, 2)
    g = Cells(5, 3)
    lc1 = Cells(8, 9)
    flowrate = Cd * A * (2 * g * lc1 * (Tf - Tout()) / Tf) ^ (1 / 2)
     
    End Function
     
    Function Fc1Tg(Tg)
    lc1 = Cells(8, 9)
    Fc1Tg = FLT(lc1 * Tg)
     
    End Function
     
    Function Fc1Tw(Tw)
    lc1 = Cells(8, 9)
    Fc1Tw = FLT(lc1 * Tw)
    End Function
    Là j'ai la constante lc1 de la cellule(8,9) que j'utilise 3 fois, mais je prévois d'avoir encore pleins de fonctions comme ça avec pleins de constantes. C'est pour ça que je voudrai m'épargner de l'écrire à chaque fois (et ce serait plus clair).

    Si tes constantes doivent être dans des cellules d'une feuille, il faut passer par des variables et remplir celle-ci avec les valeurs des cellules dans une routine sur l'évènement Open du classeur.
    Je crée donc des variables dans une des feuilles de mon classeur, et je peux les utiliser dans mon code tels quels ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Non, tu déclares tes variables comme Public dans un module, et ensuite sur l'évènement Open de ton classeur tu affectes les données des cellules à tes variables une fois.

    Ensuite tu peux utiliser les variables n'importe où.

    Cependant si ces constantes sont vraiment des constantes (c'est à dire que la valeur ne bougera jamais), alors il faut déclarer directement des constantes dans le code :

    Utiliser les variables en VBA Excel

    Philippe

  7. #7
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour tout le monde,

    Normalement avec une fonction, le mieux est de passer les valeurs en argument car si tu défini tes "constantes" à un moment donné (ouverture du classeur, par exemple) et puis qu'une ou plusieurs valeurs doivent changées (dans tes cellules), les résultats retournés par tes fonctions seront faux car pas mise à jour.
    Donc avec les valeurs en argument, voici à quoi pourrait ressembler ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function flowrate(Tf As Double, _
                      Cd As Double, _
                      A As Double, _
                      g As Double, _
                      lc1 As Double) As Double
     
        Application.Volatile
     
        'que retourne la fonction "tout" ?
        flowrate = Cd * A * (2 * g * lc1 * (Tf - Tout()) / Tf) ^ (1 / 2)
     
    End Function
    Que tu appelle alors de la façon suivante dans ton classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =flowrate(D6;B9;B7;C3;I8)
    ou encore, dans un appel en proc VBA avec les valeurs des cellules passées en argument (valeurs les plus à jour au moment de l'appel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Test()
     
        MsgBox flowrate(Tf, _
                        Cells(9, 2), _
                        Cells(7, 2), _
                        Cells(5, 3), _
                        Cells(8, 9))
     
    End Sub
    Normalement, si ce sont des constantes, elles n'ont rien à faire dans des cellules puisqu'elles ne sont pas censées changer de valeur donc dans ce cas, tu les déclare en tête de module dans le module standard où se trouvent tes fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Const Cd As Integer = 10
    Public Const A As Integer = 11
    Public Const g As Integer = 12
    Public Const lc1 As Integer = 13
    Hervé.

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses, j'y vois plus clair maintenant !

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

Discussions similaires

  1. Déclarer des constantes calculées
    Par prodexys dans le forum Débuter
    Réponses: 12
    Dernier message: 20/12/2010, 08h55
  2. Déclarer des constantes
    Par Squizzy dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2009, 10h17
  3. Déclarer des constante dans le makefile
    Par Colbix dans le forum Eclipse C & C++
    Réponses: 2
    Dernier message: 09/03/2009, 17h33
  4. Réponses: 6
    Dernier message: 09/01/2009, 16h04
  5. [Tableaux] Déclarer des constantes
    Par nicoreims dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2008, 21h54

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