Données des feuilles vers le formulaire

  • Initiateur de la discussion Initiateur de la discussion fb62840
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fb62840

XLDnaute Impliqué
Bonjour à toutes et tous,

Je fais appel à vous afin de m'aider à obtenir ce résultat :

J'ai un formulaire multipages qui contient de très nombreuses textbox
Chacune des pages du formulaire envoient à l'enregistrement les données présentes sur le formulaire sur une feuille spécifique.

Je souhaite pouvoir obtenir à l'ouverture du formulaire l'affichage des données des textbox qui auraient déjà été enregistrées sur les feuilles et :
- de désactiver la saisie d'une information dans une textbox déjà renseignée
SAUF SI
l'utilisateur confirme qu'il veut réellement CORRIGER la valeur déjà saisie

Je pense que ça sera un peu plus clair avec le fichier joint.

J'ai vraiment besoin de votre aide.
 

Pièces jointes

Re : Données des feuilles vers le formulaire

Bonjour fb, bonjour le forum,

J'ai ouvert ton fichier et commencer à préparer une solution. Seulement pour avancer j'ai besoin d'en savoir sur la manière dont tu rentres les données.
Je voudrais savoir si tu peux avoir dans un des onglets test plusieurs produits en même temps ou si tu effaces les anciennes données pour un nouveau produit. Autrement dit, est-ce qu'il peut y avoir plus de 5 lignes dans un onglet. Pourrais tu fournir un fichier plus détaillé car dans ton exemble seul le test 1 est rempli...
 
Re : Données des feuilles vers le formulaire

Bonjour Robert,

Voici un complément d'explication :
Les tests ne peuvent pas être enregistrés pour plusieurs produits en même temps.
Les données sont enregistrées pour 1 seul produit.


On commence par réaliser une première série de mesures pour le premier test (V1, V2, V3, V4, V5)
On en réalise ensuite (si nécessaire) jusqu'à 4 séries d'autres mesures pour les tests.

Les onglets ne peuvent pas (à ce jour) compter plus de 5 lignes et 5 colonnes.

La saisie n'est pas forcément réalisée en une seule fois.
C'est à dire qu'il se peut que pour un produit donné, on entre en 1 ou plusieurs fois les données sur les onglets.
C'est pour cette raison que je souhaite "désactiver" la saisie dans une case déjà renseignée.

Il arrive (rarement mais c'est un cas possible) qu'il faille corriger la valeur saisie dans l'une des textbox.
Comme il faut s'assurer qu'il y a bien la volonté de modifier la valeur existante il faut demander la confirmation à l'utilisateur.

Dans le fichier ci-joint par exemple :
on a enregistré pour le produit 1 :
les 5 valeurs saisies sur l'onglet Tests 1 de la première série "Ser 1"

puis ont été enregistrées pour le produit 2 :
les 5 valeurs saisies sur l'onglet Tests 1 de la première série "Ser 1" et
les 5 valeurs saisies sur l'onglet Tests 1 de la seconde série "Ser 2".

Il se pourrait parfaitement que l'on saisisse ensuite plus tard
5 valeurs saisies sur l'onglet Tests 1 de la seconde série "Ser 2" pour le produit 1

puis
5 valeurs saisies sur l'onglet Tests 2 de la première série "Ser 1" pour le produit 2

J'espère que ça sera un peu plus clair sinon, je tâcherai de l'être davantage.

Merci.
 

Pièces jointes

Re : Données des feuilles vers le formulaire

Bonjour Fb, bonjour le forum,

En pièce jointe une proposition. J'ai remplacé le multipage par une ComboBox (ComboBox2) ce qui simplifie considérablement le code et diminue le nombre de contrôles.
Pour que ça fonctionne, à chaque textbox servant à éditer le résultat d'un test (25 textboxes de 5 à 29), j'ai ajouté un propriété Tag reprenant le Ser auquel elle est attribuée et le V auquel elle est attribuée séparé par un trait d'union. Par exemple, la TextBox5 a comme propriété Tag : Ser 1-V1. Cette propriété est indipensable car c'est grace à elle que le programme peut récupérer d'éventuelles anciennes données et aussi effectuer des modifications. Code commenté.

Comment ça marche...
L'utilisateur choisit le produit dans la ComboBox1 (Référence), puis le test dans la ComboBox2 (Tests). Deux cas possibles :
• Ce produit n'a subi aucun test. Il n'a donc jamais reçu de résultat dans aucun "Ser" et la boîte de dialogue est vierge. L'utilisateur entre les données et enregistre...

• Ce produit a déjà eu une ou plusieurs série de 5 résultats de "Ser". Ils apparaissent avec un fond gris et ne sont pas accessibles par l'utilisateur...
- L'utilisateur entre de nouveaux résultats dans les autres "Ser" et l'enregistrement ne prend en compte que les nouveaux résultats...
- L'utilisateur peut modifier un ancien résultat en Double-cliquant sur la TextBox eronnée. Un message d'alerte lui demande de valider cette opération...
Attention dans ce cas, et uniquement dans ce cas, ce n'est plus le bouton Enregister qui valide la modification mais celle-ci se fait automatiquement à la saisie du nouveau résultat...

J'ai fait tourner un peu sans rencontrer de bug majeur... Mais n'ayant aucune idée de son vrai fonctionnement je te laisse le soin de le faire tourner et me dire ce qui ne va pas...

Le fichier :
 

Pièces jointes

Re : Données des feuilles vers le formulaire

Bonjour Robert,

C'est un travail remarquable, je te remercie beaucoup. Je vais tester l'ensemble et essayer de comprendre.

Il est question d'augmenter le nombre de mesures à faire pour les tests (passant de 5 à 10 probablement). Je vais tâcher d'adapter le code en conséquence.

Merci beaucoup, je reviendrai sur le post après avoir examiné les codes.
 
Re : Données des feuilles vers le formulaire

Bonjour Fb, bonjour le forum,

Comme les TextBoxes de la (du ?) Ser 1 vont de 5 à 9, Ser 2 de 10 à 14, etc... Et comme je récupére uniquement le numero (1 pour Ser 1, 2 pour Ser 2, etc...) dans la variable nser. La ligne :
Code:
For j = 5 * nser to (5 * nser) + 4
permet de boucler uniquement sur les TextBoxes correspondantes au Ser.

J'espère que c'est clair... Si tu galères pour adapter à 10 TextBoxes par Ser, j'ai déjà commencé à préparer un fichier. Je peux le finaliser et te l'envoyer.
 
Re : Données des feuilles vers le formulaire

Bonjour,

Si je comprends bien,

For j = 5 * nser to (5 * nser) + 4

j prend comme valeur le numéro de la TextBox en commençant à partir de laquelle il faut commencer à entrer les données
avec des données en ser1 ça donne :
de 5 à (5 * 1) + 4 soit, de TB5 à TB9

avec des données en ser1 et en ser2 :
de 5 à (5 * 2) + 4 soit, de TB5 à TB14

J'ai tenté une adaptation :
avec 3 séries (ser1, ser2, ser3) de 10 textbox, soit de la TB5 à la TB34

on commence toujours à partir de la TextBox5 et j'ai donc écrit :
il me faut donc remplir les TB de la TB5 à la TB34
j'ai testé avec cette rédaction :
For j = 5 * nser to (10 * nser) + 4

mais ça ne me donne pas le résultat attendu car cela donne :
de la TB5 à TB10 ok c'est correct
de la TB10 à la TB14 les données qui devraient apparaître de la TB15 à la TB19
de la TB15 à la TB19 les données qui devraient apparaître de la TB25 à la TB29
et, je perds donc les données qui devraient apparaître de la TB20 à la TB24 et celle de la TB30 à la TB34


Le fichier sera vraiment le bienvenu.
 
Re : Données des feuilles vers le formulaire

Bonjour Fb, bonjour le forum,

Non ça ne marche que pour un seul Ser. Avant cela le code vérifie (à l'aide d'un dictionnaire d), combien de Ser ont été utilisés. Ensuite le code filtre par rapport au premier Ser et ce n'est que là que les TextBoxes récupèrent les valeurs. Puis le code filtre par rapport à un éventuel second Ser et met à jours les TextBoxes. Etc... Il est donc inutile de vouloir boucler sur les TextBoxes de plusieurs Ser, ça se fait automatiquement...

En pièce jointe le fichier pour 10 TextBoxes par Ser... Le code est adapté mais reste basiquement le même. J'ai juste changé la méthode pour récupérer le numéro de Ser dans la variable nser. Avant c'était avec :
Code:
CByte(Right(tmp(i), 1)))
qui prenait le dernier caractère à droite. Et maintenant cest avec :
Code:
CByte(Split(tmp(i), " ")(1))
qui prend les caractères après l'espace.
Ce changement permettra au code de fonctionner encore si par hasard vous dépassiez le Ser 9 puisque le nser d'un éventuel Ser 10 sera 10 avec le nouveau code et non pas 1 (il y aurait eu confusion avec le Ser 1) avec l'ancien code.

Le fichier :
 

Pièces jointes

Re : Données des feuilles vers le formulaire

Merci beaucoup pour ce travail,

J'ai testé en enregistrant 10 données pour les Tests1 des séries Ser 1, Ser 2 et Ser 3 soit de V1 à V10, de V11 à V20, de V21 à V30.

En utilisant l'application je n'obtiens pas le résultat attendu.
 

Pièces jointes

Re : Données des feuilles vers le formulaire

Bonjour Fb, bonjour le forum,

Le fichier que tu as mis ne m'indique absolument rien. Essaie d'être un peu plus clair sur ce qui ne convient pas. Il faudrait que tu me montres le résultat obtenu via l'UserForm et en dessous, manuellement, le résultat que tu désirerais obtenir. Je pourrai ainsi comparer et essayer de corriger...
 
Re : Données des feuilles vers le formulaire

désolé, j'ai du faire une erreur de fichier ou d'enregistrement.

Voici le fichier correct (avec les données, c'est la seule "modification" par rapport au dernier fichier que tu m'as envoyé.

1) j'ai commencé par enregistrer pour Référence 1, Tests 1 : tous les enregistrements ont été fait depuis le formulaire - les enregistrements sont corrects).

2) j'ai tenté de revoir l'ensemble des données enregistrées pour Référence 1, Tests 1 depuis le formulaire (en cliquant sur le bouton de la première feuille) :
là je constate que les données sont correctement placés pour V1, V2, V3, V4, V5

Mais qu'elles ne le sont pas pour :
Ser 1 de V6 à V10 qui contiennent les données de Ser 2 de V1 à V5

Elles ne le sont pas également pour
Ser 2 de V5 à V10
et pour Ser 3 de V1 à V10
(les données de Ser 3 de V& 0 v5 sont en fait sur la Ser2 de V6 à V10)

L'intégralité des données de Ser 4 de V1 à V10 sont en fait placées sur Ser 3 de V1 à V10

Rien n'apparaît dans les TextBox de Ser 4, de Ser 5 et de Ser 6

(je crois que ça sera plus clair en lançant le fichier et en appelant les enregistrements enregistrés pour Référence 1 et Tests 1
 

Pièces jointes

Re : Données des feuilles vers le formulaire

Je viens de tout fermer afin de tout relancer.

Étonnant mais maintenant je n'ai plus les erreurs précédentes et tout semble fonctionner correctement.

Les résultats apparaissent bien dans les bonnes cases.

J'ai quelques compléments à réaliser tels que :
-l'affichage des totaux (somme des valeurs d'une Série), que j'aimerais avoir de façon dynamique (c'est à dire qu'à chaque fois qu'on saisit une valeur le total s'actualise
- l'affichage d'un Rang, c'est à dire, procéder à la comparaison du score toutes séries, tous tests confondues pour la même référence et afficher sur le formulaire le classement de la référence considérée :
exemple :
à partir des données des 3 références, toutes les données des séries ayant déjà été enregistrées pour tous les tests
afficher pour la référence choisie le classement de celle-ci (la place dans le classement s'obtient de cette façon, le total le plus élevé obtient le rang 1, celui juste en dessous, le rang 2, celui encore en dessous le rang 3

- l'exportation d'une fiche d'analyse : c'est à dire créer un "document" qui reprendrait l'ensemble des données (référence, tests, séries, résultats, totaux et rang, afin de pouvoir imprimer.

Je ne demande pas à ce que le travail soit intégralement fait à ma place, mais si c'est possible j'ai besoin d'aide afin de parvenir à mes fins. Pourrais tu m'y aider ?
 
Re : Données des feuilles vers le formulaire

Bonsoir Fb, bonsoir le forum,

En pièce jointe une version 3 un peu plus stable (ou un peu moins beugante...). J'ai intégré les totaux dans l'Userform. J'ai modifié les noms et les Tag des TextBoxes de valeur mais le principe reste le même. Ça semble tourner...
Pour le reste, je ferai si j'y arrive, selon ma disponibilité qui en ce moment est assez réduite.
Le fichier :
 

Pièces jointes

Re : Données des feuilles vers le formulaire

Bonsoir Robert,

C'est vraiment excellent et ça me fait avancer à grand pas.

Je suis parvenu à obtenir le total général de cette façon, il y a sans doute bien mieux à faire et les conseils seraient les bienvenus.

Code sur chaque TextBox qui contient un total :
Code:
If Tot_1.Value = "" Then m1 = 0
If Tot_2.Value = "" Then m2 = 0
If Tot_3.Value = "" Then m3 = 0
If Tot_1.Value <> "" Then m1 = CDbl(Tot_1.Value)
If Tot_2.Value <> "" Then m2 = CDbl(Tot_2.Value)
If Tot_3.Value <> "" Then m3 = CDbl(Tot_3.Value)
If Tot_4.Value <> "" Then m4 = CDbl(Tot_4.value)
If Tot_5.Value <> "" Then m5 = CDbl(Tot_5.value)
Me.TG_TextBox.Value = m1 + m2 + m3 + m4 + m5

Les variables m1, m2, m3, m4, m5 ayant été déclarées précédemment.

Je vais essayer, ça va être difficile d'obtenir le calcul du classement en temps réel lors de la saisie.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
353
Retour