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 :

demande d'aide vba


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut demande d'aide vba
    bonjour a tous
    je travaille sur une base access pour la gestion d'outillage.

    j'ai 2 tables :

    tblMouv (Mouvements)

    IdMov ....... Auto
    DteMov ..... Date (date de mouvement)
    IdSrvc ...... Long (identifiant atelier 1, 2, Magasin ...

    tblMovDet (details mouvements)

    IdLigne long Auto
    IdMov ....... long (jonction)
    IdEqp Long (identifiant de l'outil)

    j'ai écrit une fonction qui est censée me renseigner sur l'endroit (IdSrvc ) ou se trouve un outil (IdEqp) à une date donnée mais ca ne marche pas. j'ai du passer à coté de kelk chose.

    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
    Public Function Affectation(VarIdEqp As Long, VarDate As Date) As Long
     
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sSQL As String
     
    sSQL = " SELECT X.* FROM (SELECT tblMov .*, tblMovDet.IdEqp FROM tblMov, tblMovDet WHERE tblMov.IdMov=tblMovDet.IdMov) AS X" _
         & " INNER JOIN (SELECT B.IdEqp, Max(A.dtemov) AS maxDate FROM tblMov AS A INNER JOIN tblMovDet AS B" _
         & " ON A.idmov = B.idmov GROUP BY B.IdEqp HAVING ((( Max(A.dtemov)<=#" & Format(VarDate, "dd/mm/yyyy") & "#)) AND (((B.ideqp=" & VarIdEqp & ")))) AS Y" _
         & " ON (Y.IdEqp = X.IdEqp) AND (Y.maxDate=X.DteMov)"
     
    Set db = Application.CurrentDb
     
    Set rs = db.OpenRecordset(sSQL, dbOpenDynaset)
     
    Affectation= rs("IdSrvc")
     
    rs.Close
    db.Close
     
    Set db = Nothing
    Set rs = Nothing
     
    End Function
    merci pour votre aide

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    Dans la clause "HAVING ", procédez par élimination: supprimez un des filtres et essayez; si ça ne va pas, remettez-le puis supprimez le 2nd, ... et ainsi de suite, jusqu'à ce que vous repériez l'élément problématique.
    A priori, je soupçonne la date qui devrait avoir le format USA ("m/dd/yyyy")

  3. #3
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Oui, je confirme: les dates sont un vrai poison! Personnellement, j'utilise toujours Format(laDate,"yyyy-mm-dd") vu que entre mm/dd/yyyy et dd/mm/yyyy on a soi-même facile de se tromper.
    Cordialement.

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