Procédure dans un module puis l'appeler

4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009 - 20 févr. 2008 à 11:01
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 21 févr. 2008 à 22:40
Bonjour,

J'ai plusieurs procédure sur plusieurs formulaires Access qui sont les mêmes.
Et je voudrais mettre la procédure dans un module et l'appeler à chaque fois que j'en ai besoin.

Voilà la procédure d'un formulaire que je veux mettre dans un module :

Private Sub ld_nom_AfterUpdate()
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[code_contact] = " & Str(Nz(Me![ld_nom], 0))
    Me.Détail.Visible = True
    If Not rs.EOF Then
    Me.Bookmark = rs.Bookmark
    End If
End Sub

Code_contact est le champ d'une table et ld_nom une liste déroulante du formulaire.
Ces deux là change à chaque fois que la procédure doit être appelée.

Comment dois-je écrire ma procédure dans mon module afin qu'elle puisse etre utilisé à chaque fois ?
Comment dois-je l'appeler par la suite ?

Je vous remercie par avance.

4rocky4

10 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 févr. 2008 à 11:37
Salut,
Essaie de passer les deux parametre en  String
ATTENTION dans un module tu ne pourras pas utiliser ME

   Dim rs As Object
   Set rs = Me.Recordset.Clone
   rs.FindFirst "[code_contact] = " & Str(Nz(Me![ld_nom], 0))
   Me.Détail.Visible = True
   If Not rs.EOF Then
   Me.Bookmark = rs.Bookmark
   End If , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
wassimez Messages postés 25 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 26 février 2008
20 févr. 2008 à 11:44
Bonjour ,
en plus il faut que tu change
Private Sub ld_nom_AfterUpdate()
par
Public Sub ld_nom_AfterUpdate()
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
20 févr. 2008 à 11:49
Re,

Alors dans mon module j'ai mis :
---------------------------
Sub liste_recherche(frm As Form, champ AsString, liste AsString)
    ' Rechercher l'enregistrement correspondant au contrôle.
    Dim rs AsObject
    Set rs = frm.Recordset.Clone
    rs.FindFirst"[" & champ & "] = " & Str(Nz(frm![" & liste & "], 0))
    'on affiche la partie détail
    frm.Détail.Visible = True
    'si le nom saisie n'existe pas
    IfNot rs.EOFThen
    frm.Bookmark = rs.Bookmark
    EndIf
EndSub
--------------------------
puis pour appeler la procédure je procède comme ça :

--------------------------
PrivateSub ld_recherche_AfterUpdate()
Call liste_recherche(Me, code_contact, ld_nom)
EndSub
-------------------------

Mais lorsque je lance mon formulaire et que jeffectue l'action qui exécute ma procédure, j'obtiens ce message d'erreur :

erreur d'exécution '2465':
impossible de trouver le champ "&liste&" auquel il fait référence dans votre expression.
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
20 févr. 2008 à 14:47
Comment faire pour régler ce problème ?
0

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

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 févr. 2008 à 00:03
>> Code_contact est le champ d'une table et ld_nom une liste déroulante du formulaire.


Si ld_nom est une liste déroulante, tu ne peux pas la passer en paramètre As String.

Tu dois soit la passer comme Object ou Listbox et changer ton code, ou soit passer le texte sélectionné et là tu dois changer l'appel
Call liste_recherche(Me, code_contact, ld_nom.Text)

Et pourquoi déclarer rs As Object plutôt que As Recordset ?
Peut-être est-ce nécessaire pour cette méthode de clone...(?) Je trouve ça étrange tout de même...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
21 févr. 2008 à 09:25
Bonjour,

Si je déclare rs as recordet, j'obtiens une erreur ici rs.FindFirst.
En mettantld_nom.Text, cela ne change rien.

J'ai toujours le même message d'erreur :

erreur d'exécution '2465':
impossible de trouver le champ "&liste&" auquel il fait référence dans votre expression.

Et en cliquant sur débogage, j'arrive sur ce code :

En mettant liste as listbox affiche également un problème,Imcompatibilité de type.
Et ca me montre ce code :
Call liste_recherche(Me, code_ce, ld_recherche)

Que d'erreurs
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
21 févr. 2008 à 10:31
J'ai résolu mon problème.
je vous remercie.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 févr. 2008 à 11:05
Et comment as-tu résolu ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
4rocky4 Messages postés 55 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 16 avril 2009
21 févr. 2008 à 14:01
J'ai mis cette ligne à la place :

rs.FindFirst "[" & champ & "] = " & Str(Nz(frm(liste), 0))

et voilà ... :)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 févr. 2008 à 22:40
Comme ton problème est résolu et que tu as inscrit la solution, clique le bouton Accepté sur ton dernier message qui affiche cette solution.
Ça pourrait être pratique pour ceux qui feront des recherches...

Bonne continuation !

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous