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

Requêtes et SQL. Discussion :

Requete avec fonction VBA


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 96
    Points
    96
    Par défaut Requete avec fonction VBA
    Bonjour
    j'ai une table avec deux champs date : date1 et date2
    Et un champ délai de type numerique.
    J'ai besoin de mettre a jour le champ delai tel que
    délai = a la difference en jour ouvrés entre date1 et date2.
    J'ai donc fait une fonction calculnbjourouvrés(date1,date2 as date) en vba.
    Comment puis-je faire simplement avec une requete ou en vba pour calculer le champ delai

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 073
    Points : 24 695
    Points
    24 695
    Par défaut
    Bonjour,

    Dans ta requête 1 ligne écrit ceci :

    expr : calculnbjourouvrés([date1];[date2])

    Lorsque tu visualise le résultat ta nouvelle colonne se nomme expr et elle contient le résultat de ta fonction.

    Transformé en requete Mise à jour tu peux faire un update des données.

    Directement entré dans Valeur par défaut d'un champ ou encore dans un evenement comme AprèsMAJ de Date2 par exemple.
    =calculnbjourouvrés([date1];[date2])

    Note la différence avec l'écriture VBA. la virgule et remplacé par le ;

    Cordialement,

    PS : ton code peux interesser des gens du forum, n'hésite pas à nous en faire part. (ce n'est pas obligatoire).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 96
    Points
    96
    Par défaut
    Merci pour la requete.
    voila donc le code de ma requete...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE Import_sap SET Import_sap.Retard_liv = JourOuvrés(import_sap.[Date promise BRC],[Date livraison]);
    et sinon voici ma procédure, si quelqu'un a une astuce pour déclarer directement mon tableau de constantes dans le module
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    Option Compare Database
    Option Explicit
    Dim TabFériés(15)
     
     
    Sub init_tabferies()
     
    TabFériés(0) = DateSerial(Year(Date), 1, 1)   'Jour de l'An
    TabFériés(1) = DateSerial(Year(Date), 5, 1)   'Fete du Travail
    TabFériés(2) = DateSerial(Year(Date), 5, 8)   '8 Mai 45
    TabFériés(3) = DateSerial(Year(Date), 7, 14)  '14 Juillet 1789
    TabFériés(4) = DateSerial(Year(Date), 8, 15)  ' 15 Aout
    TabFériés(5) = DateSerial(Year(Date), 11, 1)  ' Toussaint
    TabFériés(6) = DateSerial(Year(Date), 11, 11) ' 11 novembre
    TabFériés(7) = DateSerial(Year(Date), 12, 25) ' Noël
    TabFériés(8) = DateSerial(Year(Date) - 1, 11, 11) '11 novembre année -1
    TabFériés(9) = DateSerial(Year(Date) - 1, 11, 11) '11 novembre année -1
    TabFériés(10) = DateSerial(Year(Date) - 1, 12, 25) 'Noel année -1
    TabFériés(11) = fPaques(Year(Date))  'Dimanche de Päques
    TabFériés(12) = TabFériés(11) + 1    'Lundi de Päques
    TabFériés(13) = TabFériés(11) + 39    'Ascension
    'TabFériés(14) = TabFériés(11) + 50    'Pentecote
    End Sub
     
     
    Function JourOuvrés(DateDebut As Date, DateFin As Date)
    'origine http://support.microsoft.com/default.aspx?scid=kb;fr;466831
    ' et http://support.microsoft.com/kb/466909/fr
     
    Dim i As Integer
    Dim v As Double
    Dim inverse As Boolean
    Dim d As Date
    'initialise la table tabFériés
    If IsEmpty(TabFériés(1)) Then init_tabferies
     
    'on inverse les dates si supérieur pour éviter les soucis
    If DateDebut > DateFin Then
        d = DateDebut
        DateDebut = DateFin
        DateFin = d
        inverse = True
    End If
     
    JourOuvrés = Int(DateDiff("d", DateDebut, DateFin) / 7) * 5
    JourOuvrés = JourOuvrés + Weekday(DateFin, 1) - 1
    JourOuvrés = JourOuvrés - Weekday(DateDebut, 1)
    JourOuvrés = JourOuvrés + IIf(Weekday(DateDebut, 1) > Weekday(DateFin, 1), 5, 0)
    JourOuvrés = JourOuvrés - IIf(Weekday(DateFin, 1) = 7, 1, 0)
    JourOuvrés = JourOuvrés + IIf(Weekday(DateDebut) <> 1, 1, 0)
     
    'Gestion des Jours Fériés
     
    For i = 0 To UBound(TabFériés, 1)
    If TabFériés(i) >= DateDebut And TabFériés(i) <= DateFin Then
        If (Weekday(TabFériés(i), 1) <> 1) And (Weekday(TabFériés(i), 1) <> 7) Then
            ' à décompter !
            If JourOuvrés > 0 Then
                JourOuvrés = JourOuvrés - 1
            Else
                JourOuvrés = JourOuvrés + 1
            End If
        End If
    End If
    Next i
     
    'on met en négatif si invertion au début
    If inverse Then JourOuvrés = -JourOuvrés
     
    End Function
     
     
    Public Function fPaques(wAn%) As Date
    'Pâques est le dimanche qui suit le quatorzième jour de la Lune qui tombe le 21 mars ou immédiatement après
    'Cette fonction calcule aussi les autres jours qui sont liés
     
    Dim wA%, wB%, wC%, wD%, wE%, wF%, wG%, wH%, wI%, wJ%, wK%, wL%, wM%, wN%, wP%
    Dim dtPaques As Date, dtVenSaint As Date, dtLunPaq As Date, dtAscension As Date
    Dim dtDimPent As Date, dtLunPent As Date
    Dim strMsg As String, strTitre As String
    Dim TableauJoursFeriés(10), i As Integer
    'Calcul du rang de l'année dans le cycle lunaire qui a 19 ans
    wA = wAn Mod 19
    'Calcul du siècle
    wB = wAn \ 100
    'Calcul du rang de l'année dans le siècle
    wC = wAn Mod 100
    wD = wB \ 4
    wE = wB Mod 4
    'Synchronisation avec le cycle lunaire
    wF = (wB + 8) \ 25
    wG = (wB - wF + 1) \ 3
    wH = (19 * wA + wB - wD - wG + 15) Mod 30
    wI = wC \ 4
    wK = wC Mod 4
    wL = (32 + 2 * wE + 2 * wI - wH - wK) Mod 7
    wM = (wA + 11 * wH + 22 * wL) \ 451
    wN = (wH + wL - 7 * wM + 114) \ 31
    wP = (wH + wL - 7 * wM + 114) Mod 31
    fPaques = DateSerial(wAn, wN, wP + 1)
    End Function

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

Discussions similaires

  1. TADOQuery et requete avec fonction CONCAT et/ou LEFT
    Par dnode57 dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/07/2009, 16h55
  2. requete avec fonction "comme"
    Par popofpopof dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/04/2008, 00h32
  3. Réponses: 5
    Dernier message: 25/01/2008, 12h15
  4. [Report 6i] requete avec fonction decode
    Par Herveg dans le forum SQL
    Réponses: 1
    Dernier message: 05/10/2007, 16h18
  5. VBA requete avec fonction sous access
    Par vanima dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/06/2006, 16h18

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