Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1517 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Remplacer plusieurs procédure par une seule dans un module

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacer plusieurs procédure par une seule dans un module

n°1689201
4rocky4
à 50 cm de l'écran
Posté le 20-02-2008 à 11:31:56  profilanswer
 

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 :
 

Code :
  1. Private Sub ld_nom_AfterUpdate()
  2.     Dim rs As Object
  3.     Set rs = Me.Recordset.Clone
  4.     rs.FindFirst "[code_contact] = " & Str(Nz(Me![ld_nom], 0))
  5.     Me.Détail.Visible = True
  6.     If Not rs.EOF Then
  7.     Me.Bookmark = rs.Bookmark
  8.     End If
  9. 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


---------------
- Un con qui marche ira plus loin qu'un intellectuel assis -
mood
Publicité
Posté le 20-02-2008 à 11:31:56  profilanswer
 

n°1689514
tegu
Posté le 20-02-2008 à 17:30:11  profilanswer
 

Ta procédure devra contenir plusieurs paramètres :
-Le nom du champ à tester (Code_contact dans ton exemple)
-La valeur à comparer au contenu du champ (renvoyée par ld_nom ou autre)
-Le recordset qui permet de faire la recherche (rs)

 

Avec ces paramètres, ta procédure peut travailler (à moins que j'ai loupé un truc)
Il te suffit alors de copier les instructions actuelles en les adaptant avec les noms de paramètres que tu vas déclarer.

 

Sub ProcDe4rocky4(sNomChamp As String, sValeur As String, rs As Object)

 

Attention, sValeur est de type String ! Mais quand tu fais un .FindFirst, fais gaffe à rajouter ou pas les quotes autour de ta valeur suivant si sValeur est censé contenir du texte ou un nombre.

 

Tu appelles cette procédure par :
ProcDe4rocky4 "code_contact", Str(Nz(Me![ld_nom], 0)), rs


Message édité par tegu le 20-02-2008 à 17:31:57
n°1689874
4rocky4
à 50 cm de l'écran
Posté le 21-02-2008 à 09:11:07  profilanswer
 

merci pour ta réponse.
 
Alors j'ai fait comme ceci dans mon module:
 

Code :
  1. Public Sub liste_recherche(frm As Form, champ As String, liste As String)
  2.     ' Rechercher l'enregistrement correspondant au contrôle.
  3.     Dim rs As Object
  4.     Set rs = frm.Recordset.Clone
  5.     'Champ et liste par concaténation, car ce sont des variables
  6.     rs.FindFirst "[" & champ & "] = " & Str(Nz(frm![" & liste & "], 0))
  7.     'on affiche la partie détail
  8.     frm.Détail.Visible = True
  9.     'si le nom saisie n'existe pas
  10.     If Not rs.EOF Then
  11.     frm.Bookmark = rs.Bookmark
  12.     End If
  13. End Sub


 
 
Et j'appel la procédure dans le formulaire :
 

Code :
  1. Call liste_recherche(Me, "code_ce", Str(Nz(Me![ld_recherche], 0)))


 
Je n'ai pas mis "rs" car cela ne marchait pas.
 
Lorsque j'exécute le formulaire appelant la 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.

 
 :pfff:


---------------
- Un con qui marche ira plus loin qu'un intellectuel assis -
n°1689943
tegu
Posté le 21-02-2008 à 10:38:24  profilanswer
 

Ton problème est lié à ta formule « Str(Nz(frm![" & liste & "], 0)) » dont tu n'as pas besoin si tu la passes déjà en paramètre
 
La ligne
rs.FindFirst "[" & champ & "] = " & Str(Nz(frm![" & liste & "], 0))
devient
rs.FindFirst "[" & champ & "] = " & liste
 

n°1690103
4rocky4
à 50 cm de l'écran
Posté le 21-02-2008 à 14:00:06  profilanswer
 

J'ai fait comme ça
 
rs.FindFirst "[" & champ & "] = " & Str(Nz(frm(liste), 0))
 
Et ca marche :)
 
Merci bien :)


---------------
- Un con qui marche ira plus loin qu'un intellectuel assis -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Remplacer plusieurs procédure par une seule dans un module

 

Sujets relatifs
Select count de plusieurs champs sous accessest-il possible de faire un appel dynamique à une procédure??
Pb avec plusieurs formPlusieurs count dans une requete = multiplication
[MiKroC] Appeller plusieurs procédures\sous programmesattacher un compte unix a plusieurs groupe
Ouvrir plusieurs page en un clique[Résolu] Remplacer des caractères par d'autres dans un fichier texte
Dictionnaire : remplacer un mot par lien?macro word remplacer image par texte
Plus de sujets relatifs à : Remplacer plusieurs procédure par une seule dans un module


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR