J'ai écrit une fonction contenant une instruction Select Case
qui ressemble à ceci :
Function Toto (P1 as Long) as String
Select Case P1
Case 1 to 999
Toto = "V1"
Case 1000 to 1999
Toto = "V2"
Case Else
Toto = "V3"
End Select
End Function
Je fait appel à cette fonction dans une requête qui s'appuie
sur une table contenant au moins 5 000 000 de records.
C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer :
- le nombre de cas à traiter,
- les bornes (1, 999, 1000, 1999, ...)
- et les valeurs (V1 à Vn)
sans avoir à toucher au code VBA de la fonction.
J'imagine que ces valeurs figurent dans une table
et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LE CARRE Yannick
Bonjour Patrick,
tu peux essayer de récupérer les valeurs de ton Case, les paramètres associés dans un recordset et parcourir le jeu d'enregistrement. Dans une fonction comportant tous ces paramètres, le case devient alors obsolète si tous les cas sont gérés.
Yannick
Patrick Even a écrit dans le message :
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case qui ressemble à ceci :
Function Toto (P1 as Long) as String Select Case P1 Case 1 to 999 Toto = "V1" Case 1000 to 1999 Toto = "V2" Case Else Toto = "V3" End Select End Function
Je fait appel à cette fonction dans une requête qui s'appuie sur une table contenant au moins 5 000 000 de records. C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer : - le nombre de cas à traiter, - les bornes (1, 999, 1000, 1999, ...) - et les valeurs (V1 à Vn) sans avoir à toucher au code VBA de la fonction. J'imagine que ces valeurs figurent dans une table et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
Cordialement, Patrick EVEN
Bonjour Patrick,
tu peux essayer de récupérer les valeurs de ton Case, les paramètres
associés dans un recordset et parcourir le jeu d'enregistrement.
Dans une fonction comportant tous ces paramètres, le case devient alors
obsolète si tous les cas sont gérés.
Yannick
Patrick Even <peven@capgemini.fr> a écrit dans le message :
OsoRzJ6eDHA.2484@TK2MSFTNGP09.phx.gbl...
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case
qui ressemble à ceci :
Function Toto (P1 as Long) as String
Select Case P1
Case 1 to 999
Toto = "V1"
Case 1000 to 1999
Toto = "V2"
Case Else
Toto = "V3"
End Select
End Function
Je fait appel à cette fonction dans une requête qui s'appuie
sur une table contenant au moins 5 000 000 de records.
C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer :
- le nombre de cas à traiter,
- les bornes (1, 999, 1000, 1999, ...)
- et les valeurs (V1 à Vn)
sans avoir à toucher au code VBA de la fonction.
J'imagine que ces valeurs figurent dans une table
et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
tu peux essayer de récupérer les valeurs de ton Case, les paramètres associés dans un recordset et parcourir le jeu d'enregistrement. Dans une fonction comportant tous ces paramètres, le case devient alors obsolète si tous les cas sont gérés.
Yannick
Patrick Even a écrit dans le message :
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case qui ressemble à ceci :
Function Toto (P1 as Long) as String Select Case P1 Case 1 to 999 Toto = "V1" Case 1000 to 1999 Toto = "V2" Case Else Toto = "V3" End Select End Function
Je fait appel à cette fonction dans une requête qui s'appuie sur une table contenant au moins 5 000 000 de records. C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer : - le nombre de cas à traiter, - les bornes (1, 999, 1000, 1999, ...) - et les valeurs (V1 à Vn) sans avoir à toucher au code VBA de la fonction. J'imagine que ces valeurs figurent dans une table et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
Cordialement, Patrick EVEN
Raymond
Bonsoir.
sur 5000000 d'enregistrements à parcourir, il ne faut pas aller chercher des valeurs dans une table à chaque enreg sinon les performances vont en souffrir. Compte tenu que le nombre de bornes et de valeurs sont élastiques il te reste la seule solution d'avoir une table avec limite et valeur et de la charger dans deux tableaux avant de lancer la requête. la fonction Toto bouclera sur le tableau 1 pour rechercher la limite et renverra la valeur du tableau 2 située à la même place que la limite. Pour boucler il faut utiliser la fonction For et LBound et UBound.
-- @+ Raymond Access MVP. http://access.seneque.free.fr/ http://users.skynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA.
"Patrick Even" a écrit dans le message de news:
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case qui ressemble à ceci :
Function Toto (P1 as Long) as String Select Case P1 Case 1 to 999 Toto = "V1" Case 1000 to 1999 Toto = "V2" Case Else Toto = "V3" End Select End Function
Je fait appel à cette fonction dans une requête qui s'appuie sur une table contenant au moins 5 000 000 de records. C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer : - le nombre de cas à traiter, - les bornes (1, 999, 1000, 1999, ...) - et les valeurs (V1 à Vn) sans avoir à toucher au code VBA de la fonction. J'imagine que ces valeurs figurent dans une table et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
Cordialement, Patrick EVEN
Bonsoir.
sur 5000000 d'enregistrements à parcourir, il ne faut pas aller chercher des
valeurs dans une table à chaque enreg sinon les performances vont en
souffrir. Compte tenu que le nombre de bornes et de valeurs sont élastiques
il te reste la seule solution d'avoir une table avec limite et valeur et de
la charger dans deux tableaux avant de lancer la requête. la fonction Toto
bouclera sur le tableau 1 pour rechercher la limite et renverra la valeur du
tableau 2 située à la même place que la limite. Pour boucler il faut
utiliser la fonction For et LBound et UBound.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.
"Patrick Even" <peven@capgemini.fr> a écrit dans le message de
news:OsoRzJ6eDHA.2484@TK2MSFTNGP09.phx.gbl...
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case
qui ressemble à ceci :
Function Toto (P1 as Long) as String
Select Case P1
Case 1 to 999
Toto = "V1"
Case 1000 to 1999
Toto = "V2"
Case Else
Toto = "V3"
End Select
End Function
Je fait appel à cette fonction dans une requête qui s'appuie
sur une table contenant au moins 5 000 000 de records.
C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer :
- le nombre de cas à traiter,
- les bornes (1, 999, 1000, 1999, ...)
- et les valeurs (V1 à Vn)
sans avoir à toucher au code VBA de la fonction.
J'imagine que ces valeurs figurent dans une table
et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
sur 5000000 d'enregistrements à parcourir, il ne faut pas aller chercher des valeurs dans une table à chaque enreg sinon les performances vont en souffrir. Compte tenu que le nombre de bornes et de valeurs sont élastiques il te reste la seule solution d'avoir une table avec limite et valeur et de la charger dans deux tableaux avant de lancer la requête. la fonction Toto bouclera sur le tableau 1 pour rechercher la limite et renverra la valeur du tableau 2 située à la même place que la limite. Pour boucler il faut utiliser la fonction For et LBound et UBound.
-- @+ Raymond Access MVP. http://access.seneque.free.fr/ http://users.skynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA.
"Patrick Even" a écrit dans le message de news:
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case qui ressemble à ceci :
Function Toto (P1 as Long) as String Select Case P1 Case 1 to 999 Toto = "V1" Case 1000 to 1999 Toto = "V2" Case Else Toto = "V3" End Select End Function
Je fait appel à cette fonction dans une requête qui s'appuie sur une table contenant au moins 5 000 000 de records. C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer : - le nombre de cas à traiter, - les bornes (1, 999, 1000, 1999, ...) - et les valeurs (V1 à Vn) sans avoir à toucher au code VBA de la fonction. J'imagine que ces valeurs figurent dans une table et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
Cordialement, Patrick EVEN
Patrick Even
Merci Raymond,
Je vais tenter de mettre en oeuvre cette solution qui me semble répondre correctement à toutes les exigences.
Cordialement, Patrick EVEN
"Raymond" a écrit dans le message news: e#
Bonsoir.
sur 5000000 d'enregistrements à parcourir, il ne faut pas aller chercher des
valeurs dans une table à chaque enreg sinon les performances vont en souffrir. Compte tenu que le nombre de bornes et de valeurs sont élastiques
il te reste la seule solution d'avoir une table avec limite et valeur et de
la charger dans deux tableaux avant de lancer la requête. la fonction Toto bouclera sur le tableau 1 pour rechercher la limite et renverra la valeur du
tableau 2 située à la même place que la limite. Pour boucler il faut utiliser la fonction For et LBound et UBound.
-- @+ Raymond Access MVP. http://access.seneque.free.fr/ http://users.skynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA.
"Patrick Even" a écrit dans le message de news:
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case qui ressemble à ceci :
Function Toto (P1 as Long) as String Select Case P1 Case 1 to 999 Toto = "V1" Case 1000 to 1999 Toto = "V2" Case Else Toto = "V3" End Select End Function
Je fait appel à cette fonction dans une requête qui s'appuie sur une table contenant au moins 5 000 000 de records. C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer : - le nombre de cas à traiter, - les bornes (1, 999, 1000, 1999, ...) - et les valeurs (V1 à Vn) sans avoir à toucher au code VBA de la fonction. J'imagine que ces valeurs figurent dans une table et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
Cordialement, Patrick EVEN
Merci Raymond,
Je vais tenter de mettre en oeuvre cette solution qui me semble
répondre correctement à toutes les exigences.
Cordialement,
Patrick EVEN
"Raymond" <Raymond.seneque@free.fr> a écrit dans le message news:
e#0z4C8eDHA.892@TK2MSFTNGP12.phx.gbl...
Bonsoir.
sur 5000000 d'enregistrements à parcourir, il ne faut pas aller chercher
des
valeurs dans une table à chaque enreg sinon les performances vont en
souffrir. Compte tenu que le nombre de bornes et de valeurs sont
élastiques
il te reste la seule solution d'avoir une table avec limite et valeur et
de
la charger dans deux tableaux avant de lancer la requête. la fonction Toto
bouclera sur le tableau 1 pour rechercher la limite et renverra la valeur
du
tableau 2 située à la même place que la limite. Pour boucler il faut
utiliser la fonction For et LBound et UBound.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.
"Patrick Even" <peven@capgemini.fr> a écrit dans le message de
news:OsoRzJ6eDHA.2484@TK2MSFTNGP09.phx.gbl...
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case
qui ressemble à ceci :
Function Toto (P1 as Long) as String
Select Case P1
Case 1 to 999
Toto = "V1"
Case 1000 to 1999
Toto = "V2"
Case Else
Toto = "V3"
End Select
End Function
Je fait appel à cette fonction dans une requête qui s'appuie
sur une table contenant au moins 5 000 000 de records.
C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer :
- le nombre de cas à traiter,
- les bornes (1, 999, 1000, 1999, ...)
- et les valeurs (V1 à Vn)
sans avoir à toucher au code VBA de la fonction.
J'imagine que ces valeurs figurent dans une table
et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?
Je vais tenter de mettre en oeuvre cette solution qui me semble répondre correctement à toutes les exigences.
Cordialement, Patrick EVEN
"Raymond" a écrit dans le message news: e#
Bonsoir.
sur 5000000 d'enregistrements à parcourir, il ne faut pas aller chercher des
valeurs dans une table à chaque enreg sinon les performances vont en souffrir. Compte tenu que le nombre de bornes et de valeurs sont élastiques
il te reste la seule solution d'avoir une table avec limite et valeur et de
la charger dans deux tableaux avant de lancer la requête. la fonction Toto bouclera sur le tableau 1 pour rechercher la limite et renverra la valeur du
tableau 2 située à la même place que la limite. Pour boucler il faut utiliser la fonction For et LBound et UBound.
-- @+ Raymond Access MVP. http://access.seneque.free.fr/ http://users.skynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA.
"Patrick Even" a écrit dans le message de news:
Bonjour,
J'ai écrit une fonction contenant une instruction Select Case qui ressemble à ceci :
Function Toto (P1 as Long) as String Select Case P1 Case 1 to 999 Toto = "V1" Case 1000 to 1999 Toto = "V2" Case Else Toto = "V3" End Select End Function
Je fait appel à cette fonction dans une requête qui s'appuie sur une table contenant au moins 5 000 000 de records. C'est dire qu j'accorde une grande attention aux performances.
Et maintenant, j'aimerais pouvoir changer : - le nombre de cas à traiter, - les bornes (1, 999, 1000, 1999, ...) - et les valeurs (V1 à Vn) sans avoir à toucher au code VBA de la fonction. J'imagine que ces valeurs figurent dans une table et qu'il existe un formulaire pour les mettre à jour.
Comment doit-on s'y prendre pour rendre cette fonction dynamique ?