francedemo
XLDnaute Occasionnel
bonjour à tous,
je viens vers vous pour une aide sur la rapidité d'exécution d'une macro:
j'ai dans un répertoire 1 fichier "sommaire" + x fichiers "matériels" (jusqu'à 15000 "x")
le fichier "sommaire" fait un récapitulatif (classique) "n°matériel"..."Client"..."Adresse"..., et sur chaque "n°Mat", en fait je fais un lien hypertexte qui pointe vers le fichier correspondant.
jusque là, pas de soucis
là où ça se complique, c'est que le nom des fichier matériels peut changer (ajout "_SAV" quand une opération SAV est réalisé sur le matériel), du coup les liens hypertexte ne fonctionnent plus...
pour éviter les problèmes, je demande à l'ouverture du fichier "sommaire" de vérifier la validité des liens et je m'arrête sur le premier qui ne fonctionne pas pour demander une mise à jour du fichier.
pour ça j'utilise:
donc, je construis le nom du fichier matériel cible à partir de son numéro de série (le seul élément qui apparaît dans la cellule) puis je vérifie son existence dans le répertoire, s'il existe je passe au suivant sinon j'arrête la macro et demande une mise à jour.
mon soucis c'est que j'ai mis ce code dans "Worksbook_Open", avec quelques fichiers cible, c'est instantané, avec 1000 ça devient plus long (encore acceptable) mais avec 15000, ça coince, le temps d'ouverture du fichier devient prohibitif
me question est simple (la réponse...):
est t'il possible d’accélérer cette macro ?
cordialement
je viens vers vous pour une aide sur la rapidité d'exécution d'une macro:
j'ai dans un répertoire 1 fichier "sommaire" + x fichiers "matériels" (jusqu'à 15000 "x")
le fichier "sommaire" fait un récapitulatif (classique) "n°matériel"..."Client"..."Adresse"..., et sur chaque "n°Mat", en fait je fais un lien hypertexte qui pointe vers le fichier correspondant.
jusque là, pas de soucis
là où ça se complique, c'est que le nom des fichier matériels peut changer (ajout "_SAV" quand une opération SAV est réalisé sur le matériel), du coup les liens hypertexte ne fonctionnent plus...
pour éviter les problèmes, je demande à l'ouverture du fichier "sommaire" de vérifier la validité des liens et je m'arrête sur le premier qui ne fonctionne pas pour demander une mise à jour du fichier.
pour ça j'utilise:
Code:
Private Sub Workbook_Open()
Dim Cible As String
Dim Fich As String
Dim i As Integer
Dim Num As Variant
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
End With
'===pour éviter le fichier "sommaire" (nommé "asommaire" pour être en premier)
Fich = Dir(ThisWorkbook.Path & "\" & "*.xls")
Do While Not Fich Like "Xx*"
Fich = Dir
Loop
Num = Split(Fich, "_")
With ThisWorkbook.Sheets("Sommaire")
'===pour afficher toutes les données
If .FilterMode = True Then .ShowAllData
'===Première ligne vide
.Cells(.[B65536].End(xlUp).Row + 1, 2).Activate
On Error Resume Next
For i = 2 To .[B65536].End(xlUp).Row
With Cells(i, 1)
'===construction du nom de fichier
Fich = Dir(ThisWorkbook.Path & "\" & Num(0) & "_" & Format(.Value, "0000") & "*.xls")
Cible = IIf(.Hyperlinks.Count = 1, ThisWorkbook.Path & "\" & .Hyperlinks(1).Address, Fich)
If Dir(Cible) = "" Then MsgBox "Faire une mise à jour des liens" & vbLf & "Fichier concerné = "& .Hyperlinks(1).Address:Exit For
End With
Next i
End With
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
End With
End Sub
donc, je construis le nom du fichier matériel cible à partir de son numéro de série (le seul élément qui apparaît dans la cellule) puis je vérifie son existence dans le répertoire, s'il existe je passe au suivant sinon j'arrête la macro et demande une mise à jour.
mon soucis c'est que j'ai mis ce code dans "Worksbook_Open", avec quelques fichiers cible, c'est instantané, avec 1000 ça devient plus long (encore acceptable) mais avec 15000, ça coince, le temps d'ouverture du fichier devient prohibitif
me question est simple (la réponse...):
est t'il possible d’accélérer cette macro ?
cordialement