Créer une version light d'un gros fichier
Bonjour à tou(te)s,
Je travaille avec un fichier excel dans 2010 qui a pris des proportions énormes car il contient une très large base de données ainsi que des TCD d'analyse.
Je dois l'envoyer à des destinataires et cela pose des soucis car il pèse 11 Mo quand même.
Je souhaiterais créer une macro qui crée un nouveau fichier avec une copie valeur et format de certaines pages afin d'en faire un fichier prêt à être envoyé par mail. Je ne veux envoyer en fait qu'une copie des TCD.
C'est un fichier boulot donc je ne peux pas vous l'envoyer. Au besoin je peux essayer de créer un exemple.
Merci par avance pour vos idées / suggestions.
Bonne journée,
Alci
J'ai trouvé un code qui va bien
Private Sub CommandButton1_Click()
Dim srcBook As Workbook
Dim tgtBook As Workbook
Dim iSheet As Integer
Dim srcSheet As Worksheet
Dim tgtSheet As Worksheet
Dim rngData As Range
Dim iRow As Integer
' Créer un nouveau classeur
Set srcBook = Application.ThisWorkbook
Set tgtBook = Application.Workbooks.Add
' Sur la liste des onglets du classeur en cours
For Each srcSheet In srcBook.Worksheets
' Créer un nouvel onglet si nécessaire
iSheet = srcBook.Worksheets(srcSheet.Name).Index
If iSheet > tgtBook.Worksheets.Count Then
Set tgtSheet = tgtBook.Worksheets.Add(, tgtBook.Worksheets(iSheet - 1))
Else
Set tgtSheet = tgtBook.Worksheets(iSheet)
End If
' Déprotéger l'onglet source et copier les cellules renseignées
srcSheet.Unprotect
Set rngData = srcSheet.Range("A1", srcSheet.Cells.SpecialCells(xlLastCell))
rngData.Copy
' Recopier dans le nouvel onglet la valeur des celules, leur format et le format des colonnes
With tgtSheet.Range("A1")
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteColumnWidths
End With
' Recopier son nom
tgtSheet.Name = srcSheet.Name
tgtSheet.Visible = srcSheet.Visible
' Masquer les lignes cachées ou recopier leur hauteur
If tgtSheet.Visible Then
For iRow = 1 To rngData.Rows.Count
If rngData.Rows(iRow).Hidden Then
tgtSheet.Rows(iRow).Hidden = tgtSheet.Rows(iRow).Hidden
Else
tgtSheet.Rows(iRow).RowHeight = rngData.Rows(iRow).RowHeight
End If
Next iRow
End If
' Reprotéger la source
Application.CutCopyMode = False
srcSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=False, AllowFormattingColumns:=True, _
AllowFormattingRows:=True
Next srcSheet
End Sub