Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr!...

Marboi

XLDnaute Occasionnel
Bonjour à vous tous.
J'ai créé un tableau identique sur 7 feuilles et j'appelle par un bouton situé sur la 1ère feuille, 1 USF qui comporte 7 pages de 122 TextBox chacunes. La valeur de chaque Textbox (de chaque page de l'USF) se place dans des cellules bien définies et non contigues sur les 7 feuilles.
Il arrive parfois que je dois modifier des valeurs dans certaines feuilles de certaines TextBox et j'ai donc créé un 2ème bouton qui appelle une autre USF (identique dans sa conception : 7 pages et 122 TextBox chacunes) mais qui récupère la valeur pour chaque TextBox et me permet de modifier QUE ce qui est nécessaire et ainsi de re-valider sans perte de données.
Cette procédure bloque par ce message d'erreur "Procèdure trop grande !" Elle fonctionne si je réduis d'un tiers la dernière procédure de la 7ème page de l'USF en la mettant en commentaire par exemple.

Mes questions :
- Comment améliorer mon code pour récupérer Toutes les valeurs de chaque pages dans chaque TextBox sans que ça bloque (il y a sans doute une simplification d'écriture, car je me suis tapé plus de 880 lignes d'écritures par USF !)
- Comment améliorer le code pour la saisie de valeur dans les TextBox (en fait j'ai écris ligne par ligne ce que chaque TextBox devait faire et re-belotte, à nouveau 880 lignes d'écritures).

Je mets mon tableau sachant que j'ai été obligé de supprimer 6 feuilles et 6 pages des 2 USF ainsi que les lignes de codes qui s'y rapportent pour pouvoir le faire descende en dessous des 50 Ko.
 

Pièces jointes

  • ANALYCA2.zip
    48.4 KB · Affichages: 77

Bebere

XLDnaute Barbatruc
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

bonjour le fil
Marboi,un début
dans Feuil1 tu as la feuille reproduite,ou il faut écrire mettre une croix
j'ai fait jusque la ligne 13
tu lances userform2
choix d'une feuille combobox1
choix d'une ligne combobox2
tu entres tes données,la textbox ou il y a une opération se remplit
exemple textbox1=6,textbox2=3,textbox3=6-3
tu valides,etc....
à toi de voir pour la suite
à bientôt
 

Pièces jointes

  • ANALYCA3.zip
    34.9 KB · Affichages: 38
  • ANALYCA3.zip
    34.9 KB · Affichages: 41
  • ANALYCA3.zip
    34.9 KB · Affichages: 37

Marboi

XLDnaute Occasionnel
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Merci Bebere,
Mais je préfère la version de CHTI160 qui correspond plus à ma demande.

Par contre, la listbox appelle bien la page concernée, mais je ne sais pas comment la valider en saisie, si vous avez une idée...
Je me demande comment je peux écrire le code : si la page X est choisie pour la reprise des données afin d'une modification, est-ce que la validation concernera la page en question sans modifier les autres ?
Là je suis paumé.
 

ChTi160

XLDnaute Barbatruc
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Salut Marboi
Bonsoir le fil
Bonsoir le Forum

pour répondre à ta question ,si tu utilises Un userform avec les 118 TextBox , toute action (validation ou modification) ne concernera que la feuille sélectionnée dans le Combobox ou listbox
je vois cela demain après midi ,car la je rentre et je repars tôt
Bonne fin de Journée
 

mécano41

XLDnaute Accro
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Bonjour,

J'ai fait quelque chose qui fonctionne mais je ne sais pas si cela correspond exactement à ce que tu cherches. On peut :

- ajouter une nouvelle feuille suivant modèle
- choisir une feuille dans une liste
- entrer des valeurs dans cette feuille au moyen d'une boîte de dialogue ou modifier les valeurs existantes
- valider ou annuler ce que l'on vient de faire

Le principe est de contruire une table "CellulesUtiles" recensant les cellules du modèle contenant 999. Cette table comporte donc les références Ligne et Colonne de chaque cellule "utile" de la feuille, dans le même ordre que les Textbox de la boîte de dialogue. Ensuite, il suffit de balayer l'ensemble et de transférer les valeurs dans un sens ou dans l'autre.

Il y a probablement mieux car je ne suis pas encore très expérimenté en VBA.

Cordialement
 

Pièces jointes

  • EssaiAnalycas2.zip
    32.5 KB · Affichages: 30

Marboi

XLDnaute Occasionnel
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Bonjour Mécano41 et merci, bonjour le forum,

Ton système fonctionne bien, un peu comme a fait CHTI160.
Par contre, ce que j'avais fait au départ comportait 7 feuilles et c'est pourquoi mon USF comportait 7 pages avec un seul bouton validation. Ça fonctionne sans problème, même si, je le pense fortement, le code que j'ai rentré est lourd.
Par contre, la difficulté est de rependre les données saisies dans les feuilles, dans les textbox (en fait les textbox doivent être pré-remplies) lorsque je clique sur le bouton "Modifier la saisie" et c'est là que j'ai mon fameux message d'erreur "procédure trop grande", car mon code pour pré-saisir (si je puis dire) les textbox est beaucoup trop long puisqu'il reprend ligne par ligne, toutes les textbox (voir mon 1er fichier).

Donc ton système me plaît (celui de CHIT160 aussi, sauf que je n'arrive pas à valider les données.... pour l'instant...) mais est-il possible d'avoir un bouton rien que pour la saisie de départ à une date que l'on définie (donc les textbox vierges, même si les feuilles ne sont pas vides, car comme je l'ai expliqué plus haut, c'est une saisie mensuelle avec une impression de chaque page, et les feuilles ne sont gardées en mémoire que sur le mois en cours) et un bouton pour une modification de la saisie (textbox pré-remplies des infos misent préalablement sur les feuilles ?) car il arrive que sur le mois en cours il faille faire des modifs et là c'est mieux d'avoir tous les chiffres pré-remplis dans les testbox.
Merci.
 

mécano41

XLDnaute Accro
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Bonjour,

J'ai modifié.

Si tu cliques sur SAISIE puis que tu choisis une feuille, la boîte de dialogue est vide bien que la feuille soit remplie. A la sortie tu auras dans la feuille ce qui aura été saisi dans la boîte, le reste aura disparu.

Si tu cliques sur MODIFICATION, la boîte est remplie par les valeurs de la feuille choisie. A la sortie, tu auras dans la feuille ce que tu vois dans la boîte.

Cordialement

Edit : il faudrait peut-être signaler que si SAISIE, les données de la feuille vont être effacées.
 

Pièces jointes

  • EssaiAnalycas3.zip
    31.9 KB · Affichages: 17

Marboi

XLDnaute Occasionnel
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Alors là, Mécano41, chapeau, c'est impeccable.

Je te remercie énormément, ça fonctionne à merveille.

Tu n'utilises pas la formule ci-après pour les textbox vers la feuille

Sheets("Secteur SD").Activate
Range("B7") = TextBox1.Value
Range("C7") = TextBox2.Value
Range("F7") = TextBox3.Value
Range("G7") = TextBox4.Value
etc...


Si tu avais à faire ce type de saisie sur + de 800 textbox, tu ferais comment ?

Et pour la "reprise" des infos de la feuille vers les textbox j'avais fait cette formule :

UserForm3.TextBox1.Value = Sheets("Secteur SD").Range("B7")
UserForm3.TextBox2.Value = Sheets("Secteur SD").Range("C7")
UserForm3.TextBox3.Value = Sheets("Secteur SD").Range("F7")
UserForm3.TextBox4.Value = Sheets("Secteur SD").Range("G7")
UserForm3.TextBox5.Value = Sheets("Secteur SD").Range("J7")
etc...

Idem tu ferais comment, car tu as écris des codes nickel et bien commentés, mais malheureusement, je suis dépassé... J'ai de grosses lacunes dans les boucles par exemple. Un jour peut-être et à force de lecture de divers bouqins et surtout des diverses macros mises sur le forum, j'arriverai sans doute à ce que tu as fait et à mon tour je pourrai peut-être dépanner sur le forum.

Encore merci et si tu as ces quelques infos, ça m'aiderait encore plus
 

mécano41

XLDnaute Accro
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Bonjour,

Quelques infos complémentaires :

S'il y avait plus de TextBox, le code ne serait pas plus long, il serait le même (réserve ; Est-ce que EXCEL accepte un tel nombre de Textbox ? je ne connais pas sa limite...).

C'est le fait que tu aies choisi un tableau discontinu qui complique un peu. C'est pour cela que j'ai pensé à cette méthode. Je ne me préoccupe pas de la forme du tableau mais seulement des cellules "utiles". A cet effet, j'ai créé le "modèle" avec des 999 dans les cellules utiles. Ce modèle permet d'abord de créer facilement tes autres feuilles avec contrôle du nom (voir Sub CréationNouvelleFeuille et sub NettoyageFeuille) D'autre part, il comporte une plage nommée PlageUtile. Dans le sub CréationTableCellulesUtilesFeuille, cette plage est balayée (boucle For Each...Next) et si une cellule contient 999, on place, dans une table CellulesUtiles, les coordonnées de cette cellule (un Range comprend Ligne, Colonne...de la cellule). Dans ton cas, on met en mémoire les coordonnées de 118 cellules lues dans l'ordre "colonnes successives par ligne, puis,lignes successives". En prenant la précaution de mettre les TextBox dans le même ordre (là j'ai tout replacé car c'était le bordel!), il est ensuite facile d'aller chercher la valeur contenue dans une cellule positionnée comme l'une des 118 TextBox dans la boîte de dialogue et de la transférer dans celle-ci (C'est le travail du sub ValeurFeuilleDansTextbox). La boucle teste les contrôles en ne sélectionnant que les TextBox. Pour l'opération inverse, tu remarqueras que c'est la même procédure à une ligne près (Sub ValeursTextBoxDansFeuille).

Nota : sous réserve de garder 118 Cellules "utiles" et 118 TextBox correspondantes, tu peux modifier la forme de tes tableaux, à condition d'agrandir ou de rétrécir en gardant la plage nommée Plage utile. Tu peux ainsi ajouter des lignes avec des infos ne concernant pas notre problème.

Cordialement

Edit : si tu veux plus de détails, dis-le, je t'enverrais une version mieux commentée.
 
Dernière édition:

Marboi

XLDnaute Occasionnel
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Bah moi qui pensait avoir bien saisi mes TextBox par ordre chronologique afin de m'y retrouver, j'en reste baba. J'ai bien vu que la 1ère textbox n'était pas la TextBox1 et qu'elle n'apparaissait que vers les 3/4 de l'USF (bref, tout ce que j'avais fait était modifié), mais bon, je me suis dit qu'il y avait sans doute une raison et c'est pourquoi je veux comprendre !...

Si ça je ne prends ton temps, j'aimerai bien effectivement une version encore plus détailée.

Je te remercie encore une fois de t'être investi de cette façon.

Bonne soirée et peut-être (sans doute) à plus sur le forum
 

mécano41

XLDnaute Accro
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Bonsoir,

Dans le cas présent, il n'est pas indispensable que les TextBox commencent à 1 mais il est impératif qu'elles soient placées dans l'ordre de création car c'est l'ordre dans lequel on les scrute. De plus, j'ai mis les propriétés Tabindex dans l'ordre afin que tu puisses saisir dans l'ordre en tapant Enter à chaque TextBox pour passer à la suivante de la ligne.

Ci-joint un fichier avec des commentaires complémentaires.

J'ai modifié quelques bricoles mais je n'ai pas changé d'indice.

Cordialement
 

Pièces jointes

  • EssaiAnalycas3bis.zip
    40.8 KB · Affichages: 38

Marboi

XLDnaute Occasionnel
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Merci Mécano41

Je regarde ça demain et si tu le permets je ferai encore appel à tes lumières pour des explications complèmentaires.

Merci beaucoup de ton investissement et ça va me permettre de développer mes connaissances en VBA (surtout la compréhension) et l'écrire autrement qu'à la tronçonneuse.

Bonne soirée.
 

Marboi

XLDnaute Occasionnel
Re : Procédure trop grande ! 880 Textbox à gérer dans 2 USF, soit 1760 TextBox, Brrrr

Bonjour à vous tous, Mécano41,

Comme je le disai, c'est franchement impeccable. Rien à redire si ce n'est : parfait.

J'arrive à me retrouver dans les codes grâce à tes commentaires (même si je n'ai pas encore tout compris, mais ça viendra).

Encore merci et bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
312 298
Messages
2 086 983
Membres
103 419
dernier inscrit
mk29