Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 28/07/2011, 10h05   #1
Nouveau Membre du Club
 
Homme
ingénieur essais électronique
Inscription : mai 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : ingénieur essais électronique
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 128
Points : 37
Points : 37
Par défaut probleme variable public

Bonjour,

Je possede une variable str_constructeur déclaré public dans un module.

Code :
1
2
 
Public str_constructeur As String
Cette variable est ensuite utilisée en vba (form_load) dans in if pour afficher certain champ en fonction de sa valeur.

Code :
1
2
3
4
5
6
7
8
9
10
11
 
If str_constructeur = "toto" Then
 
x1.enabled=true
x2.enabled=false
 
ElseIf str_constructeur = "tata" Then
 
x1.enabled=false
x2.enabled=true
End If
C'est très bizarre.

Lorsque je met un point d'arrêt sur la ligne else if + affichage de la valeur de str_constructeur, sa valeur est bonne et sa marche.
Si je ne met pas le point d'arret, sa ne marche pas.

Je ne comprend pas.
sylv20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 10h59   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 651
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 651
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bonjour,

Comment et où est alimentée str_constructeur ?
Depuis où ouvres-tu le formulaire ?

Essaye plutôt ce code depuis ton module :
Code :
1
2
3
4
5
6
7
Public str_constructeur As String
 
Sub testSylv20()
    DoCmd.Close acForm, "FormSylv20", acSaveNo
    str_constructeur = "tata"
    DoCmd.OpenForm "FormSylv20", acNormal, , , acFormEdit, acDialog
End Sub
en appuyant sur F5 depuis cette procédure...

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 11h01   #3
Nouveau Membre du Club
 
Homme
ingénieur essais électronique
Inscription : mai 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : ingénieur essais électronique
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 128
Points : 37
Points : 37
J'ai un formulaire générale qui s'ouvre, c'est à ce moment là qu'est alimenté str_constructeur.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
'formulaire general
 
Private Sub Form_Load()
 
'variable public
str_num_proto = txt_num_proto.Value
str_constructeur = txt_constructeur.Value
str_type_BV = txt_type_bv.Value
int_nbr_heure_tracteur = txt_nbr_heure_tracteur.Value
 
...
 
'sous formulaire
Private Sub Form_Load()
 
If str_constructeur = "toto" Then
 
x1.enabled=true
x2.enabled=false
 
ElseIf str_constructeur = "tata" Then
 
x1.enabled=false
x2.enabled=true
End If
 
...
Ensuite le code précédent est utilisé lors du form load d'un sous formulaire.
sylv20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 11h10   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 651
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 651
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Ah, OK,...
C'est un peu pof pof comme façon d'écrire, mais bon...

Mais, sache que le Load d'un sous-formulaire et déclenché avant le Load de son formulaire parent.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 11h11   #5
Nouveau Membre du Club
 
Homme
ingénieur essais électronique
Inscription : mai 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : ingénieur essais électronique
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 128
Points : 37
Points : 37
ok je comprend donc:

Lors du load de mon sous formulaire, ma variable n'est pas attribué ? c'est cà ?

Mais alors a quel moment affecter mes variables public car les infos utiles se situent sur le formulaire et non dans le sous formulaires.

Je dois connaitre mes valeurs de variables globales avant le lancement du sous formulaire pour afficher tel ou tel case hors ces valeurs sont dans le formulaires parents.

Pour le moment je me suis dépatouillé. Dans le sous_form_load, je n'utilise pas les variables public, j'utilise les controles du formulaire parent.

Code :
1
2
3
4
 
if Forms![fiche tracteur]![txt_constructeur]="tata" then
 
...
Eux sont accessibles alors que le form load parent n'est pas encore lancé (cf ce que tu m'as expliqué).

Ou alors affecter mes variables public dans le sous_form_load.

Code :
1
2
3
4
5
6
 
str_constructeur=Forms![fiche tracteur]![txt_constructeur]
 
if str_constructeur="toto" then
 
...
Qu'en penses tu ???? Quelle est la meilleur solution ?

Je pense que c'est encore trop "pof pof" pour toi mais je ne sait pas comment faire autrement.

Peux tu me dire comment tu ferais ?

PS: le formulaire parent s'ouvre par le biais d'une requete.
sylv20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 09h47   #6
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 651
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 651
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Tout simplement comme ceci :
Code :
1
2
3
4
5
6
7
8
Private Sub Form_Load()
    str_num_proto = txt_num_proto.Value
    str_constructeur = txt_constructeur.Value
    str_type_BV = txt_type_bv.Value
    int_nbr_heure_tracteur = txt_nbr
    Form_SousFormName.x1.Enabled = (str_constructeur = "Toto")
    Form_SousFormName.X2.Enabled = Not (str_constructeur = "Toto")
End Sub
  • Seule condition pour que ce soit possible, faire en sorte que le formulaire Objet visé possède au moins une procédure VBA, ce qui est le cas pour ton sous-formulaire.
  • Fais alors en sorte de remplacer "Form_SousFormName" par le nom de l'objet représentant ton sous-formulaire en tant qu'objet dans VBE.
Argy

P.S. Donc le fait de rendre Public ta variable est dorénavant superflu.
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 13h54   #7
Nouveau Membre du Club
 
Homme
ingénieur essais électronique
Inscription : mai 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : ingénieur essais électronique
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 128
Points : 37
Points : 37
oula tu m'as devancer.

Je ne comprend pas ou intervient mon if dans :

Code :
1
2
3
4
 
 
    Form_SousFormName.x1.Enabled = (str_constructeur = "Toto")
    Form_SousFormName.X2.Enabled = Not (str_constructeur = "Toto")
A la base j'avais :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
if str_constructeur = "Toto" thne
 
x1.enabled = true
x2.enabled = false
 
else
 
x1.enabled= false
x2.enabled= true.
 
end if
sylv20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 14h18   #8
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 651
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 651
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
C'est ce que l'on appel un If Implicite.
Par exemple :
Code :
1
2
Bool = ("Argyronet" = "Jean-Philippe AMBROSINO")
'Renvoie Vrai
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 14h26   #9
Nouveau Membre du Club
 
Homme
ingénieur essais électronique
Inscription : mai 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : ingénieur essais électronique
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 128
Points : 37
Points : 37
Ah ouai....Désolé je débarque complet, je ne connaissais pas cette maniere d'écrire, du coup ca n'avait pas de sens.

Je ne comprend pas non plus tres bien ceci :

Code :
1
2
3
 
 
Form_SousFormName.x1.Enabled
Mon sous formulaire est Configuration électronique

Dois je noter :

Code :
1
2
3
4
5
6
7
8
9
10
 
[Configuration électronique].x1.enabled ?
 
ou 
 
Forms![Configuration électronique].x1 ?
 
ou
 
Forms![Configuration électronique]![x1] ?
sylv20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 14h58   #10
Nouveau Membre du Club
 
Homme
ingénieur essais électronique
Inscription : mai 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : ingénieur essais électronique
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 128
Points : 37
Points : 37
Ca yest c'est bon :

Code :
1
2
3
 
 
Forms![Fiche tracteur]![frm_configuration_electronique].Form![txt_ess].Enabled = True
C'est bien le nom du cadre dans le formulaire qu'il faut mettre
sylv20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h01   #11
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 651
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 651
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Eh non, tu n'as pas bien lu...
Déjà, mauvais point pour toi, tu as mis un espace dans un nom d'objet avec en plus un accent et ça c'est mal !
Ca t'obliges à mettre des [] et en plus ce n'est pas conforme...
Donc, supprime l'espace et prefixe-le, ce sera déjà un bon pas...
Ensuite, la syntaxe devra être :
Code :
Form_frmConfigurationElectronique.x1.Enabled = ...
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h19   #12
Nouveau Membre du Club
 
Homme
ingénieur essais électronique
Inscription : mai 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : ingénieur essais électronique
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 128
Points : 37
Points : 37
Tu n'avais peut être pas fait attention mais j'avais trouvé au message précédent.

En effet ce que je fais sur ma base en ce moment c'est de mettre tout bien pour la typographie (cbo, txt, frm, mst etc...), optimisé le code et faire au mieux.
Cette a base a évolué au fur et à mesure, j'apprend des choses qui aurait pu m'être utile par le passé que je ne savais pas faire. Du coup, je les refait mieu.

Configuration électronique, c'est le nom du formulaire

frm_configuration_electronique, c'est le nom de l'emplacement dans le formulaire fiche tracteur.

PARFAIT. Merci pour tout argyronet et merci pour mdbviewer j'adore ce logiciel qui permet de voir les utilisateurs. Il est très bien fait.
sylv20 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 13h49.


 
 
 
 
Partenaires

Hébergement Web