Lenteur macro
Résolu/Fermé
julia Namor
Messages postés
524
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
13 janvier 2024
-
10 mars 2016 à 15:17
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 16 mars 2016 à 12:56
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 16 mars 2016 à 12:56
A voir également:
- Lenteur macro
- Lenteur pc - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Macro recorder - Télécharger - Confidentialité
7 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 709
10 mars 2016 à 22:42
10 mars 2016 à 22:42
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...
julia Namor
Messages postés
524
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
13 janvier 2024
33
11 mars 2016 à 09:15
11 mars 2016 à 09:15
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
11 mars 2016 à 16:47
11 mars 2016 à 16:47
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 709
14 mars 2016 à 13:24
14 mars 2016 à 13:24
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 709
16 mars 2016 à 08:57
16 mars 2016 à 08:57
Bonjour,
Aucun écho ???
Aucun écho ???
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 240
14 mars 2016 à 23:39
14 mars 2016 à 23:39
Bonjour,
et tu as mis Application.ScreenUpdating = False au début de cette proc ?
eric
et tu as mis Application.ScreenUpdating = False au début de cette proc ?
eric
julia Namor
Messages postés
524
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
13 janvier 2024
33
15 mars 2016 à 07:50
15 mars 2016 à 07:50
Bonjour Eric
Oui j'ai bien mis Application.ScreenUpdating = False au début de la procédure
merci
Oui j'ai bien mis Application.ScreenUpdating = False au début de la procédure
merci
julia Namor
Messages postés
524
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
13 janvier 2024
33
16 mars 2016 à 11:12
16 mars 2016 à 11:12
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
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 240
16 mars 2016 à 12:56
16 mars 2016 à 12:56
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