skystef2 | 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 :
- Private Function GetValue(Path, file, Sheet, Ref)
- Dim Arg As String
- 'Vérie l'existence du fichier, ajoute les séparateurs manquants
- If Right(Path, 1) <> "\" Then Path = Path & "\"
- If Dir(Path & file) = "" Then
- GetValue = "File Not Found"
- Exit Function
- End If
- 'Crée l'argument '"D:\mesdocuments\loisirs\[vacances.xls]Méribel'!R4C3"
- Arg = "'" & Path & "[" & file & "]" & Sheet & "'!" & Range(Ref) _
- .Range("A1" ).Address(, , xlR1C1)
- 'Exécute la macro XLM
- GetValue = ExecuteExcel4Macro(Arg)
- End Function
- Sub GetValue_TMA_Proj(Path As String, dossier As Folder, semaine As String)
- Dim P As String, f As String, S As String, A As String, R As Byte
- Dim C As Byte, file As file
- Dim Count As Integer
- Count = 0
- Dim TypeI As String
- Dim formation, ConcComm, InterChantiers, TIAC, maladie, congesRtt, congesRttHc, prsnf As Double
- formation = 0
- ConcComm = 0
- InterChantiers = 0
- TIAC = 0
- congesRtt = 0
- maladie = 0
- congesRttHc = 0
- prsnf = 0
- ' P = FinalPath
- ' F = "Activité-MDE-2007-01.xls"
- 'S = "Activité Mois"
- ' Application.ScreenUpdating = False
- ' For R = 46 To 46
- ' For C = 6 To 11
- ' A = Cells(R, C).Address
- ' Cells(R, C) = GetValue(P, F, S, A)
- ' Count = Count + GetValue(P, F, S, A)
- ' Next C
- ' Next R
- ' MsgBox (Count)
- 'Application.ScreenUpdating = True '
-
- For Each file In dossier.Files
- f = file.Name
- Debug.Print f
- For R = 33 To 45
- For C = 7 To 10
- A = Cells(R, C).Address 'adresse de la celulle à analyser
- TypeI = Cells(R, 3).Address ' adresse type de code imputation'
- typeImput = GetValue(Path, f, "Activité mois", TypeI)
-
- Select Case typeImput
- Case "Formation externe", "Formation interne", "Form. co_inv. employé"
- formation = formation + GetValue(Path, f, "Activité mois", A)
- Case "Maladie", "Maternité"
- maladie = maladie + GetValue(Path, f, "Activité mois", A)
- Case "Absences non payées", "Récupération", "Repos compensateur", "Visite médicale", "Congé non payé", "Récup Heures Excédent"
- congesRttHc = congesRttHc + GetValue(Path, f, "Activité mois", A)
- Case Else
- congesRtt = congesRtt + GetValue(Path, f, "Activité mois", A)
- End Select
-
-
- ' Cells(R, C) = GetValue(Path, file, "Activité mois", A) 'valeur numérique à partir de la colone des imput
-
- Next C
- Next R
- Next
- MsgBox (formation & congesRttHc & congesRtt & formation & maladie)
-
-
- 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 ? Message édité par skystef2 le 08-02-2007 à 17:11:18
|