Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
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 29/01/2012, 19h21   #1
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 4
Points : 4
Par défaut Pb récupération variable OpenArg

Bonsoir à tous,

Je coince cette fois sur une variable à transmettre de la fermeture d'un formulaire vers l'ouverture d'un autre.

Je suis sur une fiche Etat Civil client, j'exécute :

Code :
1
2
3
4
5
Private Sub BT_Suivant_Click()
 
    DoCmd.OpenForm "Formulaire_FichePatient", acNormal, , "[ID_Patient] = " & Me.[ID_Patient], , , [ID_Patient]
 
End Sub
Dans le second formulaire, un filtre se charge bien contenant [ID_Patient] = XXXX, mais pas dans un controle listbox indépendant chargé par une requête.

Donc je me dis, pas grave, je récupère la variable avec OpenArgs, et je l'incorpore à ma requête.

Ce qui me donne :

Code :
1
2
3
4
5
6
Private Sub Form_Load()
 
    Dim PatientEnCours As Integer
    PatientEnCours = Me.OpenArgs
 
End Sub
Et pour la requête :

Code sql :
1
2
3
4
SELECT Fiches.ID_Fiche, Fiches.ID_Patient, Fiches.TypeFiche, Fiches.DateFiche, Fiches.ScanFiche, Fiches.ScanOrdo, Fiches.Resume, Examinateur.Nom_Examinateur
FROM Patients INNER JOIN (Examinateur INNER JOIN Fiches ON Examinateur.ID_Examinateur = Fiches.ID_Examinateur) ON Patients.ID_Patient = Fiches.ID_Patient
WHERE (((Fiches.ID_Patient)=[PatientEnCours]))
ORDER BY Fiches.DateFiche;


Mais ca ne fonctionne pas, ça m'ouvre une MsgBox qui me demande la valeur PatientEnCours après avoir cliqué sur le bouton qui ferme le 1er et ouvre le 2e formulaire. (par contre après, en entrant manuellement, ca filtre comme il faut)

Quelqu'un peut m'aider ? J'ai essayé plusieurs choses mais ca coince toujours
baryn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 20h51   #2
Membre éclairé
 
Avatar de tee_grandbois
 
Inscription : novembre 2004
Messages : 216
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 216
Points : 321
Points : 321
Bonsoir,
Pour que ta variable OpenArgs soit visible dans ta requète, il faut que tu la charges commes tu l'as fais, ici
Citation:
PatientEnCours = Me.OpenArgs
mais dans un contrôle de ton formulaire. Après il faut que ta variable soit reconnue avec la bonne syntaxe :
Code :
1
2
3
4
SELECT Fiches.ID_Fiche, Fiches.ID_Patient, Fiches.TypeFiche, Fiches.DateFiche, Fiches.ScanFiche, Fiches.ScanOrdo, Fiches.Resume, Examinateur.Nom_Examinateur
FROM Patients INNER JOIN (Examinateur INNER JOIN Fiches ON Examinateur.ID_Examinateur = Fiches.ID_Examinateur) ON Patients.ID_Patient = Fiches.ID_Patient
WHERE (((Fiches.ID_Patient)=[Formulaires]![TonFormulaire]![PatientEnCours]))
ORDER BY Fiches.DateFiche;
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 23h30   #3
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 4
Points : 4
Merci pour ta réponse rapide.

Cool à priori le problème ne vient pas de l'ordre de chargement ou autre, c'est déjà ça.

Par contre j'ai essayé avec ce que tu m'as dit, ça ne fonctionne pas, je n'ai aucun résultat à ma requête.
baryn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 03h26   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 952
Points : 30 952
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

PatientEnCours est une variable et lorsque tu écris [PatientEnCours] ta requête recherche un champ qui se nomme ainsi.

1 - Ne pas nommer un champ comme une variable, c'est sujet à des quiproquos (comme ici), et utiliser : Descriptif des conventions typographiques du code Visual Basic

2 - Ajouter ta variable par concaténation dans la requête qui alimente ta liste.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 11h01   #5
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 4
Points : 4
Je n'ai aucun champ qui s'appelle PatientEnCours, justement. Le champ s'appelle [ID_Patient].

Je vais me renseigner sur la concaténation de ce pas, merci
baryn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 11h18   #6
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Une petite concaténation de la reponse de tee_grandbois et Philippe JOCHMANS

Code :
1
2
3
4
SELECT Fiches.ID_Fiche, Fiches.ID_Patient, Fiches.TypeFiche, Fiches.DateFiche, Fiches.ScanFiche, Fiches.ScanOrdo, Fiches.Resume, Examinateur.Nom_Examinateur
FROM Patients INNER JOIN (Examinateur INNER JOIN Fiches ON Examinateur.ID_Examinateur = Fiches.ID_Examinateur) ON Patients.ID_Patient = Fiches.ID_Patient
WHERE (((Fiches.ID_Patient)= " & [Formulaires]![TonFormulaire]![PatientEnCours])) & "
ORDER BY Fiches.DateFiche;"
De cette manière tu récupères la valeur de ta variable et tu la concatènes à ton expression SQL
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 11h45   #7
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 4
Points : 4
Ca ne marche toujours pas

Pour tester, j'ai ajouter l'évenement :

Sur chargement de mon formulaire, et il me répond bien la valeur souhaitée. Le problème vient bien de ma requête.

Je pense que je vais essayer de faire la requête entièrement sous VBA plutot qu'en utilisant l'assistant et en modifiant juste le WHERE.

Edit : je sais que ce n'est pas bien conseillé, mais si j'ajoutais ma variable en public ? Je serais sur de pouvoir la récupérer dans ma requête non ?
baryn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 16h49   #8
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Quel est le type de données retourné par ta variable. S'il s'agit de texte, il te suffit de modifier le code en ajoutant des quotes

Code :
1
2
3
4
SELECT Fiches.ID_Fiche, Fiches.ID_Patient, Fiches.TypeFiche, Fiches.DateFiche, Fiches.ScanFiche, Fiches.ScanOrdo, Fiches.Resume, Examinateur.Nom_Examinateur
FROM Patients INNER JOIN (Examinateur INNER JOIN Fiches ON Examinateur.ID_Examinateur = Fiches.ID_Examinateur) ON Patients.ID_Patient = Fiches.ID_Patient
WHERE (((Fiches.ID_Patient)= '" & [Formulaires]![TonFormulaire]![PatientEnCours])) & "'
ORDER BY Fiches.DateFiche;"
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 20h15   #9
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 4
Points : 4
Bonsoir,

Super, ça marche enfin !!

En mixant la solution de Jeannot, avec un truc que j'ai lu ailleurs, tout fonctionne !

En fait, une requête ne sait apparemment pas très bien exploiter les variables. Donc j'avais 2 choix. Soit faire un bout de code en VBA pour construire ma requête, avec la variable, soit simplement insérer le champ (ID_Patient) sur le formulaire, le filtrer avec ma valeur récupérée avec l'OpenArgs, et le récupérer avec la technique de Jeannot

Simple, mais fallait juste y penser

Un grand merci à vous !
baryn 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 13h55.


 
 
 
 
Partenaires

Hébergement Web