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

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

4 réponses
Avatar
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 ?

4 réponses

Avatar
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" a écrit dans le message de news:
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 ?
Avatar
Xavier powaga
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" a écrit dans le message de news:

| 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" a écrit dans le message de news:
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 ?





Avatar
MichDenis
| 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" a écrit dans le message de news:
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" a écrit dans le message de news:

| 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" a écrit dans le message de news:
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 ?





Avatar
Frédéric Sigonneau
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" a écrit dans le message de news:

| 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" a écrit dans le message de news:
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 ?