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. #1
    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 [DAO] Calculer l'ancienneté à partir du résultat d'une requête
    Bonjour,

    Je vous expose mon problème :

    1-J'effectue une requête de sélection avec pour critère Date_Effet<[Date Saisie par l'utilisateur].
    exemple de résultat de la requête avec la date saisie 31/12/2006

    Date_Effet Corps Grade Echelon
    01/01/1986 IGE 2C 9
    01/01/1989 IGE 2C 11
    01/01/1999 IGE 1C 1
    01/01/2000 IGE 1C 4

    2-J'affiche ce résultat dans un état afin de pouvoir calculer les anciennetés pour les champs suivants :
    Corps = 31/12/2006 - 01/01/1986
    Grade = 31/12/2006 - 01/01/1999 (uniquement Grade le + récent à savoir 1C)
    Echelon = 31/12/2006 - 01/01/2000 (Echelon le + récent : 4)

    Comment faut-il faire pour effectuer ces calculs ?

    Merci d'avance pour votre aide.

  2. #2
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Dans ta requête, tu créés un champ qui effectue le calcul...
    Ce champ sera alors affichable dans ton état.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Commandes.[N° commande], Clients.Société, _
    Format([date envoi]-[Combien de jour ?],"dd-mmm-yyyy") AS [Date livraison] _
    FROM Clients INNER JOIN Commandes ON Clients.[Code client] = _
    Commandes.[Code client];
    Là, le champ Date livraison est exploitable directement dans un état.

    Argy

    P.S. Ex issu des comptoirs... Ne pas mettre les espaces dans tes nom champs comme dans cette base...

  3. #3
    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
    Merci Argyronet,

    Merci d'abord pour ta réponse.
    J'ai effectivement suivi ton conseil et voici le résultat : en tapant 31/12/2006

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT Employés.ID_Employé, Historique_Carrière.Date_Effet, CorpsGrade.Corps, CorpsGrade.Grade_Initial, CorpsGrade.Echelon, CorpsGrade.INM_Réf, 
    Fix(([Formulaires]![Date]![DateEtat]-[Date_Effet])/365)&" ans" AS AnCorps, 
    Fix(((Formulaires!Date!DateEtat-[Date_Effet]) Mod 365)*12/365) & " mois " & Fix(((((Formulaires!Date!DateEtat-[Date_Effet]) Mod 365)*12) Mod 365)/12) & "j" AS MoisCorps
    FROM Employés INNER JOIN (CorpsGrade INNER JOIN Historique_Carrière ON CorpsGrade.ID_CorpsGrade = Historique_Carrière.ID_CorpsGrade) ON Employés.ID_Employé = Historique_Carrière.ID_Employés
    WHERE (((Employés.ID_Employé)=[formulaires]![Fonctionnaires]![ID_Employé]) AND ((Historique_Carrière.Date_Effet)<[formulaires]![Date]![DateEtat]) AND ((Fix(([Formulaires]![Date]![DateEtat]-[Date_Effet])/365))>0))
    ORDER BY Historique_Carrière.Date_Effet;
    Affichage du résultat (en fonction de la date saisie 31/12/2006):
    Date_Effet Corps Grade Echelon AncCorps
    01/01/1986 IGE 2C 9 20 ans
    01/01/1989 IGE 2C 11 17 ans
    01/01/1999 IGE 1C 1 8 ans
    01/01/2000 IGE 1C 4 6 ans

    Le résultat de la rqt retourne 4 enregistrements en fonction de la date saisie, mais mon objectif est + précis, en effet je veux qu'il m'affiche seulement (dans ce cas)
    Corps : ancienneté 20ans
    Grade : ancienneté 8 ans (je veux uniquement le Grade actuel ou dernier)
    Echelon : ancienneté 4 ans (je veux uniquement le dernier echelon ici 4 )

    Je pense à une comparaison des données à l'intérieure des enregistrements, mais je ne connais pas la procédure ou fonction à utiliser.

    Peux-tu m'éclairer?

  4. #4
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bien là il y a deux solution...
    Soit tu extraits ce qui t'intéresse dans la requête mais ça risque de faire une formule un peu lourde.
    Soit dans ton état ou tu poses le fameux champ contenant ton résultat.
    Tu mets la propriété Visible à False pour ce champ...

    Tu créés alors un champ indépendant dans lequel tu loges la formule d'extraction selon tes besoins :
    Voici quelques exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Left("01/01/1986 IGE 2C 9 20 ans", 10)  => 01/01/1986
    Mid("01/01/1989 IGE 2C 11 17 ans", 12, 3) => IGE
    Right("01/01/1999 IGE 1C 1 8 ans", 5) => 8 ans
    Mid("01/01/2000 IGE 1C 4 6 ans", Len(Format(Now, "Short date")) + _
    Len([Grade]) + 3, 2) => 1C
    Pour cette dernière un peu plus évoluée, on prend la longueur de la date au format "Short date" à savoir 10 + la longueur du Grade à savoir 3 caractères + les deux espaces qui les sépare.

    Tu peux copier ces formules dans ta requête ou ton état. Elle seront traduites automatiquement...

    Argy

  5. #5
    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
    J'affiche effectivement le résultat dans un état, sans concatainer les champs issus de la requête.

    Date_Effet-----Corps-----Grade-----Echelon------AncCorps
    __________________________________________
    01/01/1986-----IGE-------2C-------9------20 ans
    01/01/1989-----IGE-------2C-------11------17 ans
    01/01/1999-----IGE-------1C-------1------8 ans
    01/01/2000-----IGE-------1C-------4------6 ans

    Puis je veux extraire dans champ indépendant (ex: pour l'ancienneté sur le champ Grade)
    Je prends la dernière valeur (ie au 01/01/2000) qui vaut 1C,
    Je compare ensuite aux autres enregistrements (ici 3) si la valeur est identique(c'est le cas à la date 01/01/1999), je prends alors "AncCorps" la plus ancienne à savoir(8 ans).

    (ex: pour l'ancienneté sur le champ Corps)
    Je prends la dernière valeur (ie au 01/01/2000) qui vaut IGE,
    Je compare ensuite aux autres enregistrements (ici 3) si la valeur est identique(c'est le cas ici), je prends alors la valeur "AncCorps" la plus ancienne à savoir(20 ans).

  6. #6
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Ah ouais... hummmmmmm !
    Mais là, on joue plus dans la même cour...
    Il va falloir passer par Miss DAO et un de ses fils Recordset...

    Plus sérieusement, là, il te faut une fonction car dans une requête telle que tu l'as défini, ça va pas être facile et très peu souple...

    Du fait que tu sois débutant, il va falloir te familiariser avec ça...
    Je te préconise cette lecture avant de continuer... C'est indispensable selon moi.

    Argy

  7. #7
    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
    Merci pour tes précieux conseils.
    Je vais plonger dans les infos fournies par ton lien.

    Toutefois si tu connais la solution à mon problème, je serais ravi de la recevoir.

    Bonne soirée!

  8. #8
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Il y a une solution...
    Evidemment.

    On la voit une fois que tu as digéré le tutorel...

    Argy

  9. #9
    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,

    Bon, j'étudie actuellement le tutorel, mais uniquement le soir et probablement ce weekend.
    Comment pourrais-je revenir sur le sujet avec toi disons la semaine prochaine?

    Lingo

  10. #10
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Il y a toujours quelqu'un pour répondre...
    Et je serais là également...

    Ceci dit, il n'est pas interdit que tu cherches de ton coté...
    Je te donne une piste.
    Il te faut écrire une fonction qui exploite un objet Recordset qui lit ta requête SELECT avec la condition Where idoine et un tri par date Décroissant sur la date.
    Une fois initialisé, il te faut parcourir dans une boucle Do/Loop les enregistrements selon l'objectif souhaité, à savoir, grade, ancienneté etc... et dès que la valeur ciblée de l'enregistrement renvoie une valeur différente, il faut sortir de la boucle (Exit Do), prendre la valeur correposndante souhaitée et l'affecter à la fonction appelée pour qu'elle l'affiche dans la zone de texte de ton état...

    01/01/2000-----IGE-------1C-------4------6 ans
    01/01/1999-----IGE-------1C-------1------8 ans
    01/01/1989-----IGE-------2C-------11------17 ans
    01/01/1986-----IGE-------2C-------9------20 ans

    On parcours dans l'ordre : cela peut s'interprêter i.e. comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Do
       If Grade = GradeCible Then
       Else
           strAnc = .Fields("Ancienneté")
           Exit Do
       End If
       .MoveNext
    Loop
    Voilà une petite base de travail.

    Argy

  11. #11
    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
    Merci Argy,

    Je cogite déjà...

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il n'y a pas besoin de dao
    les fonctions de domaine peuvent largement suffire
    cependant il faudait savoir quelle date prendre en cas de double mutation
    01/01/2000-----IGE-----
    01/01/1999-----IGF------
    01/01/1989-----IGE-------

    ou de dégration promotion
    01/01/1989-----IGE-------2C-------11
    01/01/1999-----IGE-------1C-------1
    01/01/2000-----IGE-------2C-------11
    si ce n'est pas pris en compte
    mindom("dateeffet","bataillon","corps ='" & corps "'") suffit
    dans l'autre
    mindom(("dateeffet","bataillon","corps ='" & corps "'")
    devra intégrer
    and dateeffet>=(nz(maxdom("dateeffet","bataillon","corps <>'" & [corps] & "'"),0)

    on peut faire tout ça en sql si la table est trés grosse


    pour exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT date_effet,corps,grade,echelon, 
    DMin("date_effet","bataillon","date_effet <=" & [quant] & "  and corps ='" & [corps] & "'") AS dcorps, 
    DMin("date_effet","bataillon","date_effet <=" & [quant] & "  and grade ='" & [grade] & "'") AS dgrade, 
    DMin("date_effet","bataillon","date_effet <=" & [quant] & "  and echelon ='" & [echelon] & "'") AS dechelon
    FROM bataillon
    WHERE date_effet=DMax("date_effet","bataillon","date_effet <=" & [quant]);

  13. #13
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Merci Random pour cette proposition mais...

    Par principe, je n'utilise pas et ne propose pas d'utiliser les fonctions de domaine ni les critères issus de formulaire dans les requête (ce qu'il va être obligé de faire avec ta proposition);

    C'est lourd et pas performant et peu souple mais j'accorde que ça reste peut-être plus à portée...

    Argy

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    c'est beau un homme(?) à principes

    ceci dit je suis assez d'accord mais j'évite carrément la difficulté des formulaires avec des requêtes parametrées pour mon compte

    évidemment si c'est pour la distribution c'est plus ennuyeux


    d'un autre côté une fonction de domaine au bon endroit sur un jeu pas trop volumineux c'est pas si mal et puis tout ce que fait une fonction de domaine
    peut être remplacé par du sql

  15. #15
    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, Random

    Suite aux conseils d'Argy, j'ai créé la fonction suivante dans l'objet Modules:

    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(strAncCorps As String)
     
        Dim Corps As String
        Dim Rst As DAO.Recordset
        Dim Db As DAO.Database
     
        'Instancie la base de données
        Set Db = CurrentDb
        'Ouvre curseur retournant le résultat de la requête
        Set Rst = Db.OpenRecordset("R_Hist_Carrière_Tous_parDate")
        'Affectation de la valeur du champ Corps du 1er Enregistrement à Corps
        Corps = Rst.Fields("Corps")
        'Parcourir les enregistrements suivants du Recordset
        'et compare les valeurs du champ Corps avec la var Corps
        Do
            'Si les valeurs sont égales alors passer à l'Enregistrement suivant
            If Corps = Rst.Fields("Corps") Then
            'Sinon récupérer la valeur du champ AncCorps et sortir de la boucle
            Else
                strAncCorps = Rst.Fields("AncCorps")
                Exit Do
            End If
            Rst.MoveNext
        Loop
        'Libération des objets
        Rst.Close
        Db.Close
        Set Rst = Nothing
        Set Db = Nothing
     
    End Function
    Cependant je n'ai pour l'instant pas réussi à restituer le résultat sur une zone de texte dans mon Etat, qui affiche également le résultat de ma requête ("Source de mon Recordset)
    Pourriez-vous m'éclairer?

  16. #16
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    C'est bien ce que tu as commencer...
    Je constate ce que tu as tenté
    Toutefois, en dehors du fait que le cycle de ta boucle ne soit pas approprié à ce que tu veux, la fonction doit retourner un résultat or là, tu l'as omis et c'est pour cela que ça ne marche pas...
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Age(ByVal NéLe As Date) As String
      Age = Format((Now - NéLe) \ 365.25, "0 ans")
    End Function
    Là, la fonction Age() retourne l'âge...

    Bon, il y a plusieurs solutions pour la fonction, en voici une :
    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
    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
    &#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;strAncCorps = ""
    &#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_Hist_Carrière_Tous_parDate", 2)
    &#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;strAncCorps = .Fields("AncCorps")
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strCorpsSuivant = .Fields("Corps")
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If strCorpsSuivant <> Corps 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;strAncCorps = .Fields("AncCorps")
    &#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;AnciennetéCorps = strAncCorps
    End Function
    que tu exploites dans ton état comme suit :
    Dans ton champ AncCorps tu saisies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = AnciennetéCorps("IGE")
    ou si le champ Corps peut être soliicité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =AnciennetéCorps([IGE])
    Argy

  17. #17
    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
    Dans la zone de texte j'ai saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =AnciennetéCorps([Corps])
    Un message d'erreur s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur d'exécution '3061'
    Trop peu de paramètres. 1 attendu
    J'ai essayé de modifier la zone de texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =AnciennetéCorps("IGE")
    J'obtiens le même message d'erreur

  18. #18
    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
    Remarque

    Lorsque je clique sur le bouton Débogage du message d'erreur
    J'attéris sur l'editeur VBA, normal.
    Je déplace ma souris sur les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .Fields("AncCorps")
    .Fields("Corps")
    .

    un message contextuel me dit
    .Fields("Corps") = <variable objet ou variable de bloc With non définie>

  19. #19
    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 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    As-tu recopié la fonction telle qu'elle est écrite ?

    Dans VBE, juste au-dessous ou au-dessus de la fonction AnciennetéCorps(), ajoute une procédure comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub testCorps()
      Debug.Print AnciennetéCorps("IGE")
    End Sub
    et appuie sur F8 à chaque fois...

    Argy

  20. #20
    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
    J'ai créé la fonction telle quelle dans l'objet Modules que j'ai nommé AnciennetéCorps ie le même nom que la fonction.

    Lorsque je clique sur débogage, VBE est ouvert et la ligne suivante est surlignée en jaune.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = oDB.OpenRecordset("R_Hist_Carrière_Tous_parDate", 2)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 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