OVH Cloud OVH Cloud

Select case à géométrie variable

3 réponses
Avatar
Patrick Even
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

3 réponses

Avatar
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





Avatar
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





Avatar
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