Bonjour,
J'ai une liste de matériel saisis dans la base. Une fois les saisies effectuées, je ne souhaite pas que l'utilisateur puisse modifier librement les données. Mais il doit pouvoir effectuer des corrections si besoin. Pour limiter le risque de fausse manip, j'ai donc prévu :
- un sous-formulaire dans lequel on filtre les enregistrements à modifier
- au clic sur "Lire", des contrôles de formulaire remplis avec les valeurs extraites du sous-formulaire
- au clic sur "Actualiser", requête de mise à jour en vba avec les valeurs des contrôles
Ca se complique quand j'ajoute la fonction suivante :
On doit pouvoir choisir plusieurs enregistrements avec le sous-formulaire. Pour un champ donné, si les valeurs sont différentes d'un enregistrement à l'autre, j'affiche un texte par défaut (ex: "Valeurs multiples") et je verrouille le contrôle. Le contrôle n'est autorisé pour modif que lorsque la valeur est commune à tous les enregistrements. (ex: 50 matériels différents pour lesquels un champ 'Commentaire' vide à l'origine doit être rempli avec une même valeur).
Problème 1 :
J'ai normalement des champs contenant des clés étrangères (ex: type_ID), que j'affiche dans une liste déroulante en clair (ex: type_nom) en stockant la valeur numérique. Mais je ne peux pas faire ça tout en affichant ma chaîne "Valeurs multiples" car incompatibilité de type. Si je veux afficher mon texte en clair, je ne dois plus stocker la clé étrangère, mais le texte en clair, ce qui complique beaucoup de choses.
Si au lieu d'afficher une chaîne "Valeurs multiples", j'affecte la valeur Null, ça résout ce problème mais ça me complique le problème n°2 ci-dessous.
Problème 2 :
Existe-t-il un moyen de choisir l'ordre des Controls du formulaire pour pouvoir les parcourir par un index plutôt que par leur nom ? Ou peut-être leur affecter une constante numérique qu'on pourra réutiliser dans la suite du code ?
Ma méthode actuelle pour verrouiller les contrôles concernés consiste à parcourir tous les contrôles, à trier sur les types (TextBox, etc.) ainsi que détecter la valeur spéciale "Valeurs multiples". Si au lieu de cette valeur, j'affecte Null, je ne peux plus distinguer le cas où tous les enregistrements ont ce champ vide et le cas où les enregistrements ont des valeurs différentes pour ce champ.
Problème 3 en bonus:
Pour des raisons de facilité de lecture pour l'utilisateur, la requête sur laquelle est basée le sous-formulaire renvoie des champs construits "Expr1", "Expr2", etc. Cela me pose problème lorsque je veux attribuer la valeur réelle au clic sur le bouton "Actualiser" car le champ "Expr1" du sous-formulaire n'est pas actualisable puisqu'il ne correspond à aucune table. Des idées sur la meilleure manière de gérer cela ? Je voudrais généraliser au maximum le code pour éviter d'avoir trop de tambouille spécifique à telle ou telle Expression.
Je suis bien sûr preneur d'une toute autre solution.
Partager