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 :

Créer une requete sous vba Access [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut Créer une requete sous vba Access
    Bonjour,

    J'essaie en vain de créer une requete sous vba access mais en vain .
    J'ai un message d'erreur 3141 "dans l instruction select, un mot reservé ou un argument est mal orthographié, ou absent, ou la ponctuation est incorrecte"

    Je vous joins ci dessous la requete

    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
    Private Sub trafic_matin()
     
        Liste_nbre_colis_triés_matin.Value = 0 'initialisation de la liste box trafic matin
     
        Dim rst1 As DAO.Recordset
        Dim str1 As String
       str1 = ""
     
    str1 = "SELECT Count(dbo_vwItemData.ItemID) AS [nbre net de colis traités], CVDate(Fix(([DischargeEventTime]-(5/24)))) AS jour"
     
    str1 = str1 & "FROM (dbo_vwItemData INNER JOIN dbo_vwParts ON dbo_vwItemData.DischargePartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]"
     
    str1 = str1 & "WHERE ((([table_Affich-general].Type) <> RJT & ((dbo_vwItemData.DischargeEventTime) >= (CVDate(Fix(Now() - (5 / 24))) + (5 / 24)) And (dbo_vwItemData.DischargeEventTime) <= (CVDate(Fix(Now() - (5 / 24))) + ((25 / 2) / 24))))"
     
    str1 = str1 & "GROUP BY CVDate(Fix(([DischargeEventTime]-(5/24))))"
     
    str1 = str1 & "ORDER BY Count(dbo_vwItemData.ItemID) DESC;"
     
     
        Set rst1 = CurrentDb.OpenRecordset(str1, dbOpenDynaset)
        txt_trafic_matin.Value = rst1(0)
        rst1.Close
        Set rst1 = Nothing
     
    End Sub

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et en rajoutant un espace à la fin de chaque ligne de concaténation ?

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    cela ne change rien , j 'ai toujours l'erreur qui s'affiche

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Vous avez essayé de mettre la totalité de la sélection en une ligne de commande?

    Ou déclarer 5 str différentes:

    str1 = SELECT ....
    str2 = str1 & FROM ... INNER JOIN... ON...
    str3 = str1 & str2 & ...

    Ainsi de suite, ça expliquerais l'erreur.

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    cela ne marche toujours pas.
    Il faut savoir j'ai cree cette requete en mode creation et je l ai affiche en mode sql.
    Je pensais ensuite qu il suffisait de recopier ce code sql et de le coller simplement dans le Private Sub().
    Mais non , je dois apparemment reprendre le code sql et l adapter en language vba.
    Et la je suis coince car je suis pas tres fort en VBA Access.
    Y aurait il quelqu un qui pouurait m aider a adapter cette requete sql en vba Access.
    Merci

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 715
    Points : 57 358
    Points
    57 358
    Billets dans le blog
    42
    Par défaut
    salut,

    ligne 13, à la fin de la clause WHERE, il manquerait pas une parenthèse fermante ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je pensais ensuite qu il suffisait de recopier ce code sql et de le coller simplement dans le Private Sub().
    Non, il faut souvent adapter, par exemple je vois que dans ta clause Where il y a RJT, si c'est une valeur fixe, il faut l'entourer de simples quotes (') car c'est du texte.

    Si c'est une variable, il faut la sortir et la rajouter par concaténation, ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ((([table_Affich-general].Type) <> '" & RJT & "' ...
    Philippe

  8. #8
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Philippe,

    J'ai repris le code sql et j 'ai inséré la valeur "RJT" comme une variable.
    Mais j'ai toujours le message d'erreur 3141 qui s'affiche lors de l'éxécution du code.
    "dans l instruction select, un mot reservé ou un argument est mal orthographié, ou absent, ou la ponctuation est incorrecte".
    Le soucis, c'est que je ne sais pas quel est le mot ou l'argument qui pose problème.

    Ci dessous le code avec la modification de la valeur "RJT"
    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
    Private Sub trafic_matin()
    Dim rst1 As DAO.Recordset
    Dim str1 As String
    
    Dim strrejet As String
    strrejet = "RJT"
    
    str1 = "SELECT Count(dbo_vwItemData.ItemID) AS [nbre net de colis traités], CVDate(Fix(([DischargeEventTime]-(5/24)))) AS jour"
    str1 = str1 + "FROM (dbo_vwItemData INNER JOIN dbo_vwParts ON dbo_vwItemData.DischargePartID=dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName=[table_Affich-general].[Chute (format access)]"
    str1 = str1 + "WHERE ((([table_Affich-general].Type)<>'" & RJT & "') AND ((dbo_vwItemData.DischargeEventTime)>=(CVDate(Fix(Now()-(5/24)))+(5/24)) And (dbo_vwItemData.DischargeEventTime)<=(CVDate(Fix(Now()-(5/24)))+((25/2)/24))))"
    str1 = str1 + "GROUP BY CVDate(Fix(([DischargeEventTime]-(5/24))))"
    str1 = str1 + "ORDER BY Count(dbo_vwItemData.ItemID) DESC;"
    
    Set rst1 = CurrentDb.OpenRecordset(str1, dbOpenDynaset)
    Texte_trafic_matin.Value = rst1(0)
    rst1.Close
    Set rst1 = Nothing

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re

    Tu as oublié (comme dit plus haut) les espaces en fin de lignes.

    Philippe

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Si je peux me permettre, voici un 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
    Public Sub Test(monParametre1 As String, monParametre2 As Integer)
        Dim strSQL As String
        Dim rst As DAO.Recordset
        Dim fld As DAO.Field
     
        strSQL = "SELECT COUNT(champs1) AS nbre, champs2 AS test " & _
                 "FROM maTable " & _
                 "WHERE champs3 = """ & monParametre1 & """ AND champs4 = " & monParametre2 & " " & _
                 "GROUP BY champs2 " & _
                 "ORDER BY champs2;"
     
        Set rst = CurrentDb.OpenRecordset(strSQL)
     
        Do While Not rst.EOF
            For Each fld In rst.Fields
                MsgBox fld.Name & " = " & fld.Value
            Next fld
            rst.MoveNext
        Loop
     
        rst.Close
    End Sub

  11. #11
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Philippe,
    lorsque tu dis
    Tu as oublié (comme dit plus haut) les espaces en fin de lignes
    dois comprendre qu' à la fin de chaque ligne je dois simplement appuyer sur la barre d'espace de mon clavier ou dois je inserer le "_" de la touche 8.

    Paidge,
    si je reprends ton exemple, je devrais donc ecrire ma requete en 1 seul ligne et en insérant à la fin de chaque ligne le & _

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Le "_" est le caractère de continuité de ligne. C'est-à-dire que si ton instruction est trop longue pour être affichée sur l'écran, ça te permet d'écrire l'instruction sur plusieurs lignes sans être obligé de scroller horizontalement...

    Techniquement ça revient à peu près au même que ce que tu as écrit

    Ce que Philippe veut dire, c'est que si tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maString= "Bonjour"
    maString = maString & "et bonne année."
    msgbox maString
    ça t'écriras : Bonjouret bonne année.

    Si tu regardes mon exemple, tu verras qu'il y a toujours un espace avant de refermer les guillemets.
    En espérant que ça éclaire ta lanterne

  13. #13
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Merci Plaidge et Philippe.
    ma requete vba fonctionne trés bien grace à vos conseils..

  14. #14
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Messieurs,

    Je reviens vers vous pour ces 3 requetes (matin , AM et nuit) en VBA.
    je me rends compte d'un problème qui survient le matin pour deux de ces requetes.
    Je m'explique,
    Deux de ces requetes, AM et nuit, commencent respectivement à 12h30 et 19h30.
    Par conséquent, la matin pour la requete AM, qui commene à 12h30, j'ai un message d'erreur :
    "Erreur d'éxécution 2113. Valeur incorrect pour ce champ"
    Et la ligne 14 du code est surligné en jaune.

    L' aprés midi ( aprés 12h30), la requete AM fonctionne mais celle de la nuit m' affiche le même message d'erreur 2113.

    Je pense que l'anomalie survient du fait que la requete AM commence à 12h30. Et comme il n'ya pas de donnée avant 12h30, j'ai ce message d'erreur.
    Même chose pour la requete nuit qui commence à 19h30.

    Je pense qu'il faudrait rajouter une ligne de code pour dire que si la requete n'a pas de donnée alors par defaut on met la valeur 0.
    Mais en language VBA , je ne sais pas comment y traduire..

    Je vous joins la requete AM pour une meilleur compréhension

    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
    Private Sub trafic_apres_midi()
     
        Dim rst2 As DAO.Recordset
        Dim str2 As String
     
     
    str2 = "SELECT Count(dbo_vwItemData.ItemID) AS [nbre net de colis traités], CVDate(Fix(([DischargeEventTime]-(5/24)))) AS jour"
    str2 = str2 + " FROM (dbo_vwItemData INNER JOIN dbo_vwParts ON dbo_vwItemData.DischargePartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]"
    str2 = str2 + " WHERE ((([table_Affich-general].Type) <> 'RJT') And ((dbo_vwItemData.DischargeEventTime) > (CVDate(Fix(Now() - (5 / 24))) + (25 / 2) / 24) And (dbo_vwItemData.DischargeEventTime) <= (CVDate(Fix(Now() - (5 / 24))) + ((39 / 2) / 24))))"
    str2 = str2 + " GROUP BY CVDate(Fix(([DischargeEventTime]-(5/24))))"
    str2 = str2 + " ORDER BY Count(dbo_vwItemData.ItemID) DESC;"
    'MsgBox str2
        Set rst2 = CurrentDb.OpenRecordset(str2, dbOpenDynaset)
        Texte_trafic_AM.Value = rst2(0)  
       rst2.Close
        Set rst2 = Nothing
     
    End Sub

  15. #15
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour facteur,

    si tu veux tester ton jeu d'enregistrement, le mieux est d'utiliser la proriété BOF et EOF
    En sachant que si ton jeux d'enregistrement est vide, les 2 propriétés BOF et EOF ont la valeur True

  16. #16
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Dumas,

    Et concretement comment dois je appliquer la proriété BOF et EOF
    dans mon code ?

  17. #17
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Dumas, j'ai rajouter ces quelques lignes dans mon code code mais en vain
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If IsNull(rst2) Then Texte_trafic_AM.Value = 0
        Else
        Texte_trafic_AM.Value = rst2(0)
        End If
    J'ai un message d'erreur qui me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur de complation . Else sans If
    Voici le code entier :

    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
    Private Sub trafic_apres_midi()
     
        Dim rst2 As DAO.Recordset
        Dim str2 As String
     
     
    str2 = "SELECT Count(dbo_vwItemData.ItemID) AS [nbre net de colis traités], CVDate(Fix(([DischargeEventTime]-(5/24)))) AS jour"
    str2 = str2 + " FROM (dbo_vwItemData INNER JOIN dbo_vwParts ON dbo_vwItemData.DischargePartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]"
    str2 = str2 + " WHERE ((([table_Affich-general].Type) <> 'RJT') And ((dbo_vwItemData.DischargeEventTime) > (CVDate(Fix(Now() - (5 / 24))) + (25 / 2) / 24) And (dbo_vwItemData.DischargeEventTime) <= (CVDate(Fix(Now() - (5 / 24))) + ((39 / 2) / 24))))"
    str2 = str2 + " GROUP BY CVDate(Fix(([DischargeEventTime]-(5/24))))"
    str2 = str2 + " ORDER BY Count(dbo_vwItemData.ItemID) DESC;"
    'MsgBox str2
        Set rst2 = CurrentDb.OpenRecordset(str2, dbOpenDynaset)
     
        If IsNull(rst2) Then Texte_trafic_AM.Value = 0
        Else
        Texte_trafic_AM.Value = rst2(0)
        End If
     
        rst2.Close
        Set rst2 = Nothing
     
    End Sub

  18. #18
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour facteur,

    En préambule, je t'ouvre une parenthèse sur l'aide en ligne de Access, qui contient énormément d'information. Je ne saurais te conseiller d'en user et d'abuser ...
    Donc le premier réflèxe est ... la touche F1

    concernant la syntaxe du if .. then .. else (qui est aussi documenté en appuyant sur la touche F1) elle doit répondre à la contrainte suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If <condition> then [saut de ligne]
       instruction 1
    else [saut de ligne]
       instruction 2
    end if
    si tu veux mettre l'instuction à la suite, tu dois alors écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If <condition> then :    instruction 1
    Pour améliorer la lisibilité de ton code, n'hésite pas à passer à la ligne quand tu le peux.
    Ensuite, n'hésite pas à utiliser les indentations.

    Concernant le test que tu as écrit, il ne fonctionnera probablement pas, car le test isnull s'appliquera à une variable, si celle-ci est instanciée, et non à un jeu d'enregistrement.

    Je te propose plutôt la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set rst2 = CurrentDb.OpenRecordset(str2, dbOpenDynaset)
     
        If (rst2.bof = true and rst2.eof = true)  Then 
              Texte_trafic_AM.Value = 0
        Else
             Texte_trafic_AM.Value = rst2(0)
        End If
    Note que la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (rst2.bof and rst2.eof)   Then
    aurait pu aussi fonctionner

  19. #19
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Dumas,
    Une seule chose à te dire ..MERCI
    Tu sais j 'ai user de la touche F1 mais j 'étais noyé dans ces explications.

    Je reviens vers toi pour une meilleur compréhension du code ci dessous.
    Je pourrais en avoir besoin ultérieurement.
    Serais t il possible que tu me décrivent chaque ligne ci dessous en sachant que je suis débutant en vba access.
    Merci d'avance Dumas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set rst2 = CurrentDb.OpenRecordset(str2, dbOpenDynaset)
     
        If (rst2.BOF = True And rst2.EOF = True) Then
         Texte_trafic_AM.Value = 0
         Else
     
        Texte_trafic_AM.Value = rst2(0)
       End If
     
        rst2.Close
        Set rst2 = Nothing

  20. #20
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour Facteur,

    Pour comprendre le fonctionnement des jeux d'enregistrement, l'aide access (encore elle ...) décrit le mécanisme de DAO

    Je ne saurais non plus te conseiller d'user et d'abuser de ce site, notamment la partie tutoriel qui contient des petites pépites très bien faites (comme ce n'est pas moi qui les ai écrites, ce n'est donc pas de l'auto-pub )
    Pour découvrir, regarde déjà ce tuto ici

    Pour résumer :
    pour ouvrir un recordset, il faut d'abords le déclarer. On écrit toujours dans la partie déclarative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim db as database
    Dim rst2 As DAO.Recordset
    note que la déclaration de la variable database n'est pas obligatoire, mais j'ai tendance, pour améliorer la lisibilité du code, à bien séparer les déclarations
    en général, je mets dans mon code pour l'insrtantiation des variables les 2 lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set db = CurrentDb
    Set rs = Db.OpenRecordset(<source du recordset), <type de recordset>)
    L'instruction que tu utilises est équivalente et résume les 2 instructions que j'ai écrit au dessus
    Une fois que tu a déclaré le recordset, tu as donc ouvert le jeu d'enregistrements avec l'instruction openrecordset.
    En général, quand tu ouvre un jeu d'enregistrements, celui-ci en contient plusieurs. Il convient donc de pouvoir se déplacer dedans. Pour cela, je te laisse regarder le tutoriel.
    L'instruction initiale que tu avais écrite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Texte_trafic_AM.Value = rst2(0)
    signifie que tu lis l'enregistrement courant (pointeur 0).
    Il faut donc faire très attention, car si tu ne te déplace pas dans le recordset, cela signifie que tu lis le 1er enregistrement et que tu es sur que c'est le bon (ce qui est le cas quand il n'y a qu'un seul enregistrement)
    Tu as donc rencontré le cas où le recordset était vide.
    quand tu manipules un recordset, il y a toujours 2 indicateurs qui t'indiquent si tu es en début (BOF) ou en fin de fichier (EOF). C'est expliqué en détail dans le tutoriel. dans le cas présent, nous avons donc juste testé que nous étions en même temps au début et en fin de fichier, c'est à dire que le fichier est vide; d'où l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (rst2.BOF = True And rst2.EOF = True) Then
    les 2 autres instructions sont à faire systématiquement quand tu as fini de traiter ton recordset
    ferme le recordset
    libère la mémoire alloué au recordset

    Voilà, pour résumer, la signification de ton code.
    Encore une fois, n'hésite pas à consulter la rubrique tuto du forum, qui est très complète. Tu y trouveras tout ce dont tu as besoin.

    Bonne chance et à bientôt

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2003] Créer une requête sous vba access
    Par facteur dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/01/2013, 12h03
  2. [AC-2007] Temps d'execution d'une requete sous VBA 4 minutes
    Par sihamelm dans le forum VBA Access
    Réponses: 6
    Dernier message: 24/11/2012, 00h04
  3. [AC-2003] Créer une Requête depuis VBA Access
    Par Goupo dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/02/2011, 00h08
  4. Réponses: 7
    Dernier message: 26/04/2008, 10h48
  5. Comment effacer et créer une requete Access ??
    Par Mustard007 dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/11/2005, 23h15

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