[résolu]Problème avec ExecuteExcel4Macro....

Problème avec ExecuteExcel4Macro.... [résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 08-02-2007 à 14:51:39    

Bonjour,
 
Je dois réaliser l'application suivante : j'ai une macro excel qui doit balayer une plage de lignes et de colonnes dans d'autres fichiers Excel fermés, stocké sur un serveur (serveur local).  
 
En adaptant une solution du site excellabo.net, j'utilise la fonction ExecuteExcel4Macro comme suit :
 

Code :
  1. Private Function GetValue(Path, file, Sheet, Ref)
  2.   Dim Arg As String
  3.   'Vérie l'existence du fichier, ajoute les séparateurs manquants
  4.   If Right(Path, 1) <> "\" Then Path = Path & "\"
  5.   If Dir(Path & file) = "" Then
  6.     GetValue = "File Not Found"
  7.     Exit Function
  8.   End If
  9.   'Crée l'argument '"D:\mesdocuments\loisirs\[vacances.xls]Méribel'!R4C3"
  10.   Arg = "'" & Path & "[" & file & "]" & Sheet & "'!" & Range(Ref) _
  11.   .Range("A1" ).Address(, , xlR1C1)
  12.   'Exécute la macro XLM
  13.   GetValue = ExecuteExcel4Macro(Arg)
  14. End Function
  15. Sub GetValue_TMA_Proj(Path As String, dossier As Folder, semaine As String)
  16. Dim P As String, f As String, S As String, A As String, R As Byte
  17. Dim C As Byte, file As file
  18. Dim Count As Integer
  19. Count = 0
  20. Dim TypeI As String
  21. Dim formation, ConcComm, InterChantiers, TIAC, maladie, congesRtt, congesRttHc, prsnf As Double
  22. formation = 0
  23. ConcComm = 0
  24. InterChantiers = 0
  25. TIAC = 0
  26. congesRtt = 0
  27. maladie = 0
  28. congesRttHc = 0
  29. prsnf = 0
  30. '  P = FinalPath
  31. ' F = "Activité-MDE-2007-01.xls"
  32.   'S = "Activité Mois"
  33. ' Application.ScreenUpdating = False
  34. ' For R = 46 To 46
  35.   '  For C = 6 To 11
  36.   '    A = Cells(R, C).Address
  37.   '    Cells(R, C) = GetValue(P, F, S, A)
  38.   '    Count = Count + GetValue(P, F, S, A)
  39. '   Next C
  40. '  Next R
  41. ' MsgBox (Count)
  42.   'Application.ScreenUpdating = True '
  43.  
  44.   For Each file In dossier.Files
  45.   f = file.Name
  46.   Debug.Print f
  47.     For R = 33 To 45
  48.         For C = 7 To 10
  49.             A = Cells(R, C).Address 'adresse de la celulle à analyser
  50.             TypeI = Cells(R, 3).Address ' adresse type de code imputation'
  51.             typeImput = GetValue(Path, f, "Activité mois", TypeI)
  52.            
  53.             Select Case typeImput
  54.                 Case "Formation externe", "Formation interne", "Form. co_inv. employé"
  55.                     formation = formation + GetValue(Path, f, "Activité mois", A)
  56.                 Case "Maladie", "Maternité"
  57.                     maladie = maladie + GetValue(Path, f, "Activité mois", A)
  58.                 Case "Absences non payées", "Récupération", "Repos compensateur", "Visite médicale", "Congé non payé", "Récup Heures Excédent"
  59.                     congesRttHc = congesRttHc + GetValue(Path, f, "Activité mois", A)
  60.                 Case Else
  61.                     congesRtt = congesRtt + GetValue(Path, f, "Activité mois", A)
  62.                End Select
  63.            
  64.            
  65.            ' Cells(R, C) = GetValue(Path, file, "Activité mois", A) 'valeur numérique à partir de la colone des imput
  66.    
  67.         Next C
  68.     Next R
  69. Next
  70.     MsgBox (formation & congesRttHc & congesRtt & formation & maladie)
  71.    
  72.  
  73. End Sub


 
Alors c'est génial, ça fonctionne, mais c'est abominablement lent, si lent que ça plante quand j'agrandis le nombres de colonnes à analyser? Par contre si les fichiers Excel sont ouverts, c'est quasi instantannée. Le soucis c'est que les fichiers Excel seront fermés et qu'il y en aura une bonne vinghtaine à analyser. Je n'arrive pas à trouver d'autres solutions que ExecuteExcel4Macro... J'ai placé ma macro sur le serveur mais çà ne change rien : ça rame même quand il n'y a qu'une colone à analyser.
 
Avez-vous des solutions ?  [:whyme]


Message édité par skystef2 le 08-02-2007 à 17:11:18
Reply

Marsh Posté le 08-02-2007 à 14:51:39   

Reply

Marsh Posté le 08-02-2007 à 15:35:43    

Bonjour,
si le traitement est plus rapide en les ouvrant, pourquoi ne pas les ouvrir? et les refermer tout de suite après récupération des infos?
Cordialement

Reply

Marsh Posté le 08-02-2007 à 15:39:57    

re,  
j'avais ecrit quelque chose à cette adresse
http://forum.hardware.fr/hfr/Progr [...] m#t1508812

Reply

Marsh Posté le 08-02-2007 à 15:49:53    

C'est une solution, mais comment les ouvrir de façon réduite dans la barre des tâches ou de façon à ce que l'utilisateur ne les vois pas ?

Reply

Marsh Posté le 08-02-2007 à 16:01:05    

Application.ScreenUpdating = False  
 
..
..
..
Application.ScreenUpdating = true

Reply

Marsh Posté le 08-02-2007 à 16:30:32    

seniorpapou a écrit :

Application.ScreenUpdating = False  
 
..
..
..
Application.ScreenUpdating = true


 
 
Merci !  :jap:

Reply

Marsh Posté le 09-02-2007 à 11:55:38    

Voir post du 15-05-2006 à 21:13:49  http://forum.hardware.fr/hardwaref [...] 0232-1.htm
ou http://forum.hardware.fr/hardwaref [...] 2780-1.htm


Message édité par kiki29 le 09-02-2007 à 12:05:06
Reply

Sujets relatifs:

Leave a Replay

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