Code VBA sur Access

danièle21 -  
blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   -
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. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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 ?
    0
  2. danièle21
     
    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?
    0
    1. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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).
      0
  3. danièle21
     
    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?
    0
    1. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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.
      0
  4. danièle21
     
    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?
    0
    1. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. danièle21
     
    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?
    0
    1. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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.
      0
  7. danièle21
     
    écris moi un peu le code que tu as tap&é pour que ça marche stp
    0
    1. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Private Sub Commande15_Click()
      DoCmd.OpenQuery "dfgdfg", acViewNormal, acReadOnly
      End Sub
      0
  8. danièle21
     
    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.
    0
    1. danièle21
       
      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?
      0
    2. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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.
      0
    3. danièle21
       
      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?
      0
    4. blux Messages postés 2052 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      On peut tout faire, mais c'est plus ou moins coûteux...
      0