Excel, enregister une seule feuille

M

Marc

Guest
Quelqu'un calé en excel pourrait-il me dire s'il est possible, en excel, d'imprimer une partie du fichier. Je m'explique :
j'ai créé un modèle excel qui comporte +ou- 10 onglets, l'utilisateur choisit un d'entre eux en fonction de ce que l'on a besoin, quand on enregistre, on enregistre tous les onglets dont certains sont inutiles (soit ne servent pas, soit contiennent des données) ce qui donne des fichiers très lourds.
Serait-il possible d'enregistrer uniquement les feuilles du classeurs qui ont été modifiées par l'utlisateur, de sorte que le fichier ne contiennent que ce qui est utile. (je sais qu'on peut supprimer les feuilles manuellement, mais c'est fastidieux...).
Merci.
 
V

vincent

Guest
bonjour

rajoute ce code dans ThisWorkbook

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Sheet
Application.DisplayAlerts = False
For Each sh In ThisWorkbook.Sheets
If sh.Name <> ActiveSheet.Name Then sh.Delete 'supprime toutes les feuilles sauf celle qui est active
Next
ThisWorkbook.SaveAs (ThisWorkbook.Path & "\" & ThisWorkbook.Application.UserName) 'enregistre le fichier ('nom de l'utilisateur'.xls) dans le même dossier que l'original
Application.DisplayAlerts = True
End Sub

Voilà

@+Vincent
 
M

michel

Guest
bonsoir Marc , bonsoir Vincent

pour completer la procedure de Vincent , ci joint un exemple dans le cas ou il y aurait plusieurs feuilles de modifiées dans le classeur

je n'ai pas testé des cas de figures à plus de 20 actions de modification dans le classeur .
dans ce cas il faudrait peut etre modifier la macro ( et gerer les doublons des noms de feuilles ) pour eviter d'avoir trop de valeurs dans Tablo et Tablo2


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim j As Byte
Dim Tablo2
On Error GoTo gestion

Tablo2 = Tablo

ReDim Preserve Tablo2(UBound(Tablo) + 1)
Tablo2(UBound(Tablo) + 1) = ActiveSheet.Name
Tablo = Tablo2

Exit Sub

gestion:
If Err = 13 Then
ReDim Tablo(0)
Tablo2 = Tablo

ReDim Preserve Tablo2(UBound(Tablo) + 1)
Tablo2(UBound(Tablo) + 1) = ActiveSheet.Name
Tablo = Tablo2
End If

End Sub


ensuite quand tu lances la procedure EnregistrerFichier , le nouveau classeur est sauvegardé dans le repertoire en cours , et en ne conservant que les feuilles ou il y a eu des modifications .

Option Explicit
Public Tablo As Variant

Sub EnregistrerFichier()
Dim j As Byte
Dim Sh As Worksheet
Dim X As Byte

On Error GoTo fin

Application.DisplayAlerts = False
For Each Sh In ThisWorkbook.Sheets
X = 0
For j = 1 To UBound(Tablo)
If Tablo(j) = Sh.Name Then
X = 1
Exit For
End If
Next j
If X = 0 Then Sh.Delete
Next Sh

ThisWorkbook.SaveAs (ThisWorkbook.Path & "\" & ThisWorkbook.Application.UserName)
Application.DisplayAlerts = True

Exit Sub
fin:
If Err = 13 Then
MsgBox " Aucune feuille n'a été modifiée . "
Exit Sub
End If

End Sub


bonne soirée
michel
lapin4.gif
 

Pièces jointes

  • enregistrer_feuilles_selectif_v03.zip
    15.9 KB · Affichages: 19

Discussions similaires

Statistiques des forums

Discussions
312 326
Messages
2 087 311
Membres
103 513
dernier inscrit
adel.01.01.80.19