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 :

Filtrer par date Formulaire access


Sujet :

VBA Access

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Par défaut Filtrer par date Formulaire access
    Bonjour,

    Je suis en train de développer un formulaire qui permettrait de compter le nombre de produit selon leur nombre de passage sur un banc d'essai. (Combien de produit avec 1 passage, combien avec 2, combien avec 3...) La base de données est composé pour chaque numéro de série (TestSerialNr) d'un nombre de passage (Test_Order)

    Je cherche à filtrer ces calculs à l’aide de date choisie sur le formulaire (DateDebut et DateFin), j'ai donc fait un petit bout de code vba pour filtrer les données comprises . J’arrive à faire les calculs mais je n’arrive pas à coder en VBA le tri par date. J’ai réussi à faire une requête SQL sur Access qui ferait les calculs et trierai selon des dates mais c’est tout.

    Mon problème principal viens des formats de date, car lorsque je les calculs sont lancé sur des mauvaises données.

    Voici mon programme :

    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
    Private Sub Compte_Produit()
     
        Dim TxtSQL, TxtSQL0 As String
        Dim TxtSQL1, TxtSQL2, TxtSQL3, TxtSQL4, TxtSQL5 As String
        Dim DateDebut, DateFin As Date
        Dim Donnees, Donnees0 As Recordset
        Dim Donnees1, Donnees2, Donnees3, Donnees4, Donnees5 As Recordset
     
    'initialisation
        DateDebut = Me!DateDebut
        DateFin = Me!DateFin
     
     
        'Nombre de produit
            TxtSQL = "SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr)"
     
            Set Donnees = CurrentDb.OpenRecordset(TxtSQL, dbOpenDynaset)
     
            Donnees.MoveFirst
            Me!NombreProduitTotal = Donnees!Compte
     
            Donnees.Close
            Set Donnees = Nothing
     
        'Moins de un passage
            TxtSQL0 = "SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Count(Date)<15)"
     
            Set Donnees0 = CurrentDb.OpenRecordset(TxtSQL0, dbOpenDynaset)
     
            Donnees0.MoveFirst
            Me!ProduitControleNonFinis = Donnees0!Compte
     
     
        'Un passage
            TxtSQL1 = "SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Max(Test_Order)=1)"
     
            Set Donnees1 = CurrentDb.OpenRecordset(TxtSQL1, dbOpenDynaset)
     
            Donnees1.MoveFirst
            Me!ProduitsConformes = Donnees1!Compte - Donnees0!Compte
     
            Donnees0.Close
            Set Donnees0 = Nothing
            Donnees1.Close
            Set Donnees1 = Nothing
     
     
        'Deux Passages
            TxtSQL2 = "SELECT Count(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Max(Test_Order)=2)"
     
            Set Donnees2 = CurrentDb.OpenRecordset(TxtSQL2, dbOpenDynaset)
     
            Donnees2.MoveFirst
            Me!ProduitDeuxCoup = Donnees2!Compte
     
            Donnees2.Close
            Set Donnees2 = Nothing
     
     
        'Trois Passages
            TxtSQL3 = "SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Max(Test_Order)=3)"
     
            Set Donnees3 = CurrentDb.OpenRecordset(TxtSQL3, dbOpenDynaset)
     
            Donnees3.MoveFirst
            Me!ProduitTroisCoup = Donnees3!Compte
     
            Donnees3.Close
            Set Donnees3 = Nothing
     
     
        'Quatre Passages
            TxtSQL4 = "SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Max(Test_Order)=4)"
     
            Set Donnees4 = CurrentDb.OpenRecordset(TxtSQL4, dbOpenDynaset)
     
            Donnees4.MoveFirst
            Me!ProduitQuatreCoup = Donnees4!Compte
     
            Donnees4.Close
            Set Donnees4 = Nothing
     
     
        'Plus de Quatre Passages
            TxtSQL5 = "SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Max(Test_Order)>4)"
     
            Set Donnees5 = CurrentDb.OpenRecordset(TxtSQL5, dbOpenDynaset)
     
            Donnees5.MoveFirst
            Me!ProduitPlusQuatreCoup = Donnees5!Compte
     
     
            Donnees5.Close
            Set Donnees5 = Nothing

    et voici plus en détail les requêtes qui fonctionne sous access en SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Count(Date)<15)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date >= #" & Format(DateDebut, "dd/mm/yyyy 00:00:00") & "# And Date <= #" & Format(DateFin, "dd/mm/yyyy 23:59:59") & "# GROUP BY Test_SerialNr HAVING Max(Test_Order)=1)

    Merci d’avance,

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 848
    Par défaut
    Bonjour,

    Il faut toujours utiliser les variables "dates" avec le format US en VBA pour éviter les problèmes de langues en VBA et SQL.
    De plus, tu peux utiliser "BETWEEN" au lieu de la comparaison > et <. Ce qui donnerait pour le premier SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TxtSQL = "SELECT COUNT(Test_SerialNr) AS compte FROM (SELECT Test_SerialNr FROM [TABLE RESULTATS] WHERE Date BETWEEN #" & Format(DateDebut, "yyyy/mm/dd 00:00:00") & "# And #" & Format(DateFin, "yyyy/mm/dd 23:59:59") & "# GROUP BY Test_SerialNr)"
    Cordialement,

    Attention : Nommer un champ "Date" n'est pas une bonne idée parce que ce mot est un mot réservé.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Par défaut
    Bonjour,


    Tout d'abord merci beaucoup pour votre répondre car tout à l'air de fonctionner comme je le veux.

    J'aurais cependant une petite question au sujet de BETWEEN quel est son avantage par rapport aux symboles de comparaison?

    Cordialement.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 848
    Par défaut
    Bonjour,
    Avec BETWEEN, l'ècriture est plus simple pour un critère dans une intervalle à mon avis. Après chacun fait son choix.
    Cordialement.

Discussions similaires

  1. filtrer résultat formulaire de recherche par date
    Par vilwix dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 25/01/2013, 18h51
  2. Réponses: 4
    Dernier message: 21/07/2009, 18h41
  3. filtrer par date de la semaine du jour
    Par feinix dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/05/2009, 10h13
  4. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  5. [formulaire] filtrer par une combobox
    Par Marie D dans le forum Access
    Réponses: 8
    Dernier message: 19/09/2005, 15h14

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