4rocky4
Messages postés55Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention16 avril 2009
-
20 févr. 2008 à 11:01
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 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 ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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]
4rocky4
Messages postés55Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention16 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 :
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
4rocky4
Messages postés55Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention16 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)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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