Bonjour à tous ^^,
je vous explique mon problème!
Je suis débutant sur ADO ... Dans un projet je dois parcourir un recordset et faire une reherche voila comment g procédé: g crée une fonction dans le module pour pouvoir l'appeler dans tout le projet comme suit:
records est le recordset et x l'élément recherché
Public Function rechmat(records, x) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If Trim(x) = Trim(records!Matricule) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
Wend
End Function
cela marche tres bien cependant je voudrais faire une fonction qui puisse me servir pour n'importe quel element, po seulement "Matricule"!!!! g essayé ceci mais ca ne marche po :
Public Function rechmat(records, x, elmt) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If Trim(x) = Trim(records!elmt) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
'Wend
End Function
Si quelqu'un a une petite idée ^^ merci d'avance.
A voir également:
Byref argument type mismatch vb6
Byref argument type mismatch - Meilleures réponses
Byref argument type mismatch vba - Meilleures réponses
Ok !
Maintenant fais exactement ceci. Et à la lettre !
Public Function RECHERCHER(xValeur As Variant, xChamp As String) _
As Boolean
rse.MoveFirst
rechmat = False
Do While Not rse.EOF
If x = rse.Fields(xChp) Then
rechmat = True
Exit Function
End If
rse.MoveNext
Wend
End Function
Ensuite places un ButtnCommand dans ton formulaire
et nommes le cmdRecherche
Dans l' événement Click
Private Sub cmdRecherche
Dim Valeur As Variant
Valeur=Text(1).Text
If Rechercher(Valeur,"Matricule")=True Then
MsgBox "Trouvé"
Else
MsgBox " Introuvable"
End If
End Sub
Si ça marchen fais une autre recherche dans le champ Nm
Private Sub cmdRecherche
Dim Valeur As Variant
Valeur=Text(1).Text
If Rechercher(Valeur,"Nom")=True Then
MsgBox "Trouvé"
Else
MsgBox " Introuvable"
End If
Salut,
EDIT....
tu as reposté mais ce n'était pas plus lisible, je reposte ton message ;)
<hr size="2" width="100%" />
Bonjour à tous ^^, je vous explique mon problème!
Je suis débutant sur ADO ...
Dans un projet je dois parcourir un recordset et faire une reherche voila comment g procédé:
g crée une fonction dans le module pour pouvoir l'appeler dans tout le projet comme suit:
records est le recordset et x l'élément recherché
Public Function
rechmat(records, x)
As Boolean
records.MoveFirst rechmat = False
While records.EOF = False
If Trim(x) = Trim(records!Matricule) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
Wend
End Function
cela marche tres bien cependant je voudrais faire une fonction qui puisse me servir pour n'importe quel element, po seulement "Matricule"!!!!
g essayé ceci mais ca ne marche po :
Public Function
rechmat(records, x, elmt)
As
Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If Trim(x) = Trim(records!elmt) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
Wend
End Function
Si quelqu'un a une petite idée ^^ merci d'avance.
<hr size="2" width="100%" />
tu aurais pu faire un effort de français....
le TYPAGE n'est pas facultatif.....
si ELMT est un STRING, ce n'est pas
"je voudrais faire une fonction qui puisse me servir pour n'importe quel element"
Il suddit alors de passer le nom du champ en âramètre
Public Function rechmat(records As RecordSet, cChp As String , x As String) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If Trim(x) = Trim(records.Fields(xChp)) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
Wend
End Function
Seulement voilà :
Cet exemple n' est valable que pour un champ type string.
Pour avoir une function valable pur n' importe quel type de champ,
Il faudra passr l' argument x en variant et faire abstractio
de Trim..
Public Function rechmat(records As RecordSet, cChp As String, x As Variant) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If x = records.Fields(xChp) Then
rechmat = True
Exit Function
End If
records.MoveNext
Wend
End Function
Autre façon de faire: Utiliser le numéro ordinal du champ
au lieu de son nom.
Public Function rechmat(records As RecordSet, cChp As Integer x As Variant) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If x = records.Fields(xChp) Then
rechmat = True
Exit Function
End If
records.MoveNext
Je suis désolé j'utilise Opera c'est pourquoi je ne voyais pas le plugin de word...
Je tiens a vous remércier d'avoir réponsu ci vite c'est très gentil ^^
Je vais peut etre abuser mais pour l'appelle je fais comment parsqu'il me sort une erreur " Byref argument type mismatch" !!
Supposons que tu cherches le Matricule 208 et que ta fonctio s' appelle REXCHERCHER
tU L4 APPELLE COMME CECI/
iF rECHERCHER(rs,"Matricule",208)=True Yjen
<Traitement>
Else
MsgBox "...Introuvable !"
End If
Remarques:
Si ton recordset est publique, il n' est pas necessaire
de le passer en paramçtre.
Essayes de construire ta fonction ainsi:
Public Function RECHERCHER(XChp As String, x As Variant)
As Boolean
Oh c'est déja un grand effort de prendre le temps de lire mes bétises!!! :)
c encore trs gentil a toi ... cempendant l'interetde ma fonction et de comparer par exemple le matricule(qui sera sais au clavier) avec un autre qui fera parti de l'élément Matricule d'une table.
Private Sub Text1_Change(Index As Integer)
If rechmat(rse, Text1(1), Matricule) = True Then
nom.Text = rse!nom
End If
End Sub
rse: Le recordset
text1(1): Le texte a comparer (Je sais ca va sans dire... mas je l'écris vu ta sinatr lol)
Matricule: c'est l'élément avec lequel sera comparé le text1(1)
des petites fautes de frappe donc je le réecris: :p
Oh c'est déja un grand effort de prendre le temps de lire mes bétises!!! :)
c encore très gentil a toi ... cependant l'interet de ma fonction est de comparer par exemple le matricule(qui sera saisi au clavier) avec un autre qui fera parti de l'élément Matricule d'une table.
Private Sub Text1_Change(Index As Integer)
If rechmat(rse, Text1(1), Matricule) = True Then
nom.Text = rse!nom
End If
End Sub
rse: Le recordset
text1(1): Le texte a comparer (Je sais ca va sans dire... mas je l'écris vu ta signature lol)
Matricule: c'est l'élément avec lequel sera comparé le text1(1)
Je te montre ma fonction etma declaration mainenant:
Public Function rechmat(records As Recordset, x As Variant, y As String) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If x = records.Fields(y) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
Wend
End Function
Private Sub Text1_Change(ByRef Index As Integer)
If rechmat(rse, Text1(1).Text, "Matricule") = True Then
nom.Text = rse!nom
End If
End Sub
J'ai maintenant une erreur "type mismatch sur la ligne: " If rechmat(rse, Text1(1).Text, "Matricule") = True Then"
changes le nom de ton recordset.
records est un mot réservé.
Public Function rechmat(rs As Recordset, x As Variant, y As String) As Boolean
Private Sub Text1_Change(ByRef Index As Integer)
Dim x As Variant
Si tin champ est de type String
x=Text(1).Text
Si tin champ est de type Integer
x=CInt(Text(1).Text)
If rechmat(rse, x, "Matricule") = True Then
nom.Text = rse!nom
End If
End Sub
Je viens d'esayer ta solution qui est tout à fit logique mais j'ai toujours l'erreur "type mismatch" sur la ligne "If rechmat(rse, x, "Matricule") = True Then". :s :s