OVH Cloud OVH Cloud

De l'aide en VBA

12 réponses
Avatar
Caro
Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…

10 réponses

1 2
Avatar
crinblanc
Bonjour,
personnellement j'aurais ajouté un champ "empl_region" dans l'adresse de
l'employé qui pointerait sur un champ "region" en Numéro auto (clé primaire)
de la table Régions.
ET là, dans ta requête tu peux faire un lien entre les 2 tables et mettre
les critères de sélection que tu veux. Il n'y a pas plus rapide.
Sinon, utiliser une fonction dans une requête comme critère de sélection
c'est ce qu'il y a de plus long!!



Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…



Avatar
Caro
Bonjour crinblanc,

Oui, je sais que j'aurais pu procéder ainsi, mais je préférais que cela soit
"transparant" au personnel , pout éviter les erreurs lors de l'embauche,
changement d'adresse etc. car nous avons un gros roulement de personnel...

Est-ce que le code te semble "logique " ?

Merci.

Caro



Bonjour,
personnellement j'aurais ajouté un champ "empl_region" dans l'adresse de
l'employé qui pointerait sur un champ "region" en Numéro auto (clé primaire)
de la table Régions.
ET là, dans ta requête tu peux faire un lien entre les 2 tables et mettre
les critères de sélection que tu veux. Il n'y a pas plus rapide.
Sinon, utiliser une fonction dans une requête comme critère de sélection
c'est ce qu'il y a de plus long!!



Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…





Avatar
crinblanc
Bon,
tu dois avoir un état qui liste tes employés?
Dans le SQL de cet état, ajoute un champ CPostal_Abreg:Left$([CP], 3)
Dans ce cas, tu peux l'ouvrir pour une région donnée comme ça par exemple:

DoCmd.OpenReport "nom de l'état", , , "CPostal_Abreg = " & LeCodeRegion

Ce champ LeCodeRegion proviendrait du formulaire où tu choisi la région
Je ne sais pas si c'est clair?


"Caro" wrote:

Bonjour crinblanc,

Oui, je sais que j'aurais pu procéder ainsi, mais je préférais que cela soit
"transparant" au personnel , pout éviter les erreurs lors de l'embauche,
changement d'adresse etc. car nous avons un gros roulement de personnel...

Est-ce que le code te semble "logique " ?

Merci.

Caro



Bonjour,
personnellement j'aurais ajouté un champ "empl_region" dans l'adresse de
l'employé qui pointerait sur un champ "region" en Numéro auto (clé primaire)
de la table Régions.
ET là, dans ta requête tu peux faire un lien entre les 2 tables et mettre
les critères de sélection que tu veux. Il n'y a pas plus rapide.
Sinon, utiliser une fonction dans une requête comme critère de sélection
c'est ce qu'il y a de plus long!!



Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…







Avatar
Caro
Je ne suis pas rendue là... je suis en mode test pour l'instant...

Mon but ultime est d'intégrer ceci dans mon formulaire de recherche de
personnel selon les qualifications recherchées. Exemple: Je recherche
personne avec auto, bilingue,... dans la région 1...
J'ai un formulaire ou je sélectionne les critères recherchés et la liste est
automatiquement filtrée au fur et à mesure ( sous formulaire) .

exemple du filtre utilisé (J'ai reçu de l'aide pour la construction...)

'Auto requise
If Me.AutoReq = True Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Auto]=" & Me.AutoReq & ")"
End If
''
'Bilinguisme
If Me.Emp_Bil = True Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Emp_Biling]=" & Me.Emp_Bil & ")"
End If

Merci.

"crinblanc" wrote:

Bon,
tu dois avoir un état qui liste tes employés?
Dans le SQL de cet état, ajoute un champ CPostal_Abreg:Left$([CP], 3)
Dans ce cas, tu peux l'ouvrir pour une région donnée comme ça par exemple:

DoCmd.OpenReport "nom de l'état", , , "CPostal_Abreg = " & LeCodeRegion

Ce champ LeCodeRegion proviendrait du formulaire où tu choisi la région
Je ne sais pas si c'est clair?


"Caro" wrote:

Bonjour crinblanc,

Oui, je sais que j'aurais pu procéder ainsi, mais je préférais que cela soit
"transparant" au personnel , pout éviter les erreurs lors de l'embauche,
changement d'adresse etc. car nous avons un gros roulement de personnel...

Est-ce que le code te semble "logique " ?

Merci.

Caro



Bonjour,
personnellement j'aurais ajouté un champ "empl_region" dans l'adresse de
l'employé qui pointerait sur un champ "region" en Numéro auto (clé primaire)
de la table Régions.
ET là, dans ta requête tu peux faire un lien entre les 2 tables et mettre
les critères de sélection que tu veux. Il n'y a pas plus rapide.
Sinon, utiliser une fonction dans une requête comme critère de sélection
c'est ce qu'il y a de plus long!!



Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…









Avatar
Buddy
Salut

je ferais bcp + court :
AnalyseRegion = DLookUp("Région", "Tbl_Région_CodeP", "Code_Postal='" & Left(CP, 3)& "'")

Oulà
Bye

Buddy

Caro wrote:
Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…



Avatar
crinblanc
Alors voilà
Sépare ton formulaire de recherche et ton sous-formulaire que tu appelleras
par exemple Result_Recherche
Dans ton formulaire principal crée des champs de recherche en leurs donnant
le même nom que dans le formulaire "résultats"
Crée un bouton "Recherche" et met ce code dans le formulaire

Private Sub Recherche_Click()
Dim ctrl As Control, criteres As String
criteres = ""
For Each ctrl In Me.Controls
If ctrl.ControlType = acTextBox Then
'MsgBox ctrl.Format
If criteres <> "" And Nz(ctrl.Value, 0) <> 0 Then
If InStr(1, ctrl.Format, "date") > 0 Then
criteres = criteres & " AND " & ctrl.Name & " = #" &
ctrl.Value & "#"
ElseIf InStr(1, ctrl.Format, "number") > 0 Then
criteres = criteres & " AND " & ctrl.Name & " = " &
ctrl.Value
Else
criteres = criteres & " AND " & ctrl.Name & " = '" &
ctrl.Value & "'"
End If
ElseIf Nz(ctrl.Value, 0) <> 0 Then
If InStr(1, ctrl.Format, "date") > 0 Then
criteres = criteres & ctrl.Name & " = #" &
Format(ctrl.Value, "mm/dd/yyyy") & "#"
ElseIf InStr(1, ctrl.Format, "number") > 0 Then
criteres = criteres & ctrl.Name & " = " & ctrl.Value
Else
criteres = criteres & ctrl.Name & " = '" & ctrl.Value &
"'"
End If
End If
End If
Next
DoCmd.OpenForm "Result_Recherche", , , criteres
End Sub

Tu comprends?


"Caro" wrote:

Je ne suis pas rendue là... je suis en mode test pour l'instant...

Mon but ultime est d'intégrer ceci dans mon formulaire de recherche de
personnel selon les qualifications recherchées. Exemple: Je recherche
personne avec auto, bilingue,... dans la région 1...
J'ai un formulaire ou je sélectionne les critères recherchés et la liste est
automatiquement filtrée au fur et à mesure ( sous formulaire) .

exemple du filtre utilisé (J'ai reçu de l'aide pour la construction...)

'Auto requise
If Me.AutoReq = True Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Auto]=" & Me.AutoReq & ")"
End If
''
'Bilinguisme
If Me.Emp_Bil = True Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Emp_Biling]=" & Me.Emp_Bil & ")"
End If

Merci.

"crinblanc" wrote:

Bon,
tu dois avoir un état qui liste tes employés?
Dans le SQL de cet état, ajoute un champ CPostal_Abreg:Left$([CP], 3)
Dans ce cas, tu peux l'ouvrir pour une région donnée comme ça par exemple:

DoCmd.OpenReport "nom de l'état", , , "CPostal_Abreg = " & LeCodeRegion

Ce champ LeCodeRegion proviendrait du formulaire où tu choisi la région
Je ne sais pas si c'est clair?


"Caro" wrote:

Bonjour crinblanc,

Oui, je sais que j'aurais pu procéder ainsi, mais je préférais que cela soit
"transparant" au personnel , pout éviter les erreurs lors de l'embauche,
changement d'adresse etc. car nous avons un gros roulement de personnel...

Est-ce que le code te semble "logique " ?

Merci.

Caro



Bonjour,
personnellement j'aurais ajouté un champ "empl_region" dans l'adresse de
l'employé qui pointerait sur un champ "region" en Numéro auto (clé primaire)
de la table Régions.
ET là, dans ta requête tu peux faire un lien entre les 2 tables et mettre
les critères de sélection que tu veux. Il n'y a pas plus rapide.
Sinon, utiliser une fonction dans une requête comme critère de sélection
c'est ce qu'il y a de plus long!!



Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…











Avatar
Caro
Salut crinblanc,

À première vue, je comprends pas grand chose... Mon formulaire de recherche
fonctionne, mais je recherche critères par critères ( j'en ai une
trentaine...) comme dans l'exemple que j'ai inscrit dans mon post précédent
et j'applique le filtre comme ceci.
With Me.RésultatRecherche.Form
.Filter = strFiltre
.FilterOn = True
End With
Après chaque mise à jour de critères j'applique ma commande "Recherche" donc
la liste se filtre au fur et à mesure.
Ton code est beaucoup plus "concis" et je vais l'étudier...

Merci beaucoup pour ton aide.

Caro



"crinblanc" wrote:

Alors voilà
Sépare ton formulaire de recherche et ton sous-formulaire que tu appelleras
par exemple Result_Recherche
Dans ton formulaire principal crée des champs de recherche en leurs donnant
le même nom que dans le formulaire "résultats"
Crée un bouton "Recherche" et met ce code dans le formulaire

Private Sub Recherche_Click()
Dim ctrl As Control, criteres As String
criteres = ""
For Each ctrl In Me.Controls
If ctrl.ControlType = acTextBox Then
'MsgBox ctrl.Format
If criteres <> "" And Nz(ctrl.Value, 0) <> 0 Then
If InStr(1, ctrl.Format, "date") > 0 Then
criteres = criteres & " AND " & ctrl.Name & " = #" &
ctrl.Value & "#"
ElseIf InStr(1, ctrl.Format, "number") > 0 Then
criteres = criteres & " AND " & ctrl.Name & " = " &
ctrl.Value
Else
criteres = criteres & " AND " & ctrl.Name & " = '" &
ctrl.Value & "'"
End If
ElseIf Nz(ctrl.Value, 0) <> 0 Then
If InStr(1, ctrl.Format, "date") > 0 Then
criteres = criteres & ctrl.Name & " = #" &
Format(ctrl.Value, "mm/dd/yyyy") & "#"
ElseIf InStr(1, ctrl.Format, "number") > 0 Then
criteres = criteres & ctrl.Name & " = " & ctrl.Value
Else
criteres = criteres & ctrl.Name & " = '" & ctrl.Value &
"'"
End If
End If
End If
Next
DoCmd.OpenForm "Result_Recherche", , , criteres
End Sub

Tu comprends?


"Caro" wrote:

Je ne suis pas rendue là... je suis en mode test pour l'instant...

Mon but ultime est d'intégrer ceci dans mon formulaire de recherche de
personnel selon les qualifications recherchées. Exemple: Je recherche
personne avec auto, bilingue,... dans la région 1...
J'ai un formulaire ou je sélectionne les critères recherchés et la liste est
automatiquement filtrée au fur et à mesure ( sous formulaire) .

exemple du filtre utilisé (J'ai reçu de l'aide pour la construction...)

'Auto requise
If Me.AutoReq = True Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Auto]=" & Me.AutoReq & ")"
End If
''
'Bilinguisme
If Me.Emp_Bil = True Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Emp_Biling]=" & Me.Emp_Bil & ")"
End If

Merci.

"crinblanc" wrote:

Bon,
tu dois avoir un état qui liste tes employés?
Dans le SQL de cet état, ajoute un champ CPostal_Abreg:Left$([CP], 3)
Dans ce cas, tu peux l'ouvrir pour une région donnée comme ça par exemple:

DoCmd.OpenReport "nom de l'état", , , "CPostal_Abreg = " & LeCodeRegion

Ce champ LeCodeRegion proviendrait du formulaire où tu choisi la région
Je ne sais pas si c'est clair?


"Caro" wrote:

Bonjour crinblanc,

Oui, je sais que j'aurais pu procéder ainsi, mais je préférais que cela soit
"transparant" au personnel , pout éviter les erreurs lors de l'embauche,
changement d'adresse etc. car nous avons un gros roulement de personnel...

Est-ce que le code te semble "logique " ?

Merci.

Caro



Bonjour,
personnellement j'aurais ajouté un champ "empl_region" dans l'adresse de
l'employé qui pointerait sur un champ "region" en Numéro auto (clé primaire)
de la table Régions.
ET là, dans ta requête tu peux faire un lien entre les 2 tables et mettre
les critères de sélection que tu veux. Il n'y a pas plus rapide.
Sinon, utiliser une fonction dans une requête comme critère de sélection
c'est ce qu'il y a de plus long!!



Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…













Avatar
Caro
Salut Buddy,

J'ai corrigé ma fonction avec ton code et ça fonctionne très bien. J'en ai
encore beaucoup à apprendre...

Dans ma requete, quand j'utilise la fonction sans aucun critères, c'est
rapide, mais si je met un critères, exemple région 6, c'est un peu plus
long... j'ai 1400 employés... et ça prends 35 secondes avant d'avoir le
résultat... J'imagine que c'est normal.

Merci beaucoup de ton aide

Caro








Salut

je ferais bcp + court :
AnalyseRegion = DLookUp("Région", "Tbl_Région_CodeP", "Code_Postal='" & Left(CP, 3)& "'")

Oulà
Bye

Buddy

Caro wrote:
Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…






Avatar
Buddy
Re-salut

bon alors au niveau de la démarche, je pense que c'est pas le top.

Il est préférable de créer une zone qui ne sert qu'à la saisie des critères avec un beau gros bouton FILTRER.
Il te suffit sur Click du bouton FILTRER de créer à la volée ton critère et de mettre en source de ton ssform la chaine sql ainsi créée.
Rien empêche les gens de cliquer sur le bouton quand bon leur semble.

L'intérêt de cette approche réside dans le fait que si tu as un critère qui prend 30s pour afficher le résultat, tes utilisateurs vont à la longue devenir fous et puis bonjour les conséquences pour toi...

Cela donnerait qq chose comme ça :

Private Sub btnFiltrer_Click()
Dim v_critere As String, v_sql As String

' Ici tu passes en revue tous tes critères
If AutoReq Then v_critere = v_critere & Iif(Len(v_critere) > 0, " AND ", "") & "AutoReq = True"
If Emp_Bil Then v_critere = v_critere & Iif(Len(v_critere) > 0, " AND ", "") & "Emp_Bil = True"

' Ici tu continue le montage de ton critère

v_sql = "SELECT * FROM tbl_employes" & Iif(Len(v_critere) > 0, " WHERE ", "") & v_critere & ";"
Me.ssFormEmployes.Form.RecordSource = v_sql
End Sub

Ouala
Bye
Buddy

Caro wrote:
Salut Buddy,

J'ai corrigé ma fonction avec ton code et ça fonctionne très bien. J'en ai
encore beaucoup à apprendre...

Dans ma requete, quand j'utilise la fonction sans aucun critères, c'est
rapide, mais si je met un critères, exemple région 6, c'est un peu plus
long... j'ai 1400 employés... et ça prends 35 secondes avant d'avoir le
résultat... J'imagine que c'est normal.

Merci beaucoup de ton aide

Caro









Salut

je ferais bcp + court :
AnalyseRegion = DLookUp("Région", "Tbl_Région_CodeP", "Code_Postal='" & Left(CP, 3)& "'")

Oulà
Bye

Buddy

Caro wrote:

Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…








Avatar
Caro
Salut Buddy,

L'idée du "Bouton", c'est que j'ai fait au début, mais ensuite je me
suis-dit que ça serait plus "hot" si je filtrais immédiatement, d'onc j'ai
masqué mon bouton, mais j'applique le filtre après chaque MAJ de critères.
Sauf qu'à ce moment là j'avais pas de critères qui étaient long à filtrer...

Si je comprends bien ton code (pas sûre..) toi tu changerais la source de
mon sous-formulaire... et tu travaillerais directement avec la table ?

Ma requete source est toujours la même, car plusieurs de mes champs
utilisent des petites fonctions car j'ai pas l'info. directement dans ma
table. Je m'explique : "Emp_Bil" est une fonction qui regarde dans ma table
employés qui analyse plusieurs champs, ex: Francais écrit: (Bon, moyen,
Faible)..., Francais Parlé... tu vois le genre...
C'est pourquoi j'applique un filtre sur le sous-formulaire. Il ne me reste
qu'à trouver la formule pour mon champ "AnalyseRégion" de ma requete.

Merci encore de ton aide.

Caro





Re-salut

bon alors au niveau de la démarche, je pense que c'est pas le top.

Il est préférable de créer une zone qui ne sert qu'à la saisie des critères avec un beau gros bouton FILTRER.
Il te suffit sur Click du bouton FILTRER de créer à la volée ton critère et de mettre en source de ton ssform la chaine sql ainsi créée.
Rien empêche les gens de cliquer sur le bouton quand bon leur semble.

L'intérêt de cette approche réside dans le fait que si tu as un critère qui prend 30s pour afficher le résultat, tes utilisateurs vont à la longue devenir fous et puis bonjour les conséquences pour toi...

Cela donnerait qq chose comme ça :

Private Sub btnFiltrer_Click()
Dim v_critere As String, v_sql As String

' Ici tu passes en revue tous tes critères
If AutoReq Then v_critere = v_critere & Iif(Len(v_critere) > 0, " AND ", "") & "AutoReq = True"
If Emp_Bil Then v_critere = v_critere & Iif(Len(v_critere) > 0, " AND ", "") & "Emp_Bil = True"

' Ici tu continue le montage de ton critère

v_sql = "SELECT * FROM tbl_employes" & Iif(Len(v_critere) > 0, " WHERE ", "") & v_critere & ";"
Me.ssFormEmployes.Form.RecordSource = v_sql
End Sub

Ouala
Bye
Buddy

Caro wrote:
Salut Buddy,

J'ai corrigé ma fonction avec ton code et ça fonctionne très bien. J'en ai
encore beaucoup à apprendre...

Dans ma requete, quand j'utilise la fonction sans aucun critères, c'est
rapide, mais si je met un critères, exemple région 6, c'est un peu plus
long... j'ai 1400 employés... et ça prends 35 secondes avant d'avoir le
résultat... J'imagine que c'est normal.

Merci beaucoup de ton aide

Caro









Salut

je ferais bcp + court :
AnalyseRegion = DLookUp("Région", "Tbl_Région_CodeP", "Code_Postal='" & Left(CP, 3)& "'")

Oulà
Bye

Buddy

Caro wrote:

Bonjour,

J’ai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais l’exécution est assez longue… Est-ce que mon code est «
sensé » ou y aurait-il une meilleure façon de procéder ?

Le but de cette fonction est de comparer les 3 premières lettres du code
postal de l’employé avec une table [Tbl_Région_CodeP] afin de trouver le
numéro de la région attribuée à ce code postal (3 premiers caractères
seulement) et ensuite d’utiliser cette fonction dans une requete, afin de
sortir des liste d’employés appartenant a une région en particulier.

Voici mon code :

Dim CPostal_Abreg As String
CPostal_Abreg = Left([CP], 3) 'Couper les dernier 3 caracteres du cp

Dim db As Database
Dim rst As DAO.Recordset
Dim sSQL As String
Set db = CurrentDb()
sSQL = "Select * From [Tbl_Région_CodeP] where " & " ([Code_Postal] = '" &
[CPostal_Abreg] & "');"
Set rst = db.OpenRecordset(sSQL)
AnalyseRégion = rst("Région").Value
rst.Close
Set db = Nothing

Votre aide serait grandement appréciée

Caro
Une débutante qui s’essaie…











1 2