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.
CaroRe-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
CaroSalut
je ferais bcp + court :
AnalyseRegion = DLookUp("Région", "Tbl_Région_CodeP", "Code_Postal='" & Left(CP, 3)& "'")
Oulà
Bye
Buddy
Caro wrote:Bonjour,
Jai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais lexé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 lemployé 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 dutiliser cette fonction dans une requete, afin de
sortir des liste demployé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 sessaie
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,
Jai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais lexé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 lemployé 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 dutiliser cette fonction dans une requete, afin de
sortir des liste demployé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 sessaie
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.
CaroRe-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
CaroSalut
je ferais bcp + court :
AnalyseRegion = DLookUp("Région", "Tbl_Région_CodeP", "Code_Postal='" & Left(CP, 3)& "'")
Oulà
Bye
Buddy
Caro wrote:Bonjour,
Jai réussi ( en buchant très fort ) à créer cette fonction et cela semble
fonctionner, mais lexé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 lemployé 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 dutiliser cette fonction dans une requete, afin de
sortir des liste demployé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 sessaie
Hé bonjour,
Bon y a pas 36 manières pour avoir un temps d'extraction supportable. Il faut directement travailler sur la source en SQL et éviter de passer par les filtres.
Le hic c'est qu'il faut connaitre un peu le SQL pour s'en sortir. Si tu estimes ne pas avoir le temps de t'y consacrer alors reste sur les filtres sinon regardes de ce côté de LEFT JOIN, INNER JOIN
Dans ton cas par exemple cela donnerait qq chose du genre :
v_sql = "SELECT tbl_employes.Nom, tbl_employes.Prenom, tbl_niveau_fr.Niveau FROM tbl_employes LEFT JOIN tbl_niveau_fr ON tbl_employes.IdNiveauFr = tbl_niveau_fr.Id WHERE tbl_niveau_fr.Niveau = 'Moyen';"
Pour mieux comprendre, utilise l'éditeur de requêtes et passe en mode SQL (click droit et sélectionne SQL) et apprends ;-)
Ouala
Bye
Buddy
Caro wrote: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.
CaroRe-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
CaroSalut
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…
Hé bonjour,
Bon y a pas 36 manières pour avoir un temps d'extraction supportable. Il faut directement travailler sur la source en SQL et éviter de passer par les filtres.
Le hic c'est qu'il faut connaitre un peu le SQL pour s'en sortir. Si tu estimes ne pas avoir le temps de t'y consacrer alors reste sur les filtres sinon regardes de ce côté de LEFT JOIN, INNER JOIN
Dans ton cas par exemple cela donnerait qq chose du genre :
v_sql = "SELECT tbl_employes.Nom, tbl_employes.Prenom, tbl_niveau_fr.Niveau FROM tbl_employes LEFT JOIN tbl_niveau_fr ON tbl_employes.IdNiveauFr = tbl_niveau_fr.Id WHERE tbl_niveau_fr.Niveau = 'Moyen';"
Pour mieux comprendre, utilise l'éditeur de requêtes et passe en mode SQL (click droit et sélectionne SQL) et apprends ;-)
Ouala
Bye
Buddy
Caro wrote:
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…
Hé bonjour,
Bon y a pas 36 manières pour avoir un temps d'extraction supportable. Il faut directement travailler sur la source en SQL et éviter de passer par les filtres.
Le hic c'est qu'il faut connaitre un peu le SQL pour s'en sortir. Si tu estimes ne pas avoir le temps de t'y consacrer alors reste sur les filtres sinon regardes de ce côté de LEFT JOIN, INNER JOIN
Dans ton cas par exemple cela donnerait qq chose du genre :
v_sql = "SELECT tbl_employes.Nom, tbl_employes.Prenom, tbl_niveau_fr.Niveau FROM tbl_employes LEFT JOIN tbl_niveau_fr ON tbl_employes.IdNiveauFr = tbl_niveau_fr.Id WHERE tbl_niveau_fr.Niveau = 'Moyen';"
Pour mieux comprendre, utilise l'éditeur de requêtes et passe en mode SQL (click droit et sélectionne SQL) et apprends ;-)
Ouala
Bye
Buddy
Caro wrote: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.
CaroRe-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
CaroSalut
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…