Contrôler le nombre de caractere en cours de frappe dans une cellule

bouh91 Messages postés 7 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 30 août 2018 - 12 juil. 2010 à 17:28
bouh91 Messages postés 7 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 30 août 2018 - 13 juil. 2010 à 10:44
Bonjour,
J'ai un peu de mal à trouver la réponse à mon problème. Après avoir parcouru le forum en long et en large je me décide à vous poser la question :
Je souhaiterai vérifier le nombre de caractère saisie dans une cellule sans qu'il n'y ai besoin de sortir de celle ci.
L'application en est la suivante : dans un formulaire réalisé sous Excel, le but est de passer automatiquement à la cellule suivante (TAB) lorsque le nombre de caractère attendu dans la cellule en cours est atteint.
Je ne parviens pas à faire fonctionner un évènement sur une cellule en cours de saisie. Auriez vous une idée ?
Merci d'avance

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 juil. 2010 à 17:55
Salut

VBA, Ok, mais de quel programme Office ? Excel ?
Quelle version ?

Si c'est Excel, pourquoi parles-tu de formulaire ?
Soit tu travailles sur une Feuille, soit dans un UserForm.
Puisque tu parles de cellule, ce doit être une Feuille.
Tu confirmes ?

Dans une UserForm, une TextBox a un évènement _KeyDown.
Hélas, dans une feuille, il n'y a pas d'évènement lié à la saisie. Uniquement un Worksheet_Change quand une cellule est validée.
Pour faire ça, il va falloir aller espionner le clavier par les APIs comme GetKeyState et un SetTimer pour aller les tester régulièrement.
Mais sous Excel, ce n'est pas gagné (pour des histoires de handle)

Une solution peut consister à laisser saisir librement la longueur totale + attendre la validation pour analyser le contenu de la cellule de saisie et répartir ce teste sur diverses cellules.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
12 juil. 2010 à 18:57
En effet :
Private Sub Worksheet_Change(ByVal Target As Range)

L = Target.Row
c = Target.Column

...

end sub
0
bouh91 Messages postés 7 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 30 août 2018
13 juil. 2010 à 10:44
Oui je confirme quand je disais "réalisé sous Excel" je voulais dire "sur une feuille Excel".
Et vous confirmez mes craintes : pas possible de déclencher un évènement sans sortir de la cellule :(
Tans pis quand j'aurais le temps je referais tout le formulaire via une form. Mais pour le moment ca restera comme ca.
Actuellement si l'utilisateur sort de la cellule avec une touche de déplacement, il passe déjà automatiquement au champs de saisie suivant. L'idée était d'optimiser cela en réduisant le nombre de clique/frappe clavier et que l'agent de saisie n'est pas à se préoccuper de sortir du champ entre chaque élément saisi. En plus d'empêcher la saisie au kilomètre les boutons rattachés aux macros sont également inactifs tant que l'on est dans l'édition d'un champ. Les utilisateurs risque fort de ne pas comprendre que, si le bouton "enregistrer" ne fonctionne pas, c'est qu'ils n'ont certainement pas cliqué à "l'extérieur" du dernier champ saisi.
Je pense que je vais contourner le problème du bouton en associant par évènement la macro "enregistrer" à la touche [enter].
Pour le déplacement automatique, comme je disais, j'attendrais d'avoir plus de temps pour recoder tout ca dans une form, et tant qu'a faire archiver dans Access plutôt que Excel ^^
Merci en tout cas de vos réponses rapide.
0
Rejoignez-nous