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 14/04/2011, 19h13   #1
Nouveau Membre du Club
 
Quimby Maire
Inscription : décembre 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Quimby Maire

Informations forums :
Inscription : décembre 2009
Messages : 58
Points : 32
Points : 32
Par défaut Public et Private sub

Bonjour,

j'ai déclaré des paramètres dans un module public, mais quand j'utilise une procédure privé, la valeur retourné est vide.

Comment transféré des valeurs d'un module à l'autre

Code :
1
2
3
4
Public Function baseSQL(requete As String)
 
If Me.cdrStatut.Value = 2 Then
Statut = "((tb_usagers_uniques.statut_dossier)= ""Inscrit"")"
mais dans ma macro privé, l'élément statut n,est pas pris en compte

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub txt_A03_DblClick(Cancel As Integer)
 
chSQL = "SELECT tb_usagers_uniques.no_dossier, tb_usagers_uniques.usager_nom_prenom, tb_usagers_uniques.statut_dossier, tb_prog_serv.programme_service, " _
& "tb_prog_serv.unite_adm_3 " & Regroupement & " " _
& "FROM (((((tb_usagers_uniques LEFT JOIN tb_prog_serv ON tb_usagers_uniques.no_dossier = tb_prog_serv.no_dossier) LEFT JOIN tb_ressources ON tb_usagers_uniques.no_dossier = tb_ressources.no_dossier) " _
& "LEFT JOIN tb_personne_lien ON tb_usagers_uniques.no_dossier = tb_personne_lien.no_dossier) LEFT JOIN tb_milieu_service ON tb_usagers_uniques.no_dossier = tb_milieu_service.no_dossier) " _
& "LEFT JOIN tb_intervenants ON tb_usagers_uniques.no_dossier = tb_intervenants.no_dossier) " _
& "LEFT JOIN tb_disciplines ON tb_usagers_uniques.no_dossier = tb_disciplines.no_dossier GROUP BY tb_usagers_uniques.no_dossier, tb_usagers_uniques.usager_nom_prenom, tb_usagers_uniques.statut_dossier, " _
& "tb_prog_serv.programme_service, tb_prog_serv.unite_adm_3 " & Regroupement & " " _
& "HAVING (" & Statut & " AND ((tb_prog_serv.programme_service)=""Adapt / Réad DI"") AND ((tb_prog_serv.unite_adm_3)=""Adap_Réad Est 0-6 ans""));"
 
 
Call baseSQL(chSQL)
 
 
End Sub
CEPENDANT, si j'ajoute le tout dans ma macro privé, tout fonctionne OK

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub txt_A03_DblClick(Cancel As Integer)
 
If Me.cdrStatut.Value = 2 Then
Statut = "((tb_usagers_uniques.statut_dossier)= ""Inscrit"")"
End If
 
 
chSQL = "SELECT tb_usagers_uniques.no_dossier, tb_usagers_uniques.usager_nom_prenom, tb_usagers_uniques.statut_dossier, tb_prog_serv.programme_service, " _
& "tb_prog_serv.unite_adm_3 " & Regroupement & " " _
& "FROM (((((tb_usagers_uniques LEFT JOIN tb_prog_serv ON tb_usagers_uniques.no_dossier = tb_prog_serv.no_dossier) LEFT JOIN tb_ressources ON tb_usagers_uniques.no_dossier = tb_ressources.no_dossier) " _
& "LEFT JOIN tb_personne_lien ON tb_usagers_uniques.no_dossier = tb_personne_lien.no_dossier) LEFT JOIN tb_milieu_service ON tb_usagers_uniques.no_dossier = tb_milieu_service.no_dossier) " _
& "LEFT JOIN tb_intervenants ON tb_usagers_uniques.no_dossier = tb_intervenants.no_dossier) " _
& "LEFT JOIN tb_disciplines ON tb_usagers_uniques.no_dossier = tb_disciplines.no_dossier GROUP BY tb_usagers_uniques.no_dossier, tb_usagers_uniques.usager_nom_prenom, tb_usagers_uniques.statut_dossier, " _
& "tb_prog_serv.programme_service, tb_prog_serv.unite_adm_3 " & Regroupement & " " _
& "HAVING (" & Statut & " AND ((tb_prog_serv.programme_service)=""Adapt / Réad DI"") AND ((tb_prog_serv.unite_adm_3)=""Adap_Réad Est 0-6 ans""));"
 
 
Call baseSQL(chSQL)
 
 
End Sub
Mais comme je vais faire près de 100 requetes et que Statut est suceptible de changer, je ne sais pas trop comment m'y prendre.

quelqu'un peut-il m'aider SVP.

Mairequimby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 21h27   #2
Membre régulier
 
Homme Bruno Escaron
Inscription : janvier 2010
Messages : 84
Détails du profil
Informations personnelles :
Nom : Homme Bruno Escaron
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 84
Points : 96
Points : 96
J'ai pas bien compris ton problème, mais je peux te dire que :
Ce n'est pas parce-que ta procédure est publique que les variables à l'intérieur sont publiques et gardes leurs valeurs.
Pour ça il faut déclarer ta variable avant ta procédure ainsi la variable est publique est garde ça valeur.

Code :
1
2
3
4
5
6
7
8
9
10
11
VBA 
public Var1 as string
 
Public sub Coucou () 
   Var1 = 10
end sub
 
Private Sub Pouet()
  'Var1 reste diponible ! 
  Msgbox Var1 
end sub

En espérant t'aider.
B_SKO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 15h21   #3
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
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 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bonjour,

Il n'est nul besoin d'avoir du Public et du Private dans ton cas...
Il inutile de poser une fonction publique dans un module que si cette fonction est générique d'une part et qu'elle est utilisée par plusieurs objets (forms, reports...).
Tu dois garder une fonction locale mais par contre, il te faut peaufiner le code.
  • Déjà oublie les "" "" pour les strings ; utilises plutôt '" "' c'est + normalisé.
  • Ensuite nomme tes fonctions et tes contrôles de manière à ce que ce soit compréhensible... baseSQL(), ça signifie ???
  • Le HAVING ne va pas sans GROUP BY donc si ton cdrStatut est différents de 2, ta requête va générer une erreur (enfin telle que je la lis ici).
  • ...
En fait, il te faut concevoir une fonction qui construit ta requête de façon dynamique et générique.

Par exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function ConstruitChaineSQL(ByVal Statut As String, ByVal ProgrammeService As String, ByVal UniteAdm3 As String) As String
Dim chSQL                                              As String
    chSQL = "SELECT UU.no_dossier, UU.usager_nom_prenom, UU.statut_dossier, PRG.programme_service, PRG.unite_adm_3 " & Regroupement & " "
    chSQL = chSQL & "FROM ((((( tb_usagers_uniques AS UU LEFT JOIN tb_prog_serv AS PRG ON UU.no_dossier = PRG.no_dossier) "
    chSQL = chSQL & "LEFT JOIN tb_ressources AS RSC ON UU.no_dossier = RSC.no_dossier) "
    chSQL = chSQL & "LEFT JOIN tb_personne_lien AS PERS ON UU.no_dossier = PERS.no_dossier) "
    chSQL = chSQL & "LEFT JOIN tb_milieu_service ON UU.no_dossier = tb_milieu_service.no_dossier) "
    chSQL = chSQL & "LEFT JOIN tb_intervenants AS INTV ON UU.no_dossier = INTV.no_dossier) "
    chSQL = chSQL & "LEFT JOIN tb_disciplines AS DSCP ON UU.no_dossier = DSCP.no_dossier "
    chSQL = chSQL & "GROUP BY UU.usager_nom_prenom, UU.statut_dossier, PRG.programme_service, PRG.unite_adm_3 " & Regroupement & " "
    If Len(Statut) Then
        chSQL = chSQL & ", UU.no_dossier "
    End If
    chSQL = chSQL & "HAVING  (PRG.programme_service='" & ProgrammeService & "') AND (PRG.unite_adm_3='" & UniteAdm3 & "') "
    If Len(Statut) Then
        chSQL = chSQL & " AND (UU.statut_dossier= '" & Statut & "')"
    End If
 
    ConstruitChaineSQL = chSQL
End Function
Que tu utilises par exemple comme suit :

Code :
Me.RecordSource = ConstruitChaineSQL( "Inscrit", "Adapt / Réad DI", "Adap_Réad Est 0-6 ans")

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 16/04/2011, 05h03   #4
Nouveau Membre du Club
 
Quimby Maire
Inscription : décembre 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Quimby Maire

Informations forums :
Inscription : décembre 2009
Messages : 58
Points : 32
Points : 32
Merci, j'ai travaillé toute la journée la dessus et j'ai fait comme tu as indiqué et tout va bien. Merci!
Mairequimby 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 01h21.


 
 
 
 
Partenaires

Hébergement Web