Lenteur macro
Résolu
julia Namor
Messages postés
524
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- Lenteur macro
- Lenteur pc - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro maker - Télécharger - Divers Utilitaires
7 réponses
Bonjour,
En fonctionnant à partir de la feuille comme tu fais, il ne faut pas espérer pouvoir gagner beaucoup de temps. Il faudrait pouvoir fonctionner en table mémoire, ce qui diviserait fortement la durée. Cependant tu as mis des paramètres dans les commentaires et donc il faudrait complétement revoir la structure.
D'autre part, sans connaitre le contexte et les contraintes c'est difficile de reprendre ta belle œuvre mais lorsque l'on écrit autant de code, il faut bien se douter qu'il lui faut du temps pour s'exécuter...
J'avais créé un classeur qui générait une application HTML à partir des feuilles comme toi qui durait de longues minutes et en la reprenant en table mémoire, cela prend quelques secondes...
En fonctionnant à partir de la feuille comme tu fais, il ne faut pas espérer pouvoir gagner beaucoup de temps. Il faudrait pouvoir fonctionner en table mémoire, ce qui diviserait fortement la durée. Cependant tu as mis des paramètres dans les commentaires et donc il faudrait complétement revoir la structure.
D'autre part, sans connaitre le contexte et les contraintes c'est difficile de reprendre ta belle œuvre mais lorsque l'on écrit autant de code, il faut bien se douter qu'il lui faut du temps pour s'exécuter...
J'avais créé un classeur qui générait une application HTML à partir des feuilles comme toi qui durait de longues minutes et en la reprenant en table mémoire, cela prend quelques secondes...
Bonjour
Merci de ta réponse gbinforme
Je n'y connais absolument rien en table mémoire mais si c'est l'unique solution pour executer le code en quelques secondes je veux bien apprendre.
Peux tu m'envoyer des liens?
Par ailleurs je vais esayer de regrouper quelques boucles et retirer des "select" , histoire de voir si je peux grappiller quelques secondes
Cordialement
Merci de ta réponse gbinforme
Je n'y connais absolument rien en table mémoire mais si c'est l'unique solution pour executer le code en quelques secondes je veux bien apprendre.
Peux tu m'envoyer des liens?
Par ailleurs je vais esayer de regrouper quelques boucles et retirer des "select" , histoire de voir si je peux grappiller quelques secondes
Cordialement
bonjour
un exemple comparatif de vitesse macro (variable tableau=table mémoire)
http://www.cjoint.com/c/FClpSZC5NYv
un tuto là dessus
https://silkyroad.developpez.com/vba/tableaux/
un exemple comparatif de vitesse macro (variable tableau=table mémoire)
http://www.cjoint.com/c/FClpSZC5NYv
un tuto là dessus
https://silkyroad.developpez.com/vba/tableaux/
Bonjour
je me rends compte que la lenteur vient de cette macro qui gére les valeurs des commentaires.
Est ce possible de l'optimiser à fond ?
cordialement
je me rends compte que la lenteur vient de cette macro qui gére les valeurs des commentaires.
On Error Resume Next
For L_1 = 11 To 36 'boucle ligne
Set Plage_1 = .Range(localisedeb_1 & L_1 & ":" & Localisefin_1 & L_1) 'mise en memoire
For Each o_1 In Plage_1 'boucle colonnes
If Not o_1.Comment Is Nothing Then 'cellule avec commentaire
coco_RC_1 = InStr(o_1.Comment.Text, "Rc") <> 0
If coco_RC_1 = True Then
TC_RC_1 = Split(o_1.Comment.Text, ":") 'ReCUP_IDE_SSRNUTeration nombre dans TC_RC (1)
If IsNumeric(TC_RC_1(1)) Then 'test si numerique
.Range("RA" & L_1).Offset(0, 0).Value = .Range("RA" & L_1).Offset(0, 0).Value + CDbl(TC_RC_1(1)) 'addition des nombres commentaires
.Range("RA" & L_1).Offset(0, 0).NumberFormat = "0""h"".0"
End If
End If
End If
Next
For Each o_1 In Plage_1 'boucle colonnes
If Not o_1.Comment Is Nothing Then 'cellule avec commentaire
coco_Hsup_1 = InStr(o_1.Comment.Text, "Hsup") <> 0
If coco_Hsup_1 = True Then
TC_Hsup_1 = Split(o_1.Comment.Text, ":") 'ReCUP_IDE_SSRNUTeration nombre dans TC_Hsup_1(1)
If IsNumeric(TC_Hsup_1(1)) Then 'test si numerique
.Range("QZ" & L_1).Offset(0, 0).Value = .Range("QZ" & L_1).Offset(0, 0).Value + CDbl(TC_Hsup_1(1)) 'addition des nombres commentaires
.Range("QZ" & L_1).Offset(0, 0).NumberFormat = "0""h"".0"
End If
End If
End If
Next
Est ce possible de l'optimiser à fond ?
cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Pour l'optimiser à fond il faut réfléchir longuement mais simplement en remplaçant ces lignes, cela devrait être très sensible :
Pour l'optimiser à fond il faut réfléchir longuement mais simplement en remplaçant ces lignes, cela devrait être très sensible :
For Each o_1 In Plage_1.SpecialCells(xlCellTypeComments) 'boucle colonnes
Bonjour Gbinforme
Oui j'ai remplacé par "SpecialCells(xlCellTypeComments)" .Je ne connaissais pas la méthode SpecialCells().
Mais il me semble que c'est sensiblement plus rapide.
Autre astuce????
Cordialment
Oui j'ai remplacé par "SpecialCells(xlCellTypeComments)" .Je ne connaissais pas la méthode SpecialCells().
Mais il me semble que c'est sensiblement plus rapide.
Autre astuce????
Cordialment
Bonjour,
oui, une excellente astuce : ne jamais mettre On Error Resume Next pour se débarrasser des erreurs.
C'est mettre la poussière sous le tapis et ne plus voir des énormités.
Une autre qui ne te fera gagner aucun temps non plus : les .Offset(0, 0) sont inutiles et embrouillent la lecture pour rien.
Et une dernière qui t'en fera gagner un peu : sortir les .NumberFormat des boucles et l'appliquer aux colonnes ou plages concernées avant de quitter (dans la mesure où c'est le seul format utilisé)
Il y a tant de colonnes que ça à traiter ? Parce que pour seulement 25 lignes à faire ça parait étrange qu'une lenteur apparaisse. C'est quoi le temps de cette partie ?
Peut-être qu'un fichier exemple permettra d'y voir plus clair.
eric
oui, une excellente astuce : ne jamais mettre On Error Resume Next pour se débarrasser des erreurs.
C'est mettre la poussière sous le tapis et ne plus voir des énormités.
Une autre qui ne te fera gagner aucun temps non plus : les .Offset(0, 0) sont inutiles et embrouillent la lecture pour rien.
Et une dernière qui t'en fera gagner un peu : sortir les .NumberFormat des boucles et l'appliquer aux colonnes ou plages concernées avant de quitter (dans la mesure où c'est le seul format utilisé)
Il y a tant de colonnes que ça à traiter ? Parce que pour seulement 25 lignes à faire ça parait étrange qu'une lenteur apparaisse. C'est quoi le temps de cette partie ?
Peut-être qu'un fichier exemple permettra d'y voir plus clair.
eric