[Résolu] optimisation de macro

Gilles52300

XLDnaute Junior
Bonjour,
j'ai crée ces macros, mais je pense qu'il est possible de les optimiser car je fais beaucoup de répétition.
Aussi j'aurais besoin de vos connaisances pour savoir si c'est possible et surtout comment faire car je n'arrive pas à trouver.
merci pour votre aide.
Les macros sont sur les modules 4 et 6.
je vous joints mon fichier en pièce jointe.
 

Pièces jointes

  • 2013 classeur béton (BETA3).xlsm
    162.6 KB · Affichages: 87
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : optimisation de macro

Re,

Voila le fichier avec des commentaires, en espérant que cela t'aidera à comprendre.

Pour l'UserForm "saisiecrasement", j'ai modifié tous tes N° de TextBox de façon à ce qu'il soit dans l'ordre et espacés de 10.

Je regarde pour les messages, je pense que la couleur sera mieux.

J'y regarderai demain surement.

A+

Martial
 

Pièces jointes

  • 2013 classeur béton (BETA3) V1.2.xlsm
    119.4 KB · Affichages: 55

Gilles52300

XLDnaute Junior
Re : optimisation de macro

Merci bien de ton aide.
je comprend aisément que tu vas regarder demain car il commence à être tard en France.
Ok pour la saisie écrasement. je comprend pourquoi le step 10 maintenant. faut dire que je n'ai pas encore tout regardé en détail.
Je te remercie encore et te souhaite une bonne nuit. ici c'est pas encore l'heure. il n'est que 16:30.
 

Gilles52300

XLDnaute Junior
Re : optimisation de macro

bonjour,
je viens tester, de comprendre (ou du moins essayer bien que tes explications soient très clair) et j'arrive après des essais à deux constatations.
1- quand j'utilise ton code tel quel. en rentrant le nombre maxi d'eprouvette, il me note les dernieres de chaque Nbre d'éprouvette en laissant une ligne d'espace entre.
j'ai essayé en remplaçant le "=" par ">" et la ce sont les premières qu'il me note sans laissé d'espace.
J'avoue que pour moi, là, j'ai du mal à tout comprendre.
jamais il ne rempli les douze lignes qu'il devrait faire.
Pour ce soir je vais faire relâche et me pencher sur la continuité de ce fichier macro, à savoir remplir la feuille de rapport avec les données du carnet.
 

Yaloo

XLDnaute Barbatruc
Re : optimisation de macro

Re,

Voici le fichier modifié, encore désolé pour cette mauvaise compréhension.

Je regarde pour l'histoire des TextBox vides.

A+
 

Pièces jointes

  • 2013 classeur béton (BETA3) V2.xlsm
    114.5 KB · Affichages: 40

Yaloo

XLDnaute Barbatruc
Re : optimisation de macro

Re,

Voici le fichier avec mise en couleur des TextBox, il restera à bloquer la validation si les TextBox ne sont pas remplis.

Pour la mise en couleur, ça se passe dans les modules de classe.

A+
 

Pièces jointes

  • 2013 classeur béton (BETA3) V2.1.xlsm
    120.9 KB · Affichages: 37

Yaloo

XLDnaute Barbatruc
Re : optimisation de macro

Re,

Ton fichier avec version mise en couleur des TextBox non saisis et blocage si TextBox non saisis.

Le module de Classe, permet d'agir sur les contrôles de même classe, par exemple tous les ComboBox ou tous les TextBox, cela évite d'avoir à répéter la même macro pour les mêmes contrôles.

Dans notre cas, il suffit de récupérer le N° du contrôle, pour agir sur celui-ci ou sur des éléments bien précis.

Par exemple :
Private Sub CB_Change()
n = Right(CB.Name, Len(CB.Name) - 8)
With UserForm3
For i = 1 To 4
.Controls("TextBox" & (8 + (n * 4) + (1 * (i - 1)))).BackColor = &H80000005
.Controls("TextBox" & (8 + (n * 4) + (1 * (i - 1)))).Tag = ""
.Controls("TextBox" & (20 + (n * 4) + (1 * (i - 1)))).BackColor = &H80000005
.Controls("TextBox" & (20 + (n * 4) + (1 * (i - 1)))).Tag = ""
Next
'Etc...
Nous récupérons le N° du ComboBox et allons agir sur les TextBox correspond à ce ComboBox.

.Controls("TextBox" & (8 + (n * 4) + (1 * (i - 1))))

le 8 + (n * 4) tu connais déjà, cela correspond au premier TextBox de la première ligne (12), + (1 * (i - 1))) permet d'ajouter 0,1,2 ou 3 en fonction du i, le Nb de TextBox

Par exemple, en première ligne, donc ComboBox1, les TextBox sont 12,13,14 et 15
Si la valeur du ComboBox est 1, alors (8 + (1 * 4) + (1 * (1 - 1))) donc 12. Puisque l'on * par 0, 1 * 0, on ajoute rien.
Si la valeur du ComboBox est 2, alors (8 + (1 * 4) + (1 * (2 - 1))) donc 13. Puisque l'on ajoute 1, 1 * 1
Si la valeur du ComboBox est 3, alors (8 + (1 * 4) + (1 * (3 - 1))) donc 14. Puisque l'on ajoute 2, 1 * 2
Si la valeur du ComboBox est 4, alors (8 + (1 * 4) + (1 * (4 - 1))) donc 13. 1 * 3. Je sais, c'est pas évident :eek:

Bon, n'hésites pas à poser des questions, si je peux j'y répondrais avec grand plaisir.


A+
 

Pièces jointes

  • 2013 classeur béton (BETA3) V2.2.xlsm
    124.7 KB · Affichages: 46

Gilles52300

XLDnaute Junior
Re : optimisation de macro

Excuse pour la réponse tardive, mais je viens d'arriver au bureau et me penche sur le problème tout de suite.
je te remercie et c'est certain que je vais te poser encore des questions.
je regarde tout ça et te tiens au courant.
merci encore.
A+
Gilles
 

Gilles52300

XLDnaute Junior
Re : optimisation de macro

Bonjour Martial,
je viens de faire quelques essais et tout fonctionne bien ou presque.
par deux fois j'ai fait une fausse manip et au lieu de rentrer un chiffre dans le nbre d'éprouvette c'est une lettre qui est rentrée.
cela me met instantanément le debogueur en route. et ensuite tout est bloqué. Je suis obliger de fermer l'application.
Sinon le coup des couleurs c'est géant.
J'ai rajouté deux "dim xx as date" car j'ai besoin du format date pour des calculs. aussi j'enregistre la valeur du textbox dedans avant de la coller aussitôt.
Oui les lignes de calcul n'était pas dans le fichier car je les ai fait entre temps.
Donc j'ai gardé ton fichier dans lequel j'incopore d'autre module tel que le rajout de ligne modifié lui aussi afin qu'il trouve la première cellule vide dans la range"A"
Je digère toutes les explications que tu as mis en premier ensuite le questions vont venir.
merci encore c'est un beau travail. Je ne suis pas prêt d'y arriver.
 
Dernière édition:

Gilles52300

XLDnaute Junior
Re : optimisation de macro

Martial,
je te joins le fichier sur lequel j'ai rajouté des lignes.
j'ai un soucis au niveau de la colonne Q. je t'explique. C'est normalement juste la mise en forme d'une date situé colonne N. la ligne précedente identique fonctionne trés bien. Par contre colonne Q cela me sort une date qui n'a rien à voir comme tu pourras le constater. J'ai essayé différent truc mais sans succés. Je ne vois pas d'ou pourrait provenir l'erreur.
 

Pièces jointes

  • 2013 classeur béton (BETA3) V2.2 (2) (version 1).xlsm
    109.7 KB · Affichages: 33
Dernière édition:

Gilles52300

XLDnaute Junior
Re : optimisation de macro

j'ai un soucis au niveau de la colonne Q. je t'explique. C'est normalement juste la mise en forme d'une date situé colonne N. la ligne précedente identique fonctionne trés bien. Par contre colonne Q cela me sort une date qui n'a rien à voir comme tu pourras le constater. J'ai essayé différent truc mais sans succés. Je ne vois pas d'ou pourrait provenir l'erreur.

je viens d'essayer un truc tout bête, une mise en forme de la cellule en format standart et au miracle tout redevient normal...

Je me posais une question: Je fais la recherche du numéro de la ligne pour pouvoir le donner à "ii". Mais si je connais déjà mon numéro et que je le note dans ma feuille "Ecrasement", ce ne serait pas plus rapide et surtout moins de source d'erreur au recopiage du N°?

Quand tu définis tes variables et que tu note i& ou j&, il sert à quoi le &?
 
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : optimisation de macro

Re,

Le & correspond à Long, $ = String, % = Integer il suffit de faire F1 sur le type de la variable pour avoir l'aide correspondante.

C'est plus rapide à écrire et ça prend moins de place.

Pour les dates, tu peux utiliser (si ça passe sous Mac, c'est pas sûr du tout) le Date and Time Picker, pour ça il faut activer la référence Microsoft Windows Common Controls-2 6.0. Je te mets un fichier juste pour ça. Si ça fonctionne, tu pourras le mettre dans ton fichier.

Pour la dernière ligne, l'instruction ii = Cells.... est vraiment très rapide, il n'y a pas besoin de stocker ce N°.

Je regarderai demain plus l'histoire des lettres au lieu des chiffres.

A+

Martial
 

Pièces jointes

  • DTPicker.xlsm
    15.2 KB · Affichages: 53
  • DTPicker.xlsm
    15.2 KB · Affichages: 55
  • DTPicker.xlsm
    15.2 KB · Affichages: 55

Discussions similaires

Réponses
26
Affichages
401

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87