Code VBA sur Access

Bonjour,
j'ai une petite difficulté urgente sur la syntaxe d'un code de commande d'un bouton.

je suis dans un formulaire dont la source de données est "liste_qualif".
je veux créer un bouton "commande0" qui me permettra en un clic de réexécuter la requête liste_qualif" puis de l'ouvrir à l'utilisateur. j'ai choisi d'utiliser les fonctions Requery et openquery. voici le code que j'ai écri:

Private Sub Commande0_Click ()
Me.Commande0.Requery
Me.liste_qualif.OpenQuery
End Sub

j'aimerais savoir où est mon erreur et puis comment la corriger.
merci d'avance.

7 réponses

  1. Modérateur
    Salut,

    ce qui serait bien, c'est d'indiquer le message d'erreur et la ligne...

    Mais comme il est vendredi et que je suis particulièrement bon (;-)), je te donne un indice : pourquoi vouloir recalculer un bouton ?
    1. oui merci de l'indice. je viens aussi de lire la syntaxe d'utilisation de la fonction openQuery donc mon code devient:

      Private Sub Commande0_click ()
      liste_qualif.Requery
      DoCmd.OpenQuery(liste_qualif,acViewNormal,acReadOnly)
      End Sub

      mais là il mepose un code erreur:

      Erreur de compilation:
      Attendu :=

      qu'est ce que ça veut dire?
      1. Modérateur
        Quand tu ouvres un query, il se recalcule automatiquement, donc le .requery n'est pas nécessaire...
        Il est nécessaire quand un formulaire (par exemple) affiche ses données en fonction d'un query et que celui-ci est modifié (ajout de critères, par exemple).
    2. finalement j'ai compris un peu cette erreur mais je suis confrontée à un autre. j'ai modifié mon code:

      Private Sub Commande0_Click()
      liste_qualif.Requery
      DoCmd.OpenQuery QueryName:=liste_qualif, View:=acViewNormal, DataMode:=acReadOnly 'on reste sur la même ligne
      End Sub

      mais là il me dit Erreur d'exécution '424':
      Objet requis

      il souligne la ligne liste_qualif.Requery

      qu'est ce que c'est?
      1. Modérateur
        C'est normal, à aucun moment tu ne dis à access que liste_qualif est un objet de type recordset (auquelle est attachée la méthode .requery), donc il ne sait pas quelles sont les propriétés/méthodes attachées à la variable.
    3. effectivement Blux, la table qui est la base de ma requête sera constamment modifiée. il me faut donc réexécuter la requête à chaque fois que je veux l'ouvrir. j'ai bien essayé de l'ouvrir avec la macro prédéfinie de Acces OuvrirRequête mais cette instruction ne réexécute pas la requête, elle ne fait que l'ouvrir identique à la dernière exécution.
      Alors, qu'est ce que c'est cette erreur?
      1. Modérateur
        Je viens de faire un test chez moi, modifier la requête (ou le contenu de la table) et recliquer sur le bouton change les résultats...
    4. donc blux je dois faire une déclaration de variable avant de me lancer dans le code?
      j'écris donc
      :
      Private Sub Commande0_Click()
      Dim liste_qualif As RecordSet
      liste_qualif.Requery
      DoCmd.OpenQuery QueryName:=....(on continue comme au début)

      c'est bien ça?
      1. Modérateur
        Il ne suffit pas de déclarer une variable en recordset pour pouvoir l'utiliser, il faut lui donner des propriétés.
        Dans ton cas, je pense que l'utilisation d'un recordset n'est pas nécessaire. Le problème est ailleurs. Chez moi, la manipulation marche, il n'y a aucune raison pour que ce ne soit pas le cas chez toi.
    5. écris moi un peu le code que tu as tap&é pour que ça marche stp
      1. Modérateur
        Private Sub Commande15_Click()
        DoCmd.OpenQuery "dfgdfg", acViewNormal, acReadOnly
        End Sub
    6. tu as raison blux.merci beaucoup, ça fonctionne.
      cependant, les enregistrements que j'ai rajouté ne sont pas placés en derniers j'ai dû fouiller pendant un certain moment pour retrouver mon enregistrement et pourtant ma requête n'avais pas de critère d'ordre.
      à quoi cela peut-il être dû?
      merci encore.
      1. merci blux je connais bien la fonction ORDER BY je l'ai déjà utilisé dans une liste déroulante mais dans la requête je crois que je dois le mettre en SQL n'est ce pas?
      2. Modérateur
        Oui, mais attention, un order by ne te récupérera les derniers enregistrements qui si tu as prévu un champ date/time mis à jour lors de l'insertion.
      3. oui j'y ai pensé déjà. j'ai créé un champ dans ma table qui est défini par date()
        il ne s'affiche pas dans le formulaire qui permet de rentrer des informations mais seulement dans la requête liste_qualif.
        merci bien.
        j'ai une autre question, peut on exporter des données de access dans un tableur excel pour qu'elles tombent dans un tableau déjà mis en forme?
        du genre, un tableau où on a déjà inséré un titre, des logos et les données doivent arriver à partir disons de la 7e ligne?
      4. Modérateur
        On peut tout faire, mais c'est plus ou moins coûteux...