MsieurDams Livreur de lasagnes en moto | Bonjour à toutes et à tous,
Dans le cadre de mon travail, je réalise une refonte d'un classeur Excel servant au suivi de projets. La version d'origine était partagée entre 6 utilisateurs et ne semblait pas poser trop de problèmes particuliers.
Ma nouvelle version se compose de quatre feuilles de calcul, dont deux principales, d'environ 500 lignes et d'une vingtaine de colonnes chacunes. Une feuille fait appel via la fonction RECHERCHEV() à des données présentes dans la seconde feuille. Il y a aussi des listes de choix, et un peu de mise en forme automatique (lesquelles se font sur l'ensemble des colonnes concernées).
J'ai inséré également des filtres, avec un tri sur un critère sur les deux feuilles principales.
Enfin, j'ai ajouté une macro qui effectue un export de données selon un critère particulier : grâce aux filtres, j'isole des lignes comportant certaines valeurs (des priorités pour être exact), les copie dans une nouvelle feuille et les trie selon un ordre croissant. J'en profite pour supprimer des données qui ne me seraient pas utiles (chose que je pourrais améliorer en ne sélectionnant que les cellules m'intéressant). Voici le code ::
Code :
- Sub Export_TODO()
- ' vérifier si le délai de sauvegarde du fichier a été dépassé
- ' récupérer les données dans Sheet3
- Sheets("Sheet3" ).Select
- date_last_save = Range("C29" ).Value
- delai_before_save = Range("C31" ).Value
- jour_since_save = Range("C30" ).Value
- path_to_save = Range("C32" ).Value
- path_to_save = path_to_save + "\"
- 'MsgBox jour_since_save
- 'Si la différence de jours excède le délai prévu
- If jour_since_save >= delai_before_save Then
- 'indiquer que le délai est dépassé
- Msg = ("Cela fait " & jour_since_save & " jours que le fichier n'a pas été sauvegardé. Le faire maintenant?" )
- Style = vbYesNo + vbQuestion + vbDefaultButton2
- Titre = "Hey!"
- Confirm = MsgBox(Msg, Style, Titre)
- If Confirm = vbYes Then
- 'générer un nouveau nom de fichier et préparer le chemin de sauvegarde puis sauvegarder sous le nom spécifié
- name_file = "Archived Production file " & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & ".xls"
- ActiveWorkbook.SaveCopyAs path_to_save & name_file
- 'indiquer la complétion de la sauvegarde
- Msg = ("Le fichier a été archivé sous le nom " & path_to_save & name_file)
- Style = vbOKOnly + vbInformation + vbdefaultbuttons2
- Titre = "Fin"
- Info = MsgBox(Msg, Style, Titre)
-
- 'noter la date de la sauvegarde
- Range("C29" ).Value = Day(Date) & "/" & Month(Date) & "/" & Year(Date)
- End If
- End If
- Sheets("TO DO EXPORT" ).Select
- Rows("1:40" ).Select
- Selection.Delete Shift:=xlUp
- Sheets("Production_QC" ).Select
- ActiveWindow.FreezePanes = False
- ActiveSheet.Range("$A$4:$AA$1000" ).AutoFilter Field:=1, Criteria1:="<>"
- Range("A3" ).Select
- Selection.CurrentRegion.Select
- Selection.Copy
- Sheets("TO DO EXPORT" ).Select
- Range("A1" ).Select
- Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
- SkipBlanks:=False, Transpose:=False
- Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
- False, Transpose:=False
- Columns("K:AA" ).Select
- Application.CutCopyMode = False
- Selection.Delete Shift:=xlToLeft
- Range("J4" ).Select
- Selection.AutoFilter
- ActiveWorkbook.Worksheets("TO DO EXPORT" ).AutoFilter.Sort.SortFields.Clear
- ActiveWorkbook.Worksheets("TO DO EXPORT" ).AutoFilter.Sort.SortFields.Add Key _
- :=Range("A4:A14" ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
- :=xlSortNormal
- With ActiveWorkbook.Worksheets("TO DO EXPORT" ).AutoFilter.Sort
- .Header = xlYes
- .MatchCase = False
- .Orientation = xlTopToBottom
- .SortMethod = xlPinYin
- .Apply
- End With
- Sheets("Production_QC" ).Select
- ActiveSheet.Range("$A$4:$AA$1000" ).AutoFilter Field:=1
- Range("D5" ).Select
- ActiveWindow.FreezePanes = True
- End Sub
|
Cette macro créée une copie de sauvegarde tous les n jours dans un dossier spécifié dans une feuille de paramètres (comprenant entre autres les listes de choix pour certaines colonnes de mes deux feuilles de données.
Et là réside le problème. Le fichier est relativement stable durant environ deux jours, puis son poids se met à croître de façons exponentielle au point d'être totalement inutilisable (il atteint une 60aine de mo). J'ai bien entendu vérifié l'étendue des formatages, supprimé les lignes en trop, pendant que le fichier est en production, supprimer les "ghost users", supprimer temporairement le partage, interdire l'historique, proposer l'enregistrement tous les 15 minutes...
Je suis bien conscient que la fonction partage est un tantinet foireuse, mais ce que j'ai du mal à m'expliquer, c'est que le fichier précédent fonctionnait relativement bien et restait stable plus longtemps (le problème finissait par se poser). J'ai commencé par faire un fichier au format xslx (puis xlsm quand j'ai ajouté la macro), mais visiblement le fichier a planté le premier soir (message "verrouillé par un autre utilisateur" notamment). Je suis donc revenu à un format Excel 97-2003, pour lequel mon tableau a fonctionné plus longtemps, mais en augmentant de façons exponentielle sa taille.
Dès lors, peut être y a-t'il quelque chose qui me permettrait de limiter la casse? Dans mon code, il y a probablement quelque chose concourant à cette augmentation de poids (notamment la seconde partie de la macro, qui a été réalisée avec l'enregistreur)?
A présent, nous avons du en revenir à la bonne vieille méthode du fichier en accès exclusif ainsi que les notifications pour pouvoir modifier les documents...
Je précise que malgré mes souhaits, je ne dispose pas d'Access (et pourtant pour ce travail, ça simplifierait grandement la vie). Dès lors quelles sont les solutions qui seraient à ma disposition pour récupérer un accès partagé fonctionnant correctement?
Merci d'avance ---------------
moant@hfr. The Captain formerly Static | *Brains, GroJulius, on ne vous oublie pas*
|