OVH Cloud OVH Cloud

Appel a F. PICALAUSA

3 réponses
Avatar
JCM
Merci pour toutes vos r=E9ponses

cela marche, j'ai voulu am=E9liorer en placant trois boutons=20
pour ajouter des crit=E8res de recherche
cela marche mais c'est pas g=E9nial
quand j'ai fait un crit=E8re, pour faire une nouvelle=20
recherche sur un autre crit=E8re il faut effacer la saisie=20
du textbox et en faire une nouvelle
voici le code, on peut am=E9liorer ?

Private Sub OptClient_Click()
LeChoix =3D "client"
FrmRecherche.Caption =3D "Recherche sur " & LeChoix
End Sub

Private Sub OptEnseigne_Click()
LeChoix =3D "enseigne"
FrmRecherche.Caption =3D "Recherche sur " & LeChoix
End Sub

Private Sub OptVille_Click()
LeChoix =3D "affaire"
FrmRecherche.Caption =3D "Recherche sur ville"
End Sub

Private Sub TxtRecherche_Change()
If LeChoix =3D "" Then
MsgBox "Vous devez choisir un crit=E8re de recherche"
Else
'Affichage des enregistrements pour le client=20
s=E9lectionn=E9
Dim LgMot As Integer
LgMot =3D Len(Trim$(TxtRecherche.Text))

Set ADOaf =3D New ADODB.Recordset
With ADOaf
.ActiveConnection =3D ADOcn
.CursorType =3D adOpenDynamic
.Open "Select " & LeChoix & " from affaire where=20
left(" & LeChoix & ", " & LgMot & ")LIKE'" & Trim
(TxtRecherche.Text) & "'"
End With
'remplissage de MSRecherche
LaLigne% =3D 0
Do Until ADOaf.EOF
LaLigne% =3D LaLigne% + 1
MSRecherche.FixedAlignment(0) =3D 4
MSRecherche.Rows =3D LaLigne% + 1
MSRecherche.Row =3D LaLigne%
MSRecherche.Col =3D 0
MSRecherche.Text =3D ADOaf(LeChoix)
ADOaf.MoveNext
Loop
End If
End Sub

j'aurais aimer ajouter un order by LeChoix ASC, et ca BEUG

merci de votre aide
amicalement
jean claude

3 réponses

Avatar
François Picalausa
Bonjour/soir,

On pourrait améliorer le code en créant des option buttons indexés. Si leur
nom est OptSearchType on aurait le code suivant (je suppose que LeChoix est
une variable privée du module).
J'ai mis divers commentaires dans le code sur ce que je pensais utile
d'ajouter/de modifier:

Private LeChoix As String

Private Sub OptSearchType_Click (Index As Integer)
Dim LabelCaption As String

'Définit le champ de recherche
'et le type de recherche affiché
Select Case Index
Case 0
LeChoix = "client"
LabelCaption = "client"
Case 1
LeChoix = "enseigne"
LabelCaption = "enseigne"
Case 2
LeChoix = "affaire"
LabelCaption = "ville"
End Select

'Affiche la sélection
FrmRecherche.Caption = "Recherche sur " & LabelCaption

'Permet le rafraichissement de la recherche
TxtRecherche_Change
End Sub

Private Sub TxtRecherche_Change()
If LeChoix = "" Then
'Rien de pire que d'afficher une message box pendant que
l'utilisateur tape
'Je te conseille un ajout de cette vérification et déplacer la
msgbox dans
'TxtRecherche_Validate
'MsgBox "Vous devez choisir un critère de recherche"
Else
'Affichage des enregistrements pour le client sélectionné
Dim LgMot As Integer
LgMot = Len(Trim$(TxtRecherche.Text))

Set ADOaf = New ADODB.Recordset
With ADOaf
.ActiveConnection = ADOcn
.CursorType = adOpenDynamic

'Dans ton textbox, j'ajouterais volontier un ' AND '0'='0 pour
tout faire foirer...
'Il faudrait faire des Replace$(Trim$(TxtRecherche.Text), "'",
"''")
'Il faudrait terminer la requête par ; pour pouvoir le porter
par après si nécessaire :
'certains moteurs de bdd l'exigent.

'La ligne suivante me semble plus correcte mais je ne suis pas
pro en SQL ;-)
.Open "Select " & LeChoix & _
" from affaire where left(" & LeChoix & ", " & LgMot & _
") LIKE '" & Replace$(Trim(TxtRecherche.Text)), "'", "''") &
"' ORDER BY LeChoix ASC;"
End With

'remplissage de MSRecherche
'Les %, &, $, ... sont obsolètes (mis à part $, dans les fonctions
de VBA.Strings le permettant).
'Je te conseille de typer tes variables avec des As Integer, As Long
et As String, respectivement
LaLigne% = 0
Do Until ADOaf.EOF
LaLigne% = LaLigne% + 1
MSRecherche.FixedAlignment(0) = 4
MSRecherche.Rows = LaLigne% + 1
MSRecherche.Row = LaLigne%
MSRecherche.Col = 0
MSRecherche.Text = ADOaf(LeChoix)
ADOaf.MoveNext
Loop
End If
End Sub

Private Sub TxtRecherche_Validate()
If LeChoix = "" Then
MsgBox "Vous devez choisir un critère de recherche"
End If
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

"JCM" a écrit dans le message de
news:001401c3d530$9ba0f7b0$
Merci pour toutes vos réponses

cela marche, j'ai voulu améliorer en placant trois boutons
pour ajouter des critères de recherche
cela marche mais c'est pas génial
quand j'ai fait un critère, pour faire une nouvelle
recherche sur un autre critère il faut effacer la saisie
du textbox et en faire une nouvelle
voici le code, on peut améliorer ?

Private Sub OptClient_Click()
LeChoix = "client"
FrmRecherche.Caption = "Recherche sur " & LeChoix
End Sub

Private Sub OptEnseigne_Click()
LeChoix = "enseigne"
FrmRecherche.Caption = "Recherche sur " & LeChoix
End Sub

Private Sub OptVille_Click()
LeChoix = "affaire"
FrmRecherche.Caption = "Recherche sur ville"
End Sub

Private Sub TxtRecherche_Change()
If LeChoix = "" Then
MsgBox "Vous devez choisir un critère de recherche"
Else
'Affichage des enregistrements pour le client
sélectionné
Dim LgMot As Integer
LgMot = Len(Trim$(TxtRecherche.Text))

Set ADOaf = New ADODB.Recordset
With ADOaf
.ActiveConnection = ADOcn
.CursorType = adOpenDynamic
.Open "Select " & LeChoix & " from affaire where
left(" & LeChoix & ", " & LgMot & ")LIKE'" & Trim
(TxtRecherche.Text) & "'"
End With
'remplissage de MSRecherche
LaLigne% = 0
Do Until ADOaf.EOF
LaLigne% = LaLigne% + 1
MSRecherche.FixedAlignment(0) = 4
MSRecherche.Rows = LaLigne% + 1
MSRecherche.Row = LaLigne%
MSRecherche.Col = 0
MSRecherche.Text = ADOaf(LeChoix)
ADOaf.MoveNext
Loop
End If
End Sub

j'aurais aimer ajouter un order by LeChoix ASC, et ca BEUG

merci de votre aide
amicalement
jean claude
Avatar
JCM
Merci de ta réponse François

mais je ne comprends pas ces lignes:

'Dans ton textbox, j'ajouterais volontier un ' AND '0'='0
pour
tout faire foirer...
'Il faudrait faire des
Replace$(Trim$(TxtRecherche.Text), "'",
"''")
OU J'AJOUTE CECI

Ensuite j'ai déplacer la MsgBox comme tu me l'a indiqué et
j'ai supprimé la condition IF ELSE ENDIF dans le Private
Sub TxtRecherche_change()

et Cela BEUG

Merci de ton aide
Jean Claude

-----Message d'origine-----
Bonjour/soir,

On pourrait améliorer le code en créant des option


buttons indexés. Si leur
nom est OptSearchType on aurait le code suivant (je


suppose que LeChoix est
une variable privée du module).
J'ai mis divers commentaires dans le code sur ce que je


pensais utile
d'ajouter/de modifier:

Private LeChoix As String

Private Sub OptSearchType_Click (Index As Integer)
Dim LabelCaption As String

'Définit le champ de recherche
'et le type de recherche affiché
Select Case Index
Case 0
LeChoix = "client"
LabelCaption = "client"
Case 1
LeChoix = "enseigne"
LabelCaption = "enseigne"
Case 2
LeChoix = "affaire"
LabelCaption = "ville"
End Select

'Affiche la sélection
FrmRecherche.Caption = "Recherche sur " & LabelCaption

'Permet le rafraichissement de la recherche
TxtRecherche_Change
End Sub

Private Sub TxtRecherche_Change()
If LeChoix = "" Then
'Rien de pire que d'afficher une message box


pendant que
l'utilisateur tape
'Je te conseille un ajout de cette vérification


et déplacer la
msgbox dans
'TxtRecherche_Validate
'MsgBox "Vous devez choisir un critère de


recherche"
Else
'Affichage des enregistrements pour le client


sélectionné
Dim LgMot As Integer
LgMot = Len(Trim$(TxtRecherche.Text))

Set ADOaf = New ADODB.Recordset
With ADOaf
.ActiveConnection = ADOcn
.CursorType = adOpenDynamic

'Dans ton textbox, j'ajouterais volontier


un ' AND '0'='0 pour
tout faire foirer...
'Il faudrait faire des


Replace$(Trim$(TxtRecherche.Text), "'",
"''")
'Il faudrait terminer la requête par ; pour


pouvoir le porter
par après si nécessaire :
'certains moteurs de bdd l'exigent.

'La ligne suivante me semble plus correcte


mais je ne suis pas
pro en SQL ;-)
.Open "Select " & LeChoix & _
" from affaire where left(" & LeChoix


& ", " & LgMot & _
") LIKE '" & Replace$(Trim


(TxtRecherche.Text)), "'", "''") &
"' ORDER BY LeChoix ASC;"
End With

'remplissage de MSRecherche
'Les %, &, $, ... sont obsolètes (mis à part $,


dans les fonctions
de VBA.Strings le permettant).
'Je te conseille de typer tes variables avec des


As Integer, As Long
et As String, respectivement
LaLigne% = 0
Do Until ADOaf.EOF
LaLigne% = LaLigne% + 1
MSRecherche.FixedAlignment(0) = 4
MSRecherche.Rows = LaLigne% + 1
MSRecherche.Row = LaLigne%
MSRecherche.Col = 0
MSRecherche.Text = ADOaf(LeChoix)
ADOaf.MoveNext
Loop
End If
End Sub

Private Sub TxtRecherche_Validate()
If LeChoix = "" Then
MsgBox "Vous devez choisir un critère de


recherche"
End If
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

"JCM" a écrit dans le


message de
news:001401c3d530$9ba0f7b0$
Merci pour toutes vos réponses

cela marche, j'ai voulu améliorer en placant trois boutons
pour ajouter des critères de recherche
cela marche mais c'est pas génial
quand j'ai fait un critère, pour faire une nouvelle
recherche sur un autre critère il faut effacer la saisie
du textbox et en faire une nouvelle
voici le code, on peut améliorer ?

Private Sub OptClient_Click()
LeChoix = "client"
FrmRecherche.Caption = "Recherche sur " & LeChoix
End Sub

Private Sub OptEnseigne_Click()
LeChoix = "enseigne"
FrmRecherche.Caption = "Recherche sur " & LeChoix
End Sub

Private Sub OptVille_Click()
LeChoix = "affaire"
FrmRecherche.Caption = "Recherche sur ville"
End Sub

Private Sub TxtRecherche_Change()
If LeChoix = "" Then
MsgBox "Vous devez choisir un critère de recherche"
Else
'Affichage des enregistrements pour le client
sélectionné
Dim LgMot As Integer
LgMot = Len(Trim$(TxtRecherche.Text))

Set ADOaf = New ADODB.Recordset
With ADOaf
.ActiveConnection = ADOcn
.CursorType = adOpenDynamic
.Open "Select " & LeChoix & " from affaire where
left(" & LeChoix & ", " & LgMot & ")LIKE'" & Trim
(TxtRecherche.Text) & "'"
End With
'remplissage de MSRecherche
LaLigne% = 0
Do Until ADOaf.EOF
LaLigne% = LaLigne% + 1
MSRecherche.FixedAlignment(0) = 4
MSRecherche.Rows = LaLigne% + 1
MSRecherche.Row = LaLigne%
MSRecherche.Col = 0
MSRecherche.Text = ADOaf(LeChoix)
ADOaf.MoveNext
Loop
End If
End Sub

j'aurais aimer ajouter un order by LeChoix ASC, et ca BEUG

merci de votre aide
amicalement
jean claude


.



Avatar
François Picalausa
Bonjour/soir,
"JCM" a écrit dans le message de
news:098d01c3d5cf$77035700$
mais je ne comprends pas ces lignes:

Replace$(Trim$(TxtRecherche.Text), "'",
"''")
OU J'AJOUTE CECI



Je l'avais ajouté dans le code:
.Open "Select " & LeChoix & _
" from affaire where left(" & LeChoix
& ", " & LgMot & ") LIKE '" & _
*Replace$(Trim (TxtRecherche.Text)), "'", "''")*
& "' ORDER BY LeChoix ASC;"


Ensuite j'ai déplacer la MsgBox comme tu me l'a indiqué et
j'ai supprimé la condition IF ELSE ENDIF dans le Private
Sub TxtRecherche_change()



Pas supprimer la condition... tu dois toujours tester ta condition pour ne
pas exécuter le code!
Mais il faut la recopier.
La MsgBox par contre n'est à garder que dans la procédure Validate.