Code VBA sur Access

Fermé
danièle21 - 8 févr. 2013 à 10:39
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 - 8 févr. 2013 à 15:57
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.
A voir également:

7 réponses

blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
8 févr. 2013 à 10:43
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
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
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
8 févr. 2013 à 11:09
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
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
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
Modifié par blux le 8/02/2013 à 12:40
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
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
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
Modifié par blux le 8/02/2013 à 12:41
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
8 févr. 2013 à 13:11
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
écris moi un peu le code que tu as tap&é pour que ça marche stp
0
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
Modifié par blux le 8/02/2013 à 14:03
Private Sub Commande15_Click()
DoCmd.OpenQuery "dfgdfg", acViewNormal, acReadOnly
End Sub
0
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
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
8 févr. 2013 à 14:45
0
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
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
8 févr. 2013 à 15:25
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
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
blux Messages postés 26491 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 novembre 2024 3 316
8 févr. 2013 à 15:57
On peut tout faire, mais c'est plus ou moins coûteux...
0