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 05/01/2011, 18h45   #1
Nouveau Membre du Club
 
Femme Turquoise Rose
Inscription : mai 2008
Messages : 122
Détails du profil
Informations personnelles :
Nom : Femme Turquoise Rose

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 122
Points : 25
Points : 25
Par défaut Filtre dans un formulaire

Je suis entraine de créer un planning est j'ai débuté avec le tutoriel de Denis Hulo "Planning pour la gestion des présences en entreprise"

Là, je suis bloquée au niveau de la procédure "OuvrirFormSaisie" dans la quel on ouvre un formulaire sur un enregistrement donnée.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub OuvrirFormSaisie(NB As Long, j As Integer)
Dim DateJ As Date

DateJ = DateSerial(Forms!F_Planning!An, Forms!F_Planning!Mois, j)

   If (Me("Jour" & j) = "") Or IsNull(Me("Jour" & j)) Then
      
      DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)

      Forms!F_Saisie!NB.Value = NB
      Forms!F_Saisie!DateD.Value = DateJ
      Forms!F_Saisie!DateF.Value = DateJ

   Else
   
      DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)
   
   End If


End Sub
j'ai trop essayé de comprendre le fonctionnement du filtre mais je n'arrive pas à le comprendre jusqu'à maintenant
j'ai cru que cette instruction est suffisante pour le filtre

Code :
DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)
Mais apparemment que non

Je vous en prie de m'aidé a comprendre la partie en rouge dans cette procédure sachant que je débute avec ACCESS et que vous êtes mon seul aide vu que j'ai pas trouvé une claire explication sur GOOGLE.
Je vous en prie de m'aidé a comprendre le principe du filtre dans cette procédure
eemii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 21h34   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 204
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 204
Points : 5 255
Points : 5 255
Salut,

J'explique un peu l'idée du code d'ouverture du formulaire de saisie, avec les commentaires dans le code :

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
Public Sub OuvrirFormSaisie(NB As Long, j As Integer)
Dim DateJ As Date
 
DateJ = DateSerial(Forms!F_Planning!An, Forms!F_Planning!Mois, j)
 
' Si le champ du planning ou tu double-cliques est vide
   If (Me("Jour" & j) = "") Or IsNull(Me("Jour" & j)) Then ' Alors
      'ouvre le formulaire avec le critère : donc le formulaire sera vide étant donné qu'il n'y as aucun enregistrement répondant au critère
      DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)
 
      ' Met à jour le formulaire avec les données NB et DateJ qu'on souhaite saisir dans le formulaire
      Forms!F_Saisie!NB.Value = NB
      Forms!F_Saisie!DateD.Value = DateJ
      Forms!F_Saisie!DateF.Value = DateJ
 
   Else
 
' Sinon, s'il y a déjà une présence dans le champ alors on ouvre le formulaire sur cet enregistrement avec le critère (le filtre) correspondant.
 
      DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)
 
   End If
 
 
End Sub
Note que dans le cas ou le champ est vide j'aurais aussi bien pu ouvrir le formulaire en mode ajout, cela revient au même.


LA PARTIE EN ROUGE AURAIT PU AUSSI S'ECRIRE:

Code :
1
2
3
4
5
6
7
8
9
10
 If (Me("Jour" & j) = "") Or IsNull(Me("Jour" & j)) Then ' Alors
 
      DoCmd.OpenForm "F_Saisie", , , , acFormAdd
 
      Forms!F_Saisie!NB.Value = NB
      Forms!F_Saisie!DateD.Value = DateJ
      Forms!F_Saisie!DateF.Value = DateJ
 
   Else
...
Remarque : Dans d'autres versions je n'utilise que la première condition, c'est plus simple.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Public Sub OuvrirFormSaisie(NB As Long, j As Integer)
Dim DateJ As Date
 
DateJ = DateSerial(Forms!F_Planning!An, Forms!F_Planning!Mois, j)
 
DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)
 
 Forms!F_Saisie!NB.Value = NB
 Forms!F_Saisie!DateD.Value = DateJ
 Forms!F_Saisie!DateF.Value = DateJ
 
End Sub
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 22h59   #3
Nouveau Membre du Club
 
Femme Turquoise Rose
Inscription : mai 2008
Messages : 122
Détails du profil
Informations personnelles :
Nom : Femme Turquoise Rose

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 122
Points : 25
Points : 25
Merci pour votre réponse User
Code :
1
2
3
4
 
Partie1
'ouvre le formulaire avec le critère : donc le formulaire sera vide étant donné qu'il n'y as aucun enregistrement répondant au critère
DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)
Dans cette instruction on ouvre le formulaire F_saisie si le champ NB égale au NB courant( ou celui d'enregistrement sélectionné) ?? es que c'est juste ce que j'ai dit ?????.
Si c'est le cas le formulaire F_saisie s'ouvre sur cet enregistrement sans rajouté:

Code :
1
2
3
4
5
 
Partie2
Forms!F_Saisie!NB.Value = NB
Forms!F_Saisie!DateD.Value = DateJ
Forms!F_Saisie!DateF.Value = DateJ
S'il y un filtre dans l'instruction OpenForm alors le Formulaire "F_saise" s'ouvre sur l'enregistrement qui est le résultat de ce filtre pourquoi on affecte alors ces valeur aux contrôles du formulaire "F_Saisie" ??

je n'arrive pas à saisir la différence entre ces 2 parties du code

Merci d'avance
eemii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 23h55   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 204
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 204
Points : 5 255
Points : 5 255
Citation:
Envoyé par eemii Voir le message
Merci pour votre réponse User
Code :
1
2
3
4
 
Partie1
'ouvre le formulaire avec le critère : donc le formulaire sera vide étant donné qu'il n'y as aucun enregistrement répondant au critère
DoCmd.OpenForm "F_Saisie", , , "[NB]=" & NB & " and [DateD]<=" & FDateUs(DateJ) & " and [DateF]>=" & FDateUs(DateJ)
Dans cette instruction on ouvre le formulaire F_saisie si le champ NB égale au NB courant( ou celui d'enregistrement sélectionné) ?? es que c'est juste ce que j'ai dit ?????.
Si c'est le cas le formulaire F_saisie s'ouvre sur cet enregistrement sans
Non la 1ère condition correspond au cas ou il n'y a aucun enregistrement correspondant au critère :

Quand tu ouvres un formulaire avec un critère, si aucun enregistrement ne correspond au critère alors le formulaire s'ouvre vide, comme en mode ajout.

Ce qui explique qu'on ajoute ces valeurs à la suite vu que le formulaire est vide.

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2011, 19h02   #5
Nouveau Membre du Club
 
Femme Turquoise Rose
Inscription : mai 2008
Messages : 122
Détails du profil
Informations personnelles :
Nom : Femme Turquoise Rose

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 122
Points : 25
Points : 25
Merci infinitivement pour votre réponse.
Ce que j'avais dans la tête est que ce filtre s'applique sur le formulaire mère , par contre le filtre s'applique sur la source de formulaire F_saisie(table /requête) et comme la source n'a pas un enregistrement qui répond au critère alors comme vous avez dit le formulaire F_Saisie s'ouvre vide, alors on insère une nouvelle ligne dans la source et cela par les instruction
Code :
1
2
3
4
 
Forms!F_Saisie!NB.Value = NB
Forms!F_Saisie!DateD.Value = DateJ
Forms!F_Saisie!DateF.Value = DateJ
Merci encore une fois User
eemii 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 13h03.


 
 
 
 
Partenaires

Hébergement Web