Liste déroulante limitée à 255 caractères
J’extrais des valeurs Texte d’une liste déroulante, par exemple par la méthode Column(x). Mais lorsque certains textes sont longs, Access n’affiche que 255 caractères. Comment faire ?
Exemple
Effectivement, les textes des listes déroulantes sont limités à 255 caractères, même si le champ de table est un Mémo qui contiendrait 2000 caractères.
Dans l’exemple ci-dessous, la liste déroulante extrait des informations de la table tbl Environnement
dont il était question dans l’article Nom d’utilisateur et autres informations. Pour mémoire, cette table contient 3 champs : Id
(NuméroAuto), Variable
(Texte) et Valeur
(Mémo). La liste a donc pour source la requête suivante :
1 2 3 |
SELECT Id, Variable, Valeur FROM [tbl Environnement] ORDER BY Variable; |
- La liste s’appelle
cmbEnvironnement
. - La zone de texte de gauche (« Valeur extraite de la liste ») a pour source cette formule :
=[cmbEnvironnement].[Column](2)
comme vous avez pu le voir dans ces articles.
Il se trouve que la variable d’environnement PATH
sélectionnée ici fait 432 caractères. Mais la valeur extraite de la liste par la fonction Column()
n’en renvoie que 255.
Une solution
La solution pour palier ce problème consiste à extraire les données par un autre moyen que la liste, par exemple directement de la table. Voici la source de la zone de droite :
1 |
=RechDom("[Valeur]";"tbl Environnement";"Id = " & [cmbEnvironnement]) |
Nous utilisons la fonction RechDom()
– ou DLookup() en anglais, qui effectue une recherche dans une table. La fonction est traitée en détail dans cet article. Cette fonction nous sert à chercher…
- le champ
Valeur
… - dans la table
tbl Environnement
… - sur la ligne dont la clef
Id
est égale au choix fait dans la listecmbEnvironnement
.
Et cette fois, on extrait bien tous les caractères !
Petit détail cosmétique
La zone de droite affiche la mention #Erreur
lorsque le formulaire s’ouvre et qu’aucun choix n’est encore fait dans la liste déroulante cmbEnvironnement
. La raison est que, dans ce cas, le filtre de la fonction RechDom()
devient : "Id="
(rien après le signe « = »). Ajoutez un traitement de ce vide par la fonction Nz(), et ce sera réglé :
1 |
=RechDom("[Valeur]";"tbl Environnement";"Id = " & Nz([cmbEnvironnement];0)) |
Ah, j’oubliais…
Le nombre de caractères est calculé par la fonction Len()
– ou NbCar()
en français. Donc si les 2 zones d’affichage s’appellent txtValeur1
et txtValeur2
, les 2 tailles se calculent par :
=Len(txtValeur1)
=Len(txtValeur2)
Merci…votre article vient de me sortir d’un gros pétrin…bonne continuation
Content que ça dépanne ! 🙂