Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tranfert de variable

5 réponses
Avatar
Mac Ab and O'Canada
Bonsoir,
j'ai un problème que je n'arrive pas à résoudre seul:

J'ai une fonction publique avec GetOpenFileName qui me met le nom du fichier
choisi dans la variable "fichier".
Je dois récupérer ce nom dans une autre macro qui apelle la fonction
précédente.
Seulement, au retour de la fonction, ma variable "fichier" ne contient rien.
J'ai tenté de la déclarer publique, mais cela ne change rien.
Quelqu'un saurait il me dire comment faire?
Mes recherches n'ont rien donné...
Merci

Mac Ab, chercheur...

--
Remplacez le 1 dans l'@ par un " i " pour répondre


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.502 / Virus Database: 300 - Release Date: 18/07/2003

5 réponses

Avatar
Pierre Fauconnier
Bonsoir

Si tu souhaites déclarer ta variable publique, tu dois la dimensionner EN
DEBUT de module standard, avant toute procédure ou fonction, et après
l'éventuelle ( et conseillée!!) ligne Option Explicit

Cette solution rend ta variable publique et donc utilisable par n'importe
quelle fonction ou procédure de n'importe quel module de ton projet vba.

Une autre technique est de passer la valeur en argument de la procédure qui
en a besoin

Sub Proc1()
Dim Variable1 as String
Variable1 = "Pierre"
Proc2 Variable1
...
End Sub

Sub Proc2(VarProc2 as String)
MsgBox VarProc2
...
End Sub

Sub ProcGen()
Proc1
Proc2
...
End Sub

Si tu lances ProcGen, tu auras un message à l'écran affichant Pierre.


--
Cela convient-il?
----
Pierre Fauconnier
"N'insulte pas le crocodile avant d'avoir traversé la rivière" (Julos
Beaucarne)

Mac Ab and O'Canada wrote:
Bonsoir,
j'ai un problème que je n'arrive pas à résoudre seul:

J'ai une fonction publique avec GetOpenFileName qui me met le nom du
fichier choisi dans la variable "fichier".
Je dois récupérer ce nom dans une autre macro qui apelle la fonction
précédente.
Seulement, au retour de la fonction, ma variable "fichier" ne
contient rien. J'ai tenté de la déclarer publique, mais cela ne
change rien. Quelqu'un saurait il me dire comment faire?
Mes recherches n'ont rien donné...
Merci

Mac Ab, chercheur...


Avatar
Frédéric Sigonneau
Bonsoir,

Pour utiliser la valeur d'une variable entre deux procédures :

'dans un module standard==========
Public Fichier$

Sub Choisis()
Dim tmp$
Fichier = Application.GetOpenFilename
If Dir(Fichier) = "" Then
Fichier = "Aucun fichier choisi"
End If
End Sub

Sub test()
Fichier = ""
Choisis
MsgBox Fichier
End Sub
'=================================
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonsoir,
j'ai un problème que je n'arrive pas à résoudre seul:

J'ai une fonction publique avec GetOpenFileName qui me met le nom du fichier
choisi dans la variable "fichier".
Je dois récupérer ce nom dans une autre macro qui apelle la fonction
précédente.
Seulement, au retour de la fonction, ma variable "fichier" ne contient rien.
J'ai tenté de la déclarer publique, mais cela ne change rien.
Quelqu'un saurait il me dire comment faire?
Mes recherches n'ont rien donné...
Merci

Mac Ab, chercheur...

--
Remplacez le 1 dans l'@ par un " i " pour répondre

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.502 / Virus Database: 300 - Release Date: 18/07/2003


Avatar
Mac Ab and O'Canada
Merci. Je viens de trouver d'où vient le problème.
Il faut déclarer la variable public, dans le module qui utilise
getopenfilename et non pas, comme je le faisais, dans le module qui
l'appelle... Tout bête, mais je ne l'avais lu nulle part. Je pensais que
c'était définitif pour toute l'application, quel que soit l'endroit déclaré.
Apparament pas.
Merci encore

Mac Ab, content...

--
Remplacez le 1 dans l'@ par un " i " pour répondre

"Pierre Fauconnier" a écrit dans le message de
news:
Bonsoir

Si tu souhaites déclarer ta variable publique, tu dois la dimensionner EN
DEBUT de module standard, avant toute procédure ou fonction, et après
l'éventuelle ( et conseillée!!) ligne Option Explicit

Cette solution rend ta variable publique et donc utilisable par n'importe
quelle fonction ou procédure de n'importe quel module de ton projet vba.

Une autre technique est de passer la valeur en argument de la procédure
qui

en a besoin

Sub Proc1()
Dim Variable1 as String
Variable1 = "Pierre"
Proc2 Variable1
...
End Sub

Sub Proc2(VarProc2 as String)
MsgBox VarProc2
...
End Sub

Sub ProcGen()
Proc1
Proc2
...
End Sub

Si tu lances ProcGen, tu auras un message à l'écran affichant Pierre.


--
Cela convient-il?
----
Pierre Fauconnier
"N'insulte pas le crocodile avant d'avoir traversé la rivière" (Julos
Beaucarne)





---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.502 / Virus Database: 300 - Release Date: 18/07/2003

Avatar
Pierre Fauconnier
C'est vrai si le module appelant est un module de classe ( module de
feuille, de classeur, de userform ou de classe personnalisée). sinon, une
variable déclarée Public en début de n'importe quel module standard est
utilisable par l'ensemble des modules du projet, que ces modules soient des
modules de classe ou des modules standard...

Pierre

Mac Ab and O'Canada wrote:
Merci. Je viens de trouver d'où vient le problème.
Il faut déclarer la variable public, dans le module qui utilise
getopenfilename et non pas, comme je le faisais, dans le module qui
l'appelle... Tout bête, mais je ne l'avais lu nulle part. Je pensais
que c'était définitif pour toute l'application, quel que soit
l'endroit déclaré. Apparament pas.
Merci encore

Mac Ab, content...


"Pierre Fauconnier" a écrit dans le
message de news:
Bonsoir

Si tu souhaites déclarer ta variable publique, tu dois la
dimensionner EN DEBUT de module standard, avant toute procédure ou
fonction, et après l'éventuelle ( et conseillée!!) ligne Option
Explicit

Cette solution rend ta variable publique et donc utilisable par
n'importe quelle fonction ou procédure de n'importe quel module de
ton projet vba.

Une autre technique est de passer la valeur en argument de la
procédure qui en a besoin

Sub Proc1()
Dim Variable1 as String
Variable1 = "Pierre"
Proc2 Variable1
...
End Sub

Sub Proc2(VarProc2 as String)
MsgBox VarProc2
...
End Sub

Sub ProcGen()
Proc1
Proc2
...
End Sub

Si tu lances ProcGen, tu auras un message à l'écran affichant Pierre.


--
Cela convient-il?
----
Pierre Fauconnier
"N'insulte pas le crocodile avant d'avoir traversé la rivière" (Julos
Beaucarne)





---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.502 / Virus Database: 300 - Release Date: 18/07/2003



Avatar
gee-dee-
;-)))
Bonsoir,
$=String
Le type de données String peut stocker des chaînes de longueur fixe dont la
longueur est comprise entre 0 et environ 63 Ko de caractères et des chaînes
dynamiques dont la longueur est comprise entre 0 et environ 2 milliards de
caractères. Dans Visual Basic, le signe dollar ($) est le caractère de
déclaration du type String.

et puis aussi :
&=Long (entier long) stocké sur 4 octets
valeurs de -2 147 483 648
à 2 147 483 647


@=Currency Type de données dont la plage de valeurs s'étend de -922 337 203
685 477,5808 à 922 337 203 685 477,5807. Ce type de données est utilisé dans
les calculs monétaires ou dans les calculs à virgule fixe pour lesquels une
grande précision est requise. Dans Visual Basic, le signe @ est le caractère
de déclaration du type Currency.

@+


"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Pourrais tu m'expliquer le role des $ dans le module? c'est pour les
déclarer en tant que "string"?


Exact. En fait c'est la façon qu'avait le BASIC d'origine de définir
une variable de type "String". Cette façon s,est perpétuée jusqu'à nos
jours.

Juste pour le fun:

% = Integer
# = Double précision
! = Simple précision