Macro trop lente ;(

Seb

XLDnaute Occasionnel
Bonjours à tous,

Je viens vers vous car je viens de faire une macro qui me fait tourner une USF avec un multipage (10) et dans chaque page une listview.

Cette feuille reprend les données d'une feuille de mon classeur en me les triant. Avant l'ouverture de cette USF j'ai une autre USF qui me demande le choix du trie ( SECTEURS ou TYPE DE RETRAITS) qui seront les onglets des multipages. Je choisie ensuite de tout voir (Toutes les archives), de consulter uniquement les entrées de la journée (AUJOURD HUI) ou bien une date précise.

Cette macro est terriblement lente et je n'arrive pas à l'alléger, c'est pour ça que je viens vers vous pour savoir comment si c'est possible de la faire tourner autrement. Il n'y a que quelques archives sur cette page mais en réalité il y en a enormément (20000 lignes max)


Je joins le fichier car c'est plus compréhensible avec.

Est que vous pouvez tester la macro sur la feuille "ARCHIVAGE" qui s'appelle "Sauvegarde". Elle doit creer un fichier excel avec une seule feuille (Les archives), elle marche sur mon ordi et un second mais pas sur un portable. Je sais pas si c un bug ou si c ma macro qui a un probleme...


Merci à ceux qui pourront y jetter un oeil.

Seb
 

Pièces jointes

  • tableauAnonyme.xls
    917.5 KB · Affichages: 57

st007

XLDnaute Barbatruc
Re : Macro trop lente ;(

Bonjour,
je suis très mauvais en vba, ta macro n'a pas totalement fonctionné chez moi, probablement dû au chemin du fichier à enregistrer (sous xp )
iFichier = "C:\Documents and Settings\" & APH & "\Desktop\" & Nom_f & ".xls"

\desktop n'existe pas ... c'est \Bureau chez moi


mais
Sub SelectionCreation()
Dim SauvegardeArchivage As Worksheet
Dim iCompteurFiche As Long
Application.ScreenUpdating = False
et rétabli
Application.ScreenUpdating = True
'Transert de la feuille sur un autre classeur
fait que je n'ai même plus le temps de regarder ailleurs
 

st007

XLDnaute Barbatruc
Re : Macro trop lente ;(

de même pour la private sub userform initialize

CalculOff 'Arret des calculs automatiques
Application.ScreenUpdating = False 'Interrompt la mise à jour de l'écran -->accélère l'exécution du code
juste après les déclarations accélère un peu ...

impossible d'ailleurs de sortir proprement de l'usf (quitter n'aboutit pas)
 

Roland_M

XLDnaute Barbatruc
Re : Macro trop lente ;(

bonjour,

déjà là c'est bizarre !?
Unload Me
Load Page
Page.Show
End sub

perso je mettrais:
Me.Hide
Load Page: Page.Show
Me.Show
end sub

ainsi tu as ton retour dans l'userf de départ
et tu peux maintenant le refermer ou poursuivre ...

'ensuite bien entendu au début de la procédure:
Application.Calculation = xlCalculationManual: Application.ScreenUpdating = False
'...
'...
'et à la fin de la procédure:
Application.Calculation = xlCalculationAutomatic: Application.ScreenUpdating = True
 
Dernière édition:

st007

XLDnaute Barbatruc
Re : Macro trop lente ;(

Code:
Sub SauvegardeArchive()
Dim Extension As String
Dim iFichier As String
Dim Nom_f As String
Dim APH As String

Dim chemin As String

'Définition du nom
Extension = "Num" & Sheets("Parametres").Range("N18")
Nom_f = ActiveSheet.Name & Extension
'Permet de retrouver le login de la session XP
APH = Environ("UserName")
'Interrompt la mise à jour de l'écran -->accélère l'exécution du code
Application.ScreenUpdating = False
'Copie la feuille active dans un nouveau fichier
ActiveSheet.Copy
'Définition du path complet.


chemin = CreateObject("WScript.Shell").specialFolders("Desktop")
iFichier = chemin & "\" & Nom_f & ".xls"



'Enregistrement du fichier selon le path défini
ActiveWorkbook.SaveAs iFichier
'Fermeture du nouveau classeur sans confirmation
ActiveWorkbook.Close False
' Ré-actualisation de l'affichage.
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Discussions similaires