Tester l’existence d’un objet sur un formulaire
Je voudrais savoir si une zone de texte (ou n’importe quel autre objet, en fait) existe bien sur un formulaire. Je connais le nom du formulaire, ainsi que le nom de l’objet dont je veux vérifier l’existence. Comment faire ?
Le code
Recopiez la fonction ci-dessous dans un module standard de votre base de données :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Function ControlExists( _ ByVal strFormName As String, _ ByVal strControlName As String) As Boolean Dim ctl As Access.Control ' Tenter de récupérer l'objet sur le formulaire On Error Resume Next Set ctl = Forms(strFormName)(strControlName) ' S'il n'y a pas eu d'erreur, l'objet existe ' ... et inversement :-) ControlExists = (Err.Number = 0) Set ctl = Nothing End Function |
La fonction reçoit 2 paramètres (le nom du formulaire et le nom de l’objet dont on veut vérifier l’existence). Elle renvoie True
si l’objet existe, et False
sinon.
Pour tester…
- Ouvrez un formulaire (en mode Formulaire, ou éventuellement en mode Création ; l’important est que le formulaire soit ouvert :-)).
- Ouvrez la fenêtre Exécution (
CTRL
+G
), par exemple. - Tapez-y :
? ControlExists("Nom du formulaire", "Nom de l'objet")
- Vous obtenez
True
en cas de succès,False
sinon.
Vous pouvez bien sûr réutiliser la fonction dans votre propre code VB. Un exemple :
1 2 3 4 5 |
If ControlExists("frm Clients", "Nom Client") Then MsgBox "Le champ [Nom Client] existe.", vbInformation Else MsgBox "Champ [Nom Client] introuvable !", vbExclamation End If |
jeromehej > A priori, je dirais que non. Mais en général, je me dis que les scénarios où on a besoin de connaître les champs d’un formulaire sont ceux où le formulaire est ouvert (que ce soit en mode Formulaire ou en mode Design). Dans les autres cas, on peut travailler sur les niveaux inférieurs (tables). A moins que tu penses à un cas particulier ?
Bonjour,
Attention : sauf erreur de ma part, ce code ne permet pas de vérifier l’existence d’un contrôle d’un formulaire fermé. En effet, il renvoie FALSE si le formulaire est fermé, même si le contrôle existe dans ce formulaire.
Y a t’il un moyen de vérifier l’existence d’un contrôle d’un formulaire fermé SVP (sans utiliser la méthode de l’ouvrir temporairement et le refermer juste après la vérification) ?
Aime > Il faudrait écrire :
RS.FindFirst "[Nom] = '" & Me.RechercheNom & "' AND [Prénom] = '" & Me.RecherchePrenom & "'"
où RechercheNom et RecherchePrenom sont 2 zones de saisie (zones de texte).
… mais je ne sais pas si ça va être si pratique que ça. 😉
Slt , pour effectuer une recherche dans un formulaire (recherche basée sur un seul champ) , j’ai tapé le code suivant :
Private Sub RECHERCHE_Click()
DoCmd.ShowAllRecords
Dim RS As DAO.Recordset
If IsNull(Me.Matricule) Then
MsgBox « Veuillez entrez un matricule. »,vbInformation, « RECHERCHE DOSSIER CNS »
Else
Set RS = Me.RecordsetClone
RS.FindFirst « Matricule= » & Chr$(34) & Me.Matricule & Chr$(34)
If RS.NoMatch Then
MsgBox « Matricule non retrouvé dans la base. », vbInformation, « RECHERCHE MATRICULE »
Else
Me.Bookmark = RS.Bookmark
End If
End If
End Sub
et ça marche .
Mais le problème c’est que j’amerais effectuer une recherche en me basant sur deux champs (Nom et Prénoms ). comment faire ? comment manipuler cette partie :
RS.FindFirst « Matricule= » & Chr$(34) & Me.Matricule & Chr$(34)
MERCI
Christ > Si le champ est de type Texte, il faut l’entourer d’apostrophes. Du style :
Voir cette page pour plus d’infos.
Pour ouvrir le formulaire sur l’enregistrement contenant un champ donné , j’ai tapez ce code :
Docmd.OpenForm « Nom_du_Formulaire « , acNormal ,, » [Matricule]= » &.Me.valeur
[Matricule]: champ
valeur : champ matricule recherché
Le problème est que si le champ matricule a pour propriété Numérique ça passe . Mais quant il s’ agit de Texte ça ne passe pas .
j’aimerais aussi ouvrir le formulaire sur un enregistrement en me basant sur deux champs (par exemple les champs NOM et PRENOMS ) . Comment faire ?