IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Filtre dans un formulaire [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 167
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 622
    Billets dans le blog
    67
    Par défaut
    Salut,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 167
    Par défaut
    Merci pour votre réponse User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 622
    Billets dans le blog
    67
    Par défaut
    Citation Envoyé par eemii Voir le message
    Merci pour votre réponse User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 167
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. filtre dans un formulaire
    Par x0249 dans le forum IHM
    Réponses: 1
    Dernier message: 21/05/2007, 17h31
  2. Réponses: 1
    Dernier message: 30/08/2006, 15h09
  3. Problème de filtre dans un formulaire acess
    Par cdbaloo dans le forum Access
    Réponses: 4
    Dernier message: 31/03/2006, 17h25
  4. filtre dans un formulaire
    Par deuss33 dans le forum IHM
    Réponses: 3
    Dernier message: 01/12/2005, 10h09
  5. [vb][filtre dans un formulaire ]
    Par raymondhoffmeyer dans le forum Access
    Réponses: 2
    Dernier message: 18/10/2005, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo