Fichier Excel partagé au poids exponentiel

Fichier Excel partagé au poids exponentiel - Logiciels - Windows & Software

Marsh Posté le 05-02-2010 à 10:27:26    

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 :
  1. Sub Export_TODO()
  2. ' vérifier si le délai de sauvegarde du fichier a été dépassé
  3. ' récupérer les données dans Sheet3
  4. Sheets("Sheet3" ).Select
  5. date_last_save = Range("C29" ).Value
  6. delai_before_save = Range("C31" ).Value
  7. jour_since_save = Range("C30" ).Value
  8. path_to_save = Range("C32" ).Value
  9. path_to_save = path_to_save + "\"
  10. 'MsgBox jour_since_save
  11. 'Si la différence de jours excède le délai prévu
  12. If jour_since_save >= delai_before_save Then
  13.     'indiquer que le délai est dépassé
  14.         Msg = ("Cela fait " & jour_since_save & " jours que le fichier n'a pas été sauvegardé. Le faire maintenant?" )
  15.         Style = vbYesNo + vbQuestion + vbDefaultButton2
  16.         Titre = "Hey!"
  17.         Confirm = MsgBox(Msg, Style, Titre)
  18.         If Confirm = vbYes Then
  19.     'générer un nouveau nom de fichier et préparer le chemin de sauvegarde puis sauvegarder sous le nom spécifié
  20.         name_file = "Archived Production file " & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & ".xls"
  21.         ActiveWorkbook.SaveCopyAs path_to_save & name_file
  22.     'indiquer la complétion de la sauvegarde
  23.         Msg = ("Le fichier a été archivé sous le nom " & path_to_save & name_file)
  24.         Style = vbOKOnly + vbInformation + vbdefaultbuttons2
  25.         Titre = "Fin"
  26.         Info = MsgBox(Msg, Style, Titre)
  27.    
  28.     'noter la date de la sauvegarde
  29.         Range("C29" ).Value = Day(Date) & "/" & Month(Date) & "/" & Year(Date)
  30. End If
  31. End If
  32.     Sheets("TO DO EXPORT" ).Select
  33.     Rows("1:40" ).Select
  34.     Selection.Delete Shift:=xlUp
  35.     Sheets("Production_QC" ).Select
  36.     ActiveWindow.FreezePanes = False
  37.     ActiveSheet.Range("$A$4:$AA$1000" ).AutoFilter Field:=1, Criteria1:="<>"
  38.     Range("A3" ).Select
  39.     Selection.CurrentRegion.Select
  40.     Selection.Copy
  41.     Sheets("TO DO EXPORT" ).Select
  42.     Range("A1" ).Select
  43.     Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
  44.         SkipBlanks:=False, Transpose:=False
  45.     Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
  46.         False, Transpose:=False
  47.     Columns("K:AA" ).Select
  48.     Application.CutCopyMode = False
  49.     Selection.Delete Shift:=xlToLeft
  50.     Range("J4" ).Select
  51.     Selection.AutoFilter
  52.     ActiveWorkbook.Worksheets("TO DO EXPORT" ).AutoFilter.Sort.SortFields.Clear
  53.     ActiveWorkbook.Worksheets("TO DO EXPORT" ).AutoFilter.Sort.SortFields.Add Key _
  54.         :=Range("A4:A14" ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
  55.         :=xlSortNormal
  56.     With ActiveWorkbook.Worksheets("TO DO EXPORT" ).AutoFilter.Sort
  57.         .Header = xlYes
  58.         .MatchCase = False
  59.         .Orientation = xlTopToBottom
  60.         .SortMethod = xlPinYin
  61.         .Apply
  62.     End With
  63.     Sheets("Production_QC" ).Select
  64.     ActiveSheet.Range("$A$4:$AA$1000" ).AutoFilter Field:=1
  65.     Range("D5" ).Select
  66.     ActiveWindow.FreezePanes = True
  67. 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*
Reply

Marsh Posté le 05-02-2010 à 10:27:26   

Reply

Sujets relatifs:

Leave a Replay

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