Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/10/2011, 08h22   #1
Invité de passage
 
Inscription : mars 2010
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 39
Points : 3
Points : 3
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.
Sylv3D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 08h34   #2
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Bonjour

Peut tu nous mettre un bout de ton code

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

bon courage
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 08h45   #3
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
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 :
Global Const MaConstante As Integer = 12
A noter qu'une constante VBA ne peut être appelée dans une formule (=MaConstante)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 08h52   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 620
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 620
Points : 30 945
Points : 30 945
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 00h15   #5
Invité de passage
 
Inscription : mars 2010
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 39
Points : 3
Points : 3
Par exemple, j'ai ça :


Code :
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).

Citation:
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 ?
Sylv3D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 03h51   #6
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 620
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 620
Points : 30 945
Points : 30 945
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 12h35   #7
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
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 :
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 :
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 :
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 :
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é.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 05h21   #8
Invité de passage
 
Inscription : mars 2010
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 39
Points : 3
Points : 3
Merci pour vos réponses, j'y vois plus clair maintenant !
Sylv3D est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h10.


 
 
 
 
Partenaires

Hébergement Web