Excel VBA interface de saisie

Bonjour,

Je remercie par avance tous les contributeurs pour leur patience et leur compréhension

1. j'aimerais connaitre le code VBA pour compter le nombre de mots dans une cellule (ou le nombre de séparateurs +1) d'une feuille, par exemple la cellule C1 de la feuille 1, pour chaque référence figurant en colonne A de la feuille 2
2. lorsque ce nombre de mots est égal à la qté spécifiée dans la feuille 2 correspondant à la référence, copier le contenu de cette cellule dans une autre feuille du même classeur Excel, par exemple la feuille 3. Idéalement, cette feuille 3 est créée automatiquement.
3. une fois le contenu copié, effacer le contenu de cette cellule dans la feuille 1 pour la rendre disponible pour de nouvelles entrées.
4. répéter ce processus pour toutes les valeurs qté contenues dans la feuille 2 du classeur ci-joint.

Merci pour votre aide.

23exemple.xlsx (10.70 Ko)

bonjour,

voici une fonction qui renvoie le nombre de mot compris dans une cellule avec le séparateur ","

Pour le reste c'est incompréhensible pour moi : Reformulez la question au besoin avec des exemples.

Function CPTWRD(plage)
CPTWRD = UBound(Split(plage, ",")) + 1
End Function

A+

Bonjour Galopin01,

Merci pour votre retour.

La feuille 1 est un écran de saisie. L'utilisateur saisit en C1 des codes articles, séparés par un espace ou une virgule.

La feuille 2 contient des données : référence client colonne A, nom client en colonne B et quantité commandée en colonne C.

La feuille 3 est créée automatiquement à partir du moment où le nombre d'articles saisis en C1 est égal à la quantité correspondant à la référence client : la référence client, le nom du client et le contenu de la cellule C1 sont copiés en ligne A de la feuille 3.

Puis le contenu de la cellule C1 est effacée, la rendant disponible pour une autre saisie.

Le processus est répété jusqu'à la dernière référence commande de la feuille 2.

J'espère que la description ci-dessus reflète bien mon besoin.

J'ai l'impression que ça va pas être possible : on le trouve ou la liste de ce qu'il faut saisir en C2 ? On peut saisir n'importe quoi pourvu qu'il y aie des virgules....

Même dans cette hypothèse ça ne collerai pas ! VBA n'est pas capable d'évaluer quoi que ce soit tant que vous êtes en mode saisie dans la cellule.

En d'autre terme il faudrait que la personne qui fait la saisie sorte de sa saisie (par entrée) pour que VBA consente à évaluer le nombre d'objets saisis.

Selon mon avis, être obliger de valider chaque entrée puis ressaisir à nouveau s'il manque des entrées serait particulièrement peut pratique et désagréable.

De plus en l'absence d'un référentiel d'objets à saisir le programme sera bien incapable d'évaluer si la saisie est correcte ou tronquée.

Bref, je ne vois vraiment pas ou vous voulez en venir.

Il faut essayer de présenter votre problématique dès le départ (C'est à dire la saisie d'un bon de commande, si c'est bien de cela qu'il s'agit) et non la mauvaise manière que vous imaginez pour vérifier que cette saisie est correcte.

Quoi qu'il en soit si vous tenez à persévérer dans cette mauvaise voie, la simple fonction que je vous ait proposée est suffisante pour évaluer si la saisie est correcte :

couplé avec un RECHERCHEV sur la cellule A1, la formule suivante vous dira si la saisie est correcte (à condition de valider la saisie en C1...)

=RECHERCHEV(A1;DONNEES!A1:C11;3;FAUX)=CPTWRD(C1)

Cependant, je dois avouer que s'agissant d'un formulaire de saisie je ne vois vraiment pas non plus ce que viennent y faire cette formule en A1.

A+

Bonjour,

Merci pour votre retour. Je sens un peu d'agacement, et j'en suis navré.

Il n'est vraiment pas utile d'en référer à une liste des entrées (codes articles) à saisir en C1 (pas C2), par ailleurs pas nécessairement disponibles au moment du remplissage du panier de la commande matérialisée par la cellule C1. Je ne crois pas qu'il soit nécessaire de disposer d'un référentiel de codes articles.

Les entrées (ou codes articles) sont saisies au clavier ou idéalement avec une scannette. La lecture optique garantit l'intégrité des chaines saisies, et la présence des séparateurs. Aucun problème de ce côté-là.

C'est d'un formulaire de saisie qu'il s'agit pour de la préparation de commandes. J'ai introduit cette demande sur d'autres forums, de façon ultra détaillée et je n'ai reçu aucun retour, je dis bien aucun.

En revanche, après avoir reformulé cette demande (= en séparant les problématiques) sur excel-pratique, j'ai obtenu vos réponses dont je vous remercie. Je vous laisse juge de l'efficacité des méthodes.

Je ne sais pas si c'est la mauvaise voie, mais je vais donc persévérer dans l'expression de mon problème de création dans un formulaire de saisie :

- pour chaque commande d'une liste, saisir des données dans une cellule d'une feuille d'un classeur Excel,

- copier le contenu de cette cellule et le contenu de cellules de référence dans une autre feuille du même classeur si une condition de quantité est satisfaite,

- effacer le contenu de cette cellule après la copie,

- répéter le processus pour chaque référence commande.

Je ne sais vraiment pas comment formuler ma demande de façon plus simple.

Merci pour votre aide.

Pas vraiment de l'agacement, seulement vous m'obligez à jouer aux devinettes...

J'avais vaguement envisagé la vraisemblance d'une douchette seulement même avec douchette le processus reste le même : Il faut quitter la saisie douchette pour que VBA puisse reprendre la main... Après c'est un peu nébuleux :

Comment se fait cette saisie douchette, il y 2 commandes distinctes une pour flasher avec un caractère de continuité (virgule) ou après avoir flashé vous envoyez une virgule ou une validation d'une manière ou d'une autre ?

Ou encore, est-ce que le simple flashage rend la main à VBA ? Est-ce que c'est VBA qui doit envoyer un séparateur tant que la chaine est incomplète ?

Là je suis dans le brouillard le plus complet...

Dans tous les forums les répondeurs n'aiment pas devoir deviner les questions qu'ils doivent poser pour savoir réellement ce qu'il faut faire : quand le sujet est trop vague et le langage imprécis il s'abstiennent souvent de travailler inutilement. D'autant que dans cette situation on se fait souvent insulter par des questionneurs qui croient devoir nous faire a leçon et nous expliquer leur meilleure façon de voir le choses...

En général on est pleinement conscient qu'on a souvent affaire à des gens qui sont parfois 2 fois plus experts que nous dans une multitudes d'autres langages mais de piètres analyste quand il s'agit d'expliquer leur propre problématique. Et tant que cette analyse est incomplète YAPA de programmation possible. Donc pour éviter de perdre son temps et de se faire engueuler (en prime) on évite de répondre...

Efin bien qu'on n'en soit pas encore là, une autre problématique n'est pas clairement exposée, la création de feuille3...

Il faudrait créer une feuille par ligne validée puis effacée ? Ou encore doit-on ajoute chaque ligne successivement sur la même feuille3...

A+

Bonjour Galopin01,

Bien reçu, merci. Mais je n'ai engueulé personne, je ne fais que demander pardon de m'excuser après vous avoir remercié !!!!

Je viens de me relire et je pense que mon problème est clairement énoncé, sans recourir à des devinettes, mais bon....je m'excuse encore....

J'ai décrit (enfin, il me semble) : la cellule C1 (par exemple), pas de souci, garantie de saisie des données au bon format avec les séparateurs (on s'en fiche d'ailleurs de savoir comment ils sont saisis, scannette ou pas). Mais les données seront entrées correctement en cellule C1. A mon avis, ce n'est pas le problème et je garantis que la saisie respectera pour le séparateur virgule, ce format : "chaine_alphanumérique"&",". Je ne connais pas VBA, mais peut-on valider les données en limitant la longueur des variables String à 20 ou 30 digit ?

Encore une fois, en C1, on obtiendra quelque chose comme ça, des chaines de caractères correspondant aux codes articles suivis d'un séparateur (espace, virgule ou autre ) :

image

Je réécris: pas de souci pour respecter le format des données saisies en cellule C1.

J'espère que cet énoncé dissipera tout brouillard dans votre esprit.

Création de la feuille 3 : je souhaite que dès que le nombre de mots (codes articles) saisis en C1/feuille 1 soit égal au nombre d'articles commandés (pour une référence client (colonne A en feuille 2 du classeur), c'est la quantité figurant en colonne C de la feuille 2). Je ne sais pas comment reformuler cette demande d'une façon qui ne sous entende quoi que ce soit d'autre, ni devinette ni autre chose, comme si mon intention était de vous compliquer la tâche.

Cette feuille 3 serait nommée automatiquement (on s'en moque du format du nom) et recevrait bien évidemment les recopies des lignes correspondant aux références commandes à traiter, ligne par ligne, après traitement.

En complément à cette réponse :

1. Je "n'engueule" personne et je suis très courtois,

2. je m'efforce d'être le plus clair possible (et je suis sur que c'est le cas), sans faire de faute d'orthographe, ce qui ne gâche rien,

3. je renouvelle pour la milliardième fois mes remerciements à tout contributeur du forum pour sa patience.

Mais cela ne veut pas dire que je laisserai passer des remarques injustifiées sur mes demandes (devinettes, engueuler).

Dont acte

désolé, il manquait un bout à ma phrase :

Création de la feuille 3 : je souhaite que dès que le nombre de mots (codes articles) saisis en C1/feuille 1 soit égal au nombre d'articles commandés (pour une référence client (colonne A en feuille 2 du classeur), c'est la quantité figurant en colonne C de la feuille 2), la feuille 3 soit créée.

A tous sauf à galopin01 à qui je demande de ne pas se fatiguer,

Merci de bien vouloir me confirmer que mes messages n'ont rien d'injurieux ou d'irrespectueux envers qui que ce soit et qu'ils sont suffisamment précis dans leur expression.

A tous sauf à galopin01, j'adresse une nouvelle fois mes remerciements pour votre patience et votre compréhension.

Rechercher des sujets similaires à "vba interface saisie"