Excel 2002 - longueur à l'ouverture d'un fichier (résolu)

Excel 2002 - longueur à l'ouverture d'un fichier (résolu) - VB/VBA/VBS - Programmation

Marsh Posté le 07-02-2006 à 17:46:19    

Bonjour à tous,
 
J'ai un fichier excel avec macros (2 c'est pas enorme !) qui sont appellés à l'activation de 6 des 7 feuilles que contien ce classeur les 2 macros sont les suivantes :

Code :
  1. Sub MaJtab()
  2. 'Macro de mise à jour automatique de la ventilation
  3. 'Répartition des NC par imputation et par mois
  4.     Dim MesNc(7, 11)
  5.     Dim i As Integer, a As Integer
  6.     For i = 2 To Sheets(1).Cells(65536, 1).End(xlUp).Row
  7.         Select Case UCase(Sheets(1).Cells(i, 4).Value)
  8.             Case Is = UCase("à préciser" )
  9.                 a = 3
  10.             Case Is = UCase("Fabrication" )
  11.                 a = 4
  12.             Case Is = UCase("BE mécanique" )
  13.                 a = 5
  14.             Case Is = UCase("BE automatismes" )
  15.                 a = 6
  16.             Case Is = UCase("Commercial" )
  17.                 a = 7
  18.             Case Is = UCase("Client" )
  19.                 a = 8
  20.             Case Is = UCase("Fournisseur" )
  21.                 a = 9
  22.             Case Else
  23.                 a = 2
  24.         End Select
  25.         MesNc(a - 2, Sheets(1).Cells(i, 3).Value - 1) = CInt(MesNc(a - 2, Sheets(1).Cells(i, 3).Value - 1)) + 1
  26.     Next i
  27. 'Mise en place du tableau des ventillation par mois et par imputation
  28.     a = 2
  29.     For a = 3 To 9
  30.         i = 2
  31.         For i = 2 To 13
  32.             Sheets(3).Cells(a - 1, i) = CInt(MesNc(a - 2, i - 2))
  33.         Next i
  34.     Next a
  35. 'Mise en place du nombre de fiches en attente
  36.     Dim NbNcAttente As Integer
  37.     NbNcAttente = 0
  38.     i = 0
  39.     For i = 0 To 11
  40.         NbNcAttente = NbNcAttente + MesNc(0, i)
  41.     Next i
  42.     Sheets(3).Cells(11, 4).Value = NbNcAttente
  43. End Sub

et

Code :
  1. Sub MaJBeM()
  2. 'Macro de mise à jour automatique des ventilatiobns pour le BEM
  3. 'Mise à 0 de la table
  4. Sheets(4).Range("B2:B21" ).ClearContents
  5. Sheets(6).Range("B2:B21" ).ClearContents
  6. 'Comptage des NC et ventilation
  7. Dim i As Integer, WkSh As Worksheet, a As Integer
  8. For i = 2 To Sheets(1).Cells(65536, 1).End(xlUp).Row
  9.     'définition de la feuille
  10.     If UCase(Sheets(1).Cells(i, 4).Value) = UCase("BE mécanique" ) Then
  11.         Select Case Sheets(1).Cells(i, 3).Value
  12.                 Case 1 To 6
  13.                 Set WkSh = Sheets(4)
  14.                 Case 7 To 12
  15.                 Set WkSh = Sheets(6)
  16.                 Case Else
  17.                    
  18.         End Select
  19.     'définition de la ligne
  20.     If Sheets(1).Cells(i, 5) = "" Then a = 21 Else a = Sheets(1).Cells(i, 5)
  21.     'Ecriture
  22.     If Not IsEmpty(WkSh) Then WkSh.Cells(a, 2) = WkSh.Cells(a, 2).Value + 1
  23.     Else
  24.     End If
  25. Next i
  26. End Sub


J'ai en plus dans workbook_open un shets(1).activate (sachant que c'est la seule feuille qui ne déclenche pas l'appel d'une macro).
 
Mon problème est que ce fichier mets minimum 30 secondes à s'ouvrir... Je trouves ça un peu long vu le peu qu'il y a dedans (taille du fichier 100ko).
J'ai signé mes macros, mais ça n'accelère pas l'ouverture du fichier...  
Quelqu'un aurait une piste sur ce qui fait ramer son ouverture ?
 
Merci d'avance


Message édité par watashi le 09-02-2006 à 09:21:51

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 07-02-2006 à 17:46:19   

Reply

Marsh Posté le 07-02-2006 à 18:30:20    

dans chaque macro tu execute 65535 la boucle et vu que tu fais un certain nombre d'accès en lecture et écriture aux cellules, ce n'est pas anormal que ta macros soit lente.  
Essaye de désactiver la mise à jour de l'affichage au début de chaque macro et de la réactiver à la fin, ça devrait améliorer les choses. Je ne me souviens plus comment on fait mais il me semble que c'est possible, au pire tu met la propriété visible de tes feuille de calcul à false pendant l'éxecution de la macro.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 08-02-2006 à 17:56:29    

mareek a écrit :

dans chaque macro tu execute 65535 la boucle et vu que tu fais un certain nombre d'accès en lecture et écriture aux cellules, ce n'est pas anormal que ta macros soit lente.  
Essaye de désactiver la mise à jour de l'affichage au début de chaque macro et de la réactiver à la fin, ça devrait améliorer les choses. Je ne me souviens plus comment on fait mais il me semble que c'est possible, au pire tu met la propriété visible de tes feuille de calcul à false pendant l'éxecution de la macro.


 
Salut mareek,
 
D'abord merci de ta réponse.
 
Il est vrai que le changement de page est moins fluide que si je n'avais pas les macros et je vais mettre lui mettre un screenupdating à false comme tu le proposes :)
 
Je testerais donc ça demain en espérant que ça aie une influence sur l'ouverture du fichier en elle-même
;)
 
edit : par contre la boucle ne se fait que 4 fois en ce moment de la ligne 2 à 6...


Message édité par watashi le 08-02-2006 à 17:58:51

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 09-02-2006 à 09:21:15    

Salut mareek,
 
Je confirme donc application.screenupdating a bien diminué le temps de passage d'un onglet à l'autre.
Ce matin l'ouverture du fichier a mis moins de 5 sec... Je devais avoir ma ram un peu saturée mardi.
 
:)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed