[Résolu] optimisation de macro

  • Initiateur de la discussion Initiateur de la discussion Gilles52300
  • 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 !

G

Gilles52300

Guest
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

Dernière modification par un modérateur:
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

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.
 
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.
 
Re : optimisation de macro

Bonjour Martial,
il n'y a pas à être désolé. c'est déjà bien de m'aider. J'ai vu aussi que l'égalité avec les éprouvettes ne fonctionnait pas. je vais regarder de mon côté ce matin.
Merci
A+
 
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 😱

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


A+
 

Pièces jointes

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
 
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 modification par un modérateur:
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

Dernière modification par un modérateur:
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 modification par un modérateur:
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

- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
8
Affichages
304
Réponses
7
Affichages
468
Réponses
32
Affichages
1 K
Réponses
4
Affichages
586
Retour