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

Access Discussion :

[DAO] Calculer l'ancienneté à partir du résultat d'une requête


Sujet :

Access

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Est-ce que celà signifie que l'affectation de mon Recordset : oRstn'est pas bonne?

  2. #22
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Je joint un fichier VBE.jpg retraçant mes remarques
    Pièce jointe 5322

  3. #23
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    1/ J'ose supposer que "R_Hist_Carrière_Tous_parDate" est un SELECT conforme et fonctionnel !!!

    2/ On ne nomme jamais un module comme un nom de fonction ou de procédure.

    Allez, encore un peu de lecture...

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  4. #24
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Voici mon Etat :

    Pièce jointe 5324

    Il affiche le résultat de ma requête paramétrée dans l'ordre décroissant.
    Cependant, dans la zone de texte Ancienneté Corps, il m'affiche #Erreur,
    Alors que je devrais voir apparaître 14 correspondant à la dernière ligne, puisque mon IGE n'a pas changé.

  5. #25
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub testCorps()
        ....
    End Sub
    tel que demandé ?

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #26
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Oui j'ai placé cette procédure avant la fonction AnciennetéCorps()

    et cette fois-ci le message suivant s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur d'exécution '3061'
    Trop peu de paramètres. 2 attendu
    Puisqu'il faut 2 paramètres, je pense à ma requête de sélection paramétrée qui comporte effectivement 2 critères voir fichier joint :
    Pièce jointe 5326

    Mes formulaires Date et Fonctionnaires sont tous deux ouverts, pour que la requête puisse s'exécuter.

  7. #27
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Quand bien même, il faut pas utiliser cette facilité d'affecter des données de formulaire en guise de critère dans les requêtes...

    C'est trop lourd et pas souple...
    Ta requête doit être totalement paramétrable, par exemple :
    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
    Function AnciennetéCorps(ByVal Corps As String)
    Dim strAncCorps As String
    Dim strCorpsSuivant As String
    Dim oRst As DAO.Recordset
    Dim oDB As DAO.Database
    Dim SQL As String
     
        strAncCorps = ""
        'Instancie la base de données
        Set oDB = CurrentDb
        'Ouvre curseur retournant le résultat de la requête
        SQL = "SELECT * FROM MaTable WHERE MonChamp =" & Chr(34) & Corps & Chr(34) & ";"
        Set oRst = oDB.OpenRecordset(SQL, dbOpenDynaset)
        With oRst
          If Not .EOF Then
    C'est pour ça que ça marche pas...

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  8. #28
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Bon je n'arrive pas à m'en sortir,

    La condition Date_Effet<formulaires!Date.Date est indispensable car fonctionnellement parlant, lorsque l'utilisateur veut connaître l'historique d'une personne à partir d'une date qu'il aura saisie dans un formulaire, alors le résultat doit lui retourner que les Date_Effet qui lui sont inférieure.


    Merci pour ton aide, car grâce à toi j'ai approfondi mes connaissances sur Access.


  9. #29
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bon, lorsque tu veux générer un état, tu le fais depuis un bouton sur un formuulaire...
    De là, ton bouton est codé avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "Mon état"
    Dans ce code, tu peux très bien générer dynamiquement la requête qui sera la source de cet état:
    Par exemple...
    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
    Sub cmdImprimerRapport()
    Const REQUETE As String = "R_Hist_Carrière_Tous_parDate"
    Dim dtmDateEtat As Date
    Dim lngIDEmploye As Long
    Dim blnSucces As Boolean
    
    &#160;&#160;If Not IsNull(Me!DateEtat) And Not IsNull(Me!ID_Employe) Then
    &#160;&#160;&#160;&#160;dtmDateEtat = Me!DateEtat
    &#160;&#160;&#160;&#160;lngIDEmploye = Me!ID_Employe
    &#160;&#160;&#160;&#160;blnSucces = GenererRequete(REQUETE, dtmDateEtat, lngIDEmploye)
    &#160;&#160;End If
    &#160;&#160;
    &#160;&#160;If blnSucces Then
    &#160;&#160;&#160;&#160;DoCmd.OpenReport "Mon état"
    &#160;&#160;Else
    &#160;&#160;&#160;&#160;MsgBox "Impossible de créer la requête '" & REQUETE & "' !", vbExclamation
    &#160;&#160;End If
    End Sub
    GenererRequete() est une fonction qui créée ou met à jour une requête.

    Pour la fonction AnciennetéCorps(), c'est le même principe, la requête doit exister pour être exploitée par le code...

    Bon courage;

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  10. #30
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     blnSucces = GenererRequete(REQUETE, dtmDateEtat, lngIDEmploye)
    Est-ce que dans cette ligne de code,

    1)blnSucces est une variable de type Boolean ? Si oui doit-je la déclarer
    comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim blnSucces As Boolean
    2)GenererRequete(...) est une méthode qui existe sous VBA?

  11. #31
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    1/ Oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim blnSucces As Boolean
    2/ GenererRequete() est une fonction que tu dois écrire....
    Hé oui, c'est du travail un développement...
    Mais le tuto de Tofalu est très bien rédigé et tu devrais t'en sortir, tu es déjà bien lancé...

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  12. #32
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Bon, je vais cogiter sur ce sujet ce soir, en espérant que la nuit appotera sa part de lumière et de magie

    Bonne soirée à toi.

  13. #33
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Bonjour Argy et les autres,

    J'ai enfin un premier résultat de ce que je désire , en employant les étapes suivantes :
    1) J'ai créé une requête Dynamique rqtHistCarrièreParEG (sur ce sujet merci aussi à Tofalu pr ton Tutor)
    2) puis un formulaire Date comportant une zone de texte pour la saisie d'une Date par l'utilisateur nommé DateEtat, puis un bouton(BtnOuvreRqt) pour ouvrir la requête dynamique
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub Etat_parEGDate_Click()
    On Error GoTo Err_Etat_parEGDate_Click
     
        Dim stDocName As String
        Dim Db As DAO.Database
        Dim rqtModele As DAO.QueryDef
        Dim strSQLModele As String
        Dim strNomRqtModele As String
        Dim strNomRqt As String
        Dim dtmDateEtat As Date
        Dim strNomRpt As String
        strNomRpt = "SE_Hist_Carrière_parEGDate"
        dtmDateEtat = Me.DateEtat
        strNomRqtModele = "R_Hist_Carrière_parEG_Modele"
        strNomRqt = "rqtHistCarrièreParEG"
        Set Db = CurrentDb
        Set rqtModele = Db.QueryDefs(strNomRqtModele)
        strSQLModele = rqtModele.Sql
        'Effectue le remplacement du critère [CritereDate]
        'par la date saisie dans la zone de texte dateEtat du formulaire Date
        strSQLModele = Replace(strSQLModele, "[CritereDate]", "#" & dtmDateEtat & "#")
        'Si la requête existe déjà, alors
        If TesteExistenceRqt(strNomRqt) Then
            'Modifier le code de la requête
            Db.QueryDefs(strNomRqt).Sql = strSQLModele
        'Sinon
        Else
            'Créer la nouvelle requête
            Db.CreateQueryDef strNomRqt, strSQLModele
        End If
        DoCmd.OpenQuery strNomRqt
        'DoCmd.Close acQuery, strNomRqt
        'DoCmd.OpenReport strNomRpt
    Exit_Etat_parEGDate_Click:
        Exit Sub
     
    Err_Etat_parEGDate_Click:
        MsgBox "Une erreur est survenue", vbCritical, "Saisir une date"
        Resume Exit_Etat_parEGDate_Click
     
    End Sub
    .

    3) puis un Etat SE_Hist_Carrière_parEGDate dont la source est la requête dynamique.

    J'ouvre mon formulaire Date pour saisir une date, je clique sur le bouton pour ouvrir ma requête dynamique. Jusqu'ici çà fonctionne correctement.
    Je veux ouvrir ensuite mon Etat, pour l'instant je pars de la fenêtre base de données puis je doubleclic sur mon Etat, il s'ouvre et la fonction Ancienneté() fonctionne correctement code ci-dessous :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Function AnciennetéCorps(ByVal Corps As String)
    Dim strAncCorps As String
    Dim strCorpsSuivant As String
    Dim Rst As DAO.Recordset
    Dim Db As DAO.Database
    Dim Sql As String
     
        strAncCorps = ""
        'Instancie la base de données
        Set Db = CurrentDb
        'Ouvre curseur retournant le résultat de la requête: rqtHistCarrièreParEG
        Set Rst = Db.OpenRecordset("rqtHistCarrièreParEG")
     
        With Rst
          If Not .EOF Then
            'Recherche comparative paramètre Corps avec les autres champs Corps
            Do While Not .EOF
              strAncCorps = .Fields("AnneeCorps")
              strCorpsSuivant = .Fields("Corps")
              If strCorpsSuivant <> Corps Then
                .MovePrevious
                strAncCorps = .Fields("AnneeCorps")
                Exit Do
              End If
              .MoveNext
            Loop
          End If
        End With
        'Libération des objets
        Rst.Close
        Db.Close
        Set Rst = Nothing
        Set Db = Nothing
        AnciennetéCorps = strAncCorps
    End Function
    Maintenant, je souhaite modifier le code du bouton BtnOuvreRqt pour ouvrir directement mon Etat, je modifie le code du bouton et je rajoute une ligne en bleu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    DoCmd.OpenQuery strNomRqt
    DoCmd.OpenReport strNomRpt, acViewNormal, , , acWindowNormal
    ....

    et là il m'imprime directement mon Etat, or je veux seulement le visualiser.

    Avez-vous une explication?
    Merci.

  14. #34
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut

    Etre arrivé jusque là !!! génial... Au moins tu as compris.
    Pour ton état, il suffit de substituer la constante acViewNormal par acPreview...

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  15. #35
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Sans ton aide, je n'aurais pas réussi, merci encore et mes respects...

    Si tu veux bien, je continue à soliciter ton aide.
    Je voudrais améliorer ma fonction AnciennetéCorps()
    Je voudrais qu'elle me retourne la valeur du champ AncCorps et MoisCorps

    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
    26
    27
    28
    29
    30
    31
    32
    Function AnciennetéCorps(ByVal Corps As String)
    Dim strAncCorps As String
    Dim strMoisCorps As String
    
    .....    
        strAncCorps = ""
    strMoisCorps = ""
    .....
        With Rst
          If Not .EOF Then
            Do While Not .EOF
              strAncCorps = .Fields("AnneeCorps")
              strMoisCorps = .Fields("MoisCorps")
              strCorpsSuivant = .Fields("Corps")
              If strCorpsSuivant <> Corps Then
                .MovePrevious
                strAncCorps = .Fields("AnneeCorps")
                strMoisCorps = .Fields("MoisCorps")
                Exit Do
              End If
              .MoveNext
            Loop
          End If
        End With
        'Libération des objets
        Rst.Close
        Db.Close
        Set Rst = Nothing
        Set Db = Nothing
        AnciennetéCorps = strAncCorps
    End Function
    Ma question :
    Comment faire pour affecter ma fonction avec mon deuxième champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnciennetéCorps = strAncCorps

  16. #36
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Eh bien tu renommes ta fonction et tu la rends générique, par exemple :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Function ObtenirValeurChampSelon(ByVal NomDuChampRetour As String, ByVal _
    &#160;&#160;&#160;&#160;NomDuChampCritere As String, ByVal ValeurChampCritere As String)
    Dim strChampRetour As String
    Dim strChampCritereSuivant As String
    Dim oRst As DAO.Recordset
    Dim oDB As DAO.Database
    &#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;strChampRetour = ""
    &#160;&#160;&#160;&#160;'Instancie la base de données
    &#160;&#160;&#160;&#160;Set oDB = CurrentDb
    &#160;&#160;&#160;&#160;'Ouvre curseur retournant le résultat de la requête
    &#160;&#160;&#160;&#160;Set oRst = oDB.OpenRecordset("R_HistCarrièreTousParDate", dbOpenDynaset)
    &#160;&#160;&#160;&#160;With oRst
    &#160;&#160;&#160;&#160;&#160;&#160;If Not .EOF Then
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'Recherche comparative paramètre Corps avec les autres champs Corps
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Do While Not .EOF
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strChampRetour = .Fields(NomDuChampRetour)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strChampCritereSuivant = .Fields(NomDuChampCritere)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If strChampCritereSuivant <> .Fields(NomDuChampCritere) Then
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.MovePrevious
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strChampRetour = .Fields(NomDuChampRetour)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Exit Do
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End If
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.MoveNext
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Loop
    &#160;&#160;&#160;&#160;&#160;&#160;End If
    &#160;&#160;&#160;&#160;End With
    &#160;&#160;&#160;&#160;'Libération des objets
    &#160;&#160;&#160;&#160;oRst.Close
    &#160;&#160;&#160;&#160;oDB.Close
    &#160;&#160;&#160;&#160;Set oRst = Nothing
    &#160;&#160;&#160;&#160;Set oDB = Nothing
    &#160;&#160;&#160;&#160;ObtenirValeurChampSelon = strChampRetour
    End Function
    
    Sub testFonction()
    &#160;&#160;Debug.Print ObtenirValeurChampSelon("Grade", "Corps", "IGE")
    End Sub
    ce qui fait que tu emploies une seule et même fonction pour n'importe quel champ critère et n'importe quel valeur de champ voulue...

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  17. #37
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Depuis mon dernier message, le serveur Web est tombé en rade, il vient seulement de redémarrer... Bref



    Je me suis réjoui trop vite car ce matin j'ai testé avec un seul employé et ma requête dynamique comporte un seul critère donc çà marche sans pb.

    Mais quand j'entre un 2è, puis 3è employé çà ne marche plus,
    En effet mon Etat qui, édite le nb de pages en fonction du nb d'employé (ici 3), affiche correctement les résultats de ma requête selon la personne.
    Par contre les résultats de la fonction AnciennetéCorps() sont incorrects selon l'employé.

    Ma question (pls en fait) :
    1)Faut-il ajouter un 2è critère [CritereIDEmploye]dans ma requête Dynamique?
    2)quelle modification à apporter dans la fonction AnciennetéCorps()?

  18. #38
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Une question à la fois serait bien
    Je t'ai répondu à celle de "Aujourd'hui, 12h21"

    Tu en es où et tu veux quoi en finalité ?
    Si tu ne poses pas toutes les conditions sur un bout de papier, il est évident que tu vas être confronté à un jeu interminable de "AhBenOuiMais..."

    Donc avant d'être atteint de cette maladie que contracte souvent les développeurs qui débutent, je te conseille de te poser les bonnes questions.

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  19. #39
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 33
    Points
    33
    Par défaut


    Je sais, mais je ne pensais pas que les pbs se découvrent au fur et à mesure.

    Au final, je veux pour chaque employé un Etat qui m'affiche
    1) Son historique avec pour critère son historique<DateEtat
    Cette historique est fournie par la requête dynamique logique puisqu'elle est la source de l'Etat.
    2) Son ancienneté pour les champs suivants Corps, Grade, et Echelon(le plus facile à obtenir même sans eploiter une fonction).
    Pour le Corps et le Grade je fais appel à la fonction AnciennetéCorps().

    Rmq : ma requête dynamique me fournit les champs suivants :
    ID_Employé : je ne sais pas s'il faut placé un critère sur ce champ?
    Date_Effet : champ sur lequel j'ai placé un critère [CritereDate]
    Corps : les valeurs peuvent être différentes
    Grade : les valeurs peuvent être différentes
    Echelon : les valeurs peuvent être différentes
    AncCorps : champ calculé me donnant le nb d'années
    MoisCorps : champ calculé me donnant le nb de mois

    Cette fois c'est bien le but final...

  20. #40
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Eh bien tu peux jouer avec la fonction générique que je t'ai postée...
    A toi de l'adapter au niveau des paramètres.
    Après tu as à contruire une requête dynamique comme tu as appris à le faire avec tous les champs dont tu as besoin pour ton état.
    Après, tu peux envisager d'adapter également la visibilité de certains champs selon certaines conditions et des besoins.

    Ta demande est en finalité assez simple. Il suffit de savoir ce que tu veux;
    Comme tu as pu le voir, tu disposes d'à peu près tout pour réaliser ton projet.

    Argy
    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.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Calculer la somme des heures à partir d'un champ datetime
    Par bilel.amri dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 10/09/2008, 14h28
  2. [Dates] Calculer la date de naissance à partir de l'âge
    Par Tony93700 dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2007, 15h08
  3. Réponses: 4
    Dernier message: 05/04/2007, 13h20
  4. [MySQL] Calcul d'un taux à partir d'une boucle while
    Par zana74 dans le forum PHP & Base de données
    Réponses: 32
    Dernier message: 14/08/2006, 19h16

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