Interdire la modification d'une cellule après lecture code-barres

Bonjour,

Nous demandons à nos opérateurs de saisir le contenu de certaines cellules via un lecteur code-barres pour éviter les problèmes de saisie manuelle.

Et pour être sûr que les opérateurs ont bien été chercher le bon lot en stock, on leur demande de scanner le code-barres du lot en stock dans une cellule et le code-barres de l'ordre de fabrication. Mais certains malins lisaient deux fois le même code-barres.

Donc nous avons modifié le code-barres de l'ordre de fabrication en ajoutant un caractère # à la fin mais certains s'amusent à scanner deux fois ce code-barres et supprimer dans une des deux cellules le caractère #. ça devient compliqué...

J'ai regardé pour empêcher l'utilisation de la touche backspace ou supprimer mais ça ne marche pas quand on rentre dans la cellule.

Y a-t-il un moyen de bloquer la cellule dès lors qu'elle est remplie via code-barres?

J'ai pense à passer via une textbox mais là aussi les opérateurs peuvent supprimer un caractère une fois que le code-barres a été lu? Ou y a-t-il un moyen de bloquer la saisie textbox après lecture du code-barres?

Je ne peux pas verrouiller les cellules en question car il faut bien que je lise le code-barres.

D'autres idées?

Merci beaucoup

Bonjour,

Sous réserve d'avoir bien compris :

  • Une cellule contient la référence correspondant au lot en stock. Cette référence ne contient pas le caractère # à la fin de la référence.
  • L'autre cellule contient la référence correspondant à l'ordre de fabrication. Cette référence est suffixée par le caractère #.

Une possibilité serait d'utiliser l'événement Worksheet_Change pour s'assurer que le format est conforme (pas de # à la fin pour le lot en stock, un # à la fin pour l'ordre de fabrication) et rejeter la saisie si le format n'est pas conforme.

Au moins une limite, cela n'interdirait pas de saisir manuellement n'importe quoi à partir du moment où cela respecterait le format attendu.

Une autre piste plus "robuste" si je ne dis pas de bêtise : il me semble que les logiciels d'interface des douchettes permettent d'envoyer des codes supplémentaires avec la référence (type [Enter] pour valider l'entrée) et c'est peut-être comme cela que vous envoyez le # à la fin de la référence de l'ordre de fabrication. L'idée serait dans ce cas d'envoyer quelques caractères spécifiques (exemple "#LOT" après la référence du lot et "#ORDRE" pour l'ordre de fabrication), de tester pour chaque référence la conformité du suffixe ET de le supprimer au moment de l'écriture définitive. Il faudrait pouvoir protéger la feuille, en ne verrouillant pas les cellules saisissables dont les 2 références MAIS en les verrouillant après une saisie correcte. Resterait à voir comment gérer la modification suite à une erreur ... double-clic dans la cellule avec un message de demande de confirmation ?

Je vous joins un mini fichier qui vous permet de visualiser / tester le fonctionnement proposé en saisissant directement des valeurs dans les cellules encadrées (A2:C7).

Cdlt,

Cylfo

Bonjour Cylfo,

Merci beaucoup pour votre réponse rapide!

Vous avez tout à fait bien compris et merci pour le fichier joint.

Les opérateurs ne peuvent pas saisir n'importe quoi, il faut utiliser un lot connu en stock.

En fait, la piste la plus prometteuse est pour moi est celle-ci "Une possibilité serait d'utiliser l'événement Worksheet_Change pour s'assurer que le format est conforme (pas de # à la fin pour le lot en stock, un # à la fin pour l'ordre de fabrication) et rejeter la saisie si le format n'est pas conforme."

dans le fichier simplifié joint, en D2 on ne doit pas accepter de saisie avec # à la fin, en D3 on doit avoir # à la fin. Si la saisie n'est pas correcte, on supprime le contenu de la cellule concernée et l'opérateur doit reprendre la saisie. Le code vous paraît-il correct?

Par contre, quand j'ouvre le fichier, la macro ne se lance pas donc je dois avoir un problème qq part.

17pb-lot.xlsm (22.67 Ko)

Merci beaucoup

Bonjour,

Vous dites

Par contre, quand j'ouvre le fichier, la macro ne se lance pas donc je dois avoir un problème qq part.

La macro est liée à l'événement "Worksheet_Change" donc elle ne s'exécute pas à l'ouverture du fichier mais uniquement à la saisie d'une valeur dans la feuille "Saisie". La macro fonctionne mais à priori à l'inverse de ce que vous expliquez dans votre post initial car elle oblige à avoir le caractère # à la fin du "Lot stock" et l'interdit à la fine du "Lot OF".

Je vous joins 2 propositions car j'ai un doute sur le fonctionnement / l'utilisation du tableau de saisie suite à votre fichier "pb-lot.xlsm" :

  • pb-lot3.xlsm : ne contrôle la saisie que si elle intervient dans les cellules [D2] et [E2] donc cela implique que la saisie n'est contrôlée que sur une seule ligne. J'ai remanié un peu votre code et vous propose une piste d'optimisation du code. Si c'est le fonctionnement attendu, cela signifie t il qu'après ces saisies les infos sont stockées / ajoutées à un autre tableau ? (si oui, un formulaire pourrait être plus pratique)
  • pb-lot2.xlsm : contrôle les saisies dans toutes les lignes des colonnes "Lot stock" et "Lot OF" situées sous la ligne de titre avec (actuellement) la limitation que rien n'empêcherait de saisir la référence du "Lot stock" sur une ligne et la référence "Lot OF" sur une autre ligne. Si c'est le fonctionnement attendu, un tableau structuré serait plus performant / sécure et il faudrait à mon sens s'assurer que les saisies ne se font pas sur des lignes différentes. Là aussi l'utilisation d'un formulaire pourrait être plus pratique, les rubriques de saisie ne concerneraient qu'un seul enregistrement et l'ajout des données dans le tableau pourrait se faire qu'après avoir effectué tous les contrôles (exemples : présence des infos obligatoires, format des données, cohérence des données ...), vous pourrez toujours voir cela ultérieurement (ou pas).

Cdlt,

Cylfo

Bonjour Cylfo,

Merci beaucoup, c'est parfait, ça marche bien, j'ai testé en production.

On fait la vérification lot par lot et on vient effectivement écrire dans une base de données en auto.

Y a-t-il moyen d'interdire la saisie par clavier via VBA sur des cellules en particulier? ou de l'autoriser qu'avec l'utilisation d'un mot de passe par exemple?

Merci,

Pierre

Bonjour Pierre Oger,

"Y a-t-il moyen d'interdire la saisie par clavier via VBA sur des cellules en particulier" c'est probablement possible en utilisant les API Windows pour identifier que la saisie est effectuée via tel ou tel périphérique dans telle ou telle rubrique mais c'est d'un niveau de complexité +++ (en tout cas pour moi ) sauf à pouvoir récupérer et si besoin adapter un code existant que je n'ai pas trouvé. Dans tous les cas, il (ça n'engage que moi) ne me semble pas souhaitable d'atteindre ce niveau de complexité dans un classeur Excel.

Je reviens à ma première réponse et à la solution "plus robuste" car il me semble qu'elle répond assez bien à ta demande mais je n'ai peut-être pas été très clair dans mes explications. J'essaie de reformuler.

Postulat de base, il est possible (d'après ce que j'ai lu, ça l'est) d'ajouter des caractères à la référence lue avant transmission à l'application, ici Excel. L'idée générale est d'envoyer une balise accolée à la référence (au début ou à la fin) pour identifier que l'info est transmise via la douchette. Cette balise est non communiquée aux utilisateurs et est supprimée avant que la référence ne soit écrite dans la cellule et par conséquent elle n'est jamais visible par les utilisateurs. Donc un utilisateur qui voudrait saisir une référence via le clavier devrait connaitre la balise et la saisir avec la référence.

Fonctionnement simplifié :

  • Scan d'un code barre avec la douchette
    • Transmission à l'application Excel de la référence précédée (ou suivie) dune balise par exemple "#SVD" (saisie via douchette ou toute autre balise plus complexe)
  • Dans Excel, codage de l'événement "Worksheet_Change" pour :
    • Vérifier que la saisie intervient dans une des deux cellules concernées "Lot stock" ou "Lot OF"
      • Oui :
        • La balise est présente et pour la cellule "Lot OF" le caractère "#" est présent à la fin de la référence :
          • suppression de la balise dans la référence
          • blocage du déclenchement des événements (pour que la 2ème mise à jour ne redéclenche pas ce même événement, l'envoi de la référence par la douchette correspond à la 1ère mise à jour)
          • écriture de la référence
          • réactivation du déclenchement des événements
        • La balise n'est pas présente ou pour la cellule "Lot OF" le caractère "#" n'est pas présent à la fin :
          • blocage du déclenchement des événements
          • effacement de la donnée saisie
          • réactivation du déclenchement des événements
      • Non
        • Ne rien faire ou vérifier si la balise est présente et si oui effacer la donnée car la saisie de la référence n'a pas été faite dans la bonne cellule.

Voilà, j'espère que c'est plus clair.

Question : qui serait en possession du mot de passe que tu évoques pour permettre une saisie manuelle ?

Cdlt,

Cylfo

Bonjour Cylfo,

Pour l'instant, j'ai mis la version "simple" en prod qui a l'air de donner satisfaction.

Si jamais ça ne marche pas, je reprendrais le sujet.

En tout cas, merci beaucoup pour votre aide et bonne journée à vous,

Pierre

Rechercher des sujets similaires à "interdire modification lecture code barres"