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 :

Public Function pour utiliser dans une requête [AC-2019]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nounours1
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 442
    Par défaut Public Function pour utiliser dans une requête
    Bonjour,

    Dans un module qui commence par Est-il possible d'utiliser ce code dans une requête ?
    Si oui comment inscrire ceci dans un nouveau champ ?

    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
    39
     Public Function NbOpenDay(dtDeb As Date, dtFin As Date) As Integer
        ' Calculer le nombre de jours ouvrables entre deux dates
        ' Utilise la fonction JourFérié(dtDate As Date)
     
            Dim dblDateDeb As Double
            Dim dblDateFin As Double
            Dim DateCourante As Date
            Dim resultat As Integer
     
            If IsNull(dtDeb) Or IsNull(dtFin) _
                Or IsEmpty(dtDeb) Or IsEmpty(dtFin) Then
                    NbOpenDay = 0
                    Exit Function
            ElseIf Not IsDate(dtDeb) Or Not IsDate(dtFin) Then
                    NbOpenDay = 0
                    Exit Function
            ElseIf dtDeb > dtFin Then
                    Dim dhTemp As Date
                    dhTemp = dtDeb
                    dtDeb = dtFin
                    dtFin = dhTemp
            End If
     
            dblDateDeb = CDbl(dtDeb)
            dblDateFin = CDbl(dtFin)
     
            Do Until dblDateDeb > dblDateFin
                DateCourante = CDate(dblDateDeb)
                If WeekDay(DateCourante) <> 1 And _
                    WeekDay(DateCourante) <> 7 And _
                    JourFérié(DateCourante) = False Then
                        resultat = resultat + 1
                End If
                dblDateDeb = dblDateDeb + 1
            Loop
     
            NbOpenDay = resultat
     
        End Function
    Merci d'avance
    Cordialement

  2. #2
    Membre éclairé Avatar de Nounours1
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 442
    Par défaut
    Ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbOpenDay(dtDeb , dtFin)
    dans le champ de la requête ?

    Merci

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Une fonction public VBA peut être utilisée partout où tu utilises une fonction intégrée d'Access et de la même façon.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TonChamp:=NbOpenDay(P1, p2)
    À adapter à ta réalité

    Note que l'appel de fonction VBA ralenti Access mais que personnellement vu l'avantage que cela procure en maintenabilité je ne m'en passe pas tant que ma vitesse d'exécution est acceptable.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre éclairé Avatar de Nounours1
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 442
    Par défaut
    Merci, je vais tester.

    @+

  5. #5
    Membre éclairé Avatar de Nounours1
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 442
    Par défaut
    J'ai fais plusieurs essais dans un champ de requête, mais je n'y arrive pas.

    Tu as un exemple ?

    Merci.

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    bonjour,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select NbOpenDay([dtDeb],[dtFin]) as MyChamp from MyTable
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL="select NbOpenDay([dtDeb],[dtFin]) as MyChamp from MyTable"

  7. #7
    Membre éclairé Avatar de Nounours1
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 442
    Par défaut
    Je n'y arrive pas, dans ma requête j'ai deux champs "DtDeb et DtFin" TableDesDates
    Je dois rajouter un autre champ ?

    J'ai plusieurs dates début et fin.

    Merci pour votre aide, je ne connais pas suffisamment ACCESS le meilleurs moyen est l'exemple concret.

    @+

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    oui tu dois ajouter ce qu'on appelle un champ calculé qui "récupére" le résultat de ta fonction.
    Donc tu te mets dans une colonne vierge de ta requête et tu tapes un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbJourOuvrable : NbOpenDay([NomTaTable].[dtDeb]; [NomTaTable].[dtFin])
    Cela va te faire une nouvelle colonne appelée NbJourOuvrable où tu auras le résultat.
    Remplacer NomTaTable par le nom que tu as donné à ta table.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre éclairé Avatar de Nounours1
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 442
    Par défaut
    Merci beaucoup,

    Maintenant ça fonctionne.

    @+

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Si tu considères le sujet clos, merci d'appuyer sur le bouton en bas de discussion.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/09/2013, 13h55
  2. Réponses: 2
    Dernier message: 29/08/2007, 19h43
  3. [SQL] Comment utiliser dans une requête une variable passée par URL
    Par foffa dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2006, 12h27
  4. [Sécurité] Sécurité portable pour les données utilisées dans une requête
    Par berceker united dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/07/2006, 14h48
  5. [FREETEXT][Sql2000] Utilisation dans une requête ?
    Par SoaB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/10/2005, 14h49

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