Portée d'une variable déclaré avec Set

Le
Xavier powaga
Bonjour,
j'utilise dans mon programme un lien avec une base access

J'aurais souhaité ouvrir ma base au début du programme ainsi

Private Sub UserForm_Activate()
Set sessionDB = DBEngine.Workspaces(0)
Set DB = sessionDB.opendatabase(ThisWorkbook.Path & "Capitalisation.MDB")
Set Requete = DB.QueryDefs("ChercheRegime")
Requete.Sql = "SELECT * FROM regime WHERE [N°Demande]=""" & d & """"
Set db_regime = DB.OpenRecordset("ChercheRegime", dbopendynaset)


le problème c'est malgé que j'ai défini en haut du module les paramètres
suivants
Public db_regime As Recordset
Public DB As Database
Public Requete As QueryDef

Ya rien à faire mes variables ne sont pas reconnues dans les autres
procédures et il faut que je les redéclarent dans chaque procédure ce qui
fait ramer mon programme

Y a t'il une solution ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #5236111
| Ya rien à faire mes variables ne sont pas reconnues dans les autres
| procédures et il faut que je les redéclarent dans chaque procédure ce qui
| fait ramer mon programme

Quand tu déclares une variable comme "Public" dans un module de classe
(ce qu'est un formulaire, le ThisWorkbook, le module feuille de chaque feuille),
ce que tu obtiens ce n'est pas une variable mais une propriété appartenant au
module de classe. Si tu utilises cette propriété (ce que tu appelles ta variable)
à l'extérieur du module Formulaire, tu dois appeler ta variable en utilisant devant
celle dernière le nom du module de classe où tu l'a déclaré... si tu utilise
seulement le nom de la variable(Propriété), elle retourne "Rien"

à l'extérieur du module formulaire :
Userform1.MaVariable

Dans le formulaire lui-même, tu peux te contenter du nom de MaVariable





"Xavier powaga" 47c88f7e$0$17290$
Bonjour,
j'utilise dans mon programme un lien avec une base access

J'aurais souhaité ouvrir ma base au début du programme ainsi

Private Sub UserForm_Activate()
Set sessionDB = DBEngine.Workspaces(0)
Set DB = sessionDB.opendatabase(ThisWorkbook.Path & "Capitalisation.MDB")
Set Requete = DB.QueryDefs("ChercheRegime")
Requete.Sql = "SELECT * FROM regime WHERE [N°Demande]=""" & d & """"
Set db_regime = DB.OpenRecordset("ChercheRegime", dbopendynaset)


le problème c'est malgé que j'ai défini en haut du module les paramètres
suivants
Public db_regime As Recordset
Public DB As Database
Public Requete As QueryDef

Ya rien à faire mes variables ne sont pas reconnues dans les autres
procédures et il faut que je les redéclarent dans chaque procédure ce qui
fait ramer mon programme

Y a t'il une solution ?
Xavier powaga
Le #5236041
Merci pour la réponse mais je pense pas que ce soit là mon pb

en effet mes variables ont été définit dans le module de la form, elle sont
initialisées à l'activation de la form et elles ne sont pas reconnues dans
les autres procédures de la Form.

Je pense que le pb vient de la déclaration par Set qui n'assigne pas l'objet
à la valeur mais à la référence. Mais à part dire ça je sais pas quoi dire
d'autre. pourquoi perd il la référence dans une autre procédure?



"MichDenis"
| Ya rien à faire mes variables ne sont pas reconnues dans les autres
| procédures et il faut que je les redéclarent dans chaque procédure ce
qui
| fait ramer mon programme

Quand tu déclares une variable comme "Public" dans un module de classe
(ce qu'est un formulaire, le ThisWorkbook, le module feuille de chaque
feuille),
ce que tu obtiens ce n'est pas une variable mais une propriété appartenant
au
module de classe. Si tu utilises cette propriété (ce que tu appelles ta
variable)
à l'extérieur du module Formulaire, tu dois appeler ta variable en
utilisant devant
celle dernière le nom du module de classe où tu l'a déclaré... si tu
utilise
seulement le nom de la variable(Propriété), elle retourne "Rien"

à l'extérieur du module formulaire :
Userform1.MaVariable

Dans le formulaire lui-même, tu peux te contenter du nom de MaVariable





"Xavier powaga" 47c88f7e$0$17290$
Bonjour,
j'utilise dans mon programme un lien avec une base access

J'aurais souhaité ouvrir ma base au début du programme ainsi

Private Sub UserForm_Activate()
Set sessionDB = DBEngine.Workspaces(0)
Set DB = sessionDB.opendatabase(ThisWorkbook.Path & "Capitalisation.MDB")
Set Requete = DB.QueryDefs("ChercheRegime")
Requete.Sql = "SELECT * FROM regime WHERE [N°Demande]=""" & d & """"
Set db_regime = DB.OpenRecordset("ChercheRegime", dbopendynaset)


le problème c'est malgé que j'ai défini en haut du module les paramètres
suivants
Public db_regime As Recordset
Public DB As Database
Public Requete As QueryDef

Ya rien à faire mes variables ne sont pas reconnues dans les autres
procédures et il faut que je les redéclarent dans chaque procédure ce qui
fait ramer mon programme

Y a t'il une solution ?





MichDenis
Le #5235931
| en effet mes variables ont été définit dans le module de la form, elle sont
| initialisées à l'activation de la form et elles ne sont pas reconnues dans
| les autres procédures de la Form.

Si tu veux utiliser la même variable dans plusieurs procédures de ton formulaire :

A ) Tes variables doivent être défini dans le haut du module de ton formulaire

Public db_regime As Recordset
Public DB As Database
Public Requete As QueryDef

B ) Dans toutes tes procédures, tu ne dois pas déclaré une variable au niveau de
la procédure portant le même nom que tes variables déclarées dans le
haut ton formulaire car excel utilisera la variable déclarée au niveau de la procédure au lieu
de la variable définie au niveau du module. Elle a préséance.

C ) Évidemment, la bibliothèque DAO 3.6 Objets Librairy doit être ajouté à ton programme.

D ) Si dans le même fichier, tu utilises DAO et ADO, lors de la déclaration de tes
variables, utilise la référence à la bibliothèque devant ta variable pour t'assurer de
ne pas confoncre Excel comme dans cette exemple :
Public Rst As dao.Recordset -> référence à la bibliothèque DAO
Public Rst As Ado.Recordset -> référence à la bibliothèque ADO

Si ton problème persiste, il est d'une toute autre nature ! à moins que tu aies oublié
de mentionner quelque chose dans la description de ton problème.




"Xavier powaga" 47c92057$0$22196$
Merci pour la réponse mais je pense pas que ce soit là mon pb

en effet mes variables ont été définit dans le module de la form, elle sont
initialisées à l'activation de la form et elles ne sont pas reconnues dans
les autres procédures de la Form.

Je pense que le pb vient de la déclaration par Set qui n'assigne pas l'objet
à la valeur mais à la référence. Mais à part dire ça je sais pas quoi dire
d'autre. pourquoi perd il la référence dans une autre procédure?



"MichDenis"
| Ya rien à faire mes variables ne sont pas reconnues dans les autres
| procédures et il faut que je les redéclarent dans chaque procédure ce
qui
| fait ramer mon programme

Quand tu déclares une variable comme "Public" dans un module de classe
(ce qu'est un formulaire, le ThisWorkbook, le module feuille de chaque
feuille),
ce que tu obtiens ce n'est pas une variable mais une propriété appartenant
au
module de classe. Si tu utilises cette propriété (ce que tu appelles ta
variable)
à l'extérieur du module Formulaire, tu dois appeler ta variable en
utilisant devant
celle dernière le nom du module de classe où tu l'a déclaré... si tu
utilise
seulement le nom de la variable(Propriété), elle retourne "Rien"

à l'extérieur du module formulaire :
Userform1.MaVariable

Dans le formulaire lui-même, tu peux te contenter du nom de MaVariable





"Xavier powaga" 47c88f7e$0$17290$
Bonjour,
j'utilise dans mon programme un lien avec une base access

J'aurais souhaité ouvrir ma base au début du programme ainsi

Private Sub UserForm_Activate()
Set sessionDB = DBEngine.Workspaces(0)
Set DB = sessionDB.opendatabase(ThisWorkbook.Path & "Capitalisation.MDB")
Set Requete = DB.QueryDefs("ChercheRegime")
Requete.Sql = "SELECT * FROM regime WHERE [N°Demande]=""" & d & """"
Set db_regime = DB.OpenRecordset("ChercheRegime", dbopendynaset)


le problème c'est malgé que j'ai défini en haut du module les paramètres
suivants
Public db_regime As Recordset
Public DB As Database
Public Requete As QueryDef

Ya rien à faire mes variables ne sont pas reconnues dans les autres
procédures et il faut que je les redéclarent dans chaque procédure ce qui
fait ramer mon programme

Y a t'il une solution ?





Frédéric Sigonneau
Le #5235921
Effectivement, si tes autres procédures sont bien _dans le même module de code_
(celui de ton userform), ce n'est pas normal (peut-être une référence manquante
vers Access mais ça devrait faire une erreur...).
Sinon (si tes procédures sont dans d'autres modules), Denis a raison et dans ce
cas, ajoute un module ordinaire à ton projet et confie-lui tes 3 déclarations,
ça devrait régler le problème.
Dans tous les cas, ça ne coûte pas grand chose d'essayer :)

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Merci pour la réponse mais je pense pas que ce soit là mon pb

en effet mes variables ont été définit dans le module de la form, elle sont
initialisées à l'activation de la form et elles ne sont pas reconnues dans
les autres procédures de la Form.

Je pense que le pb vient de la déclaration par Set qui n'assigne pas l'objet
à la valeur mais à la référence. Mais à part dire ça je sais pas quoi dire
d'autre. pourquoi perd il la référence dans une autre procédure?



"MichDenis"
| Ya rien à faire mes variables ne sont pas reconnues dans les autres
| procédures et il faut que je les redéclarent dans chaque procédure ce
qui
| fait ramer mon programme

Quand tu déclares une variable comme "Public" dans un module de classe
(ce qu'est un formulaire, le ThisWorkbook, le module feuille de chaque
feuille),
ce que tu obtiens ce n'est pas une variable mais une propriété appartenant
au
module de classe. Si tu utilises cette propriété (ce que tu appelles ta
variable)
à l'extérieur du module Formulaire, tu dois appeler ta variable en
utilisant devant
celle dernière le nom du module de classe où tu l'a déclaré... si tu
utilise
seulement le nom de la variable(Propriété), elle retourne "Rien"

à l'extérieur du module formulaire :
Userform1.MaVariable

Dans le formulaire lui-même, tu peux te contenter du nom de MaVariable





"Xavier powaga" 47c88f7e$0$17290$
Bonjour,
j'utilise dans mon programme un lien avec une base access

J'aurais souhaité ouvrir ma base au début du programme ainsi

Private Sub UserForm_Activate()
Set sessionDB = DBEngine.Workspaces(0)
Set DB = sessionDB.opendatabase(ThisWorkbook.Path & "Capitalisation.MDB")
Set Requete = DB.QueryDefs("ChercheRegime")
Requete.Sql = "SELECT * FROM regime WHERE [N°Demande]=""" & d & """"
Set db_regime = DB.OpenRecordset("ChercheRegime", dbopendynaset)


le problème c'est malgé que j'ai défini en haut du module les paramètres
suivants
Public db_regime As Recordset
Public DB As Database
Public Requete As QueryDef

Ya rien à faire mes variables ne sont pas reconnues dans les autres
procédures et il faut que je les redéclarent dans chaque procédure ce qui
fait ramer mon programme

Y a t'il une solution ?









Publicité
Poster une réponse
Anonyme