Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
JF
Bonjour,
Suite à un fil d'il y a quelques semaines, FS avait pondu la procédure ci-dessous, très efficace pour faire perdre leurs ko superflus aux gros fichiers Excel... Après adaptation, je le fais de temps en temps et descend de 10Mo+ à 500Ko environ.
Sub Reconstruit(NomClasseur$) 'le projet du classeur ne doit pas être protégé Dim Wbk As Workbook, Chemin$, tmpNom$, Nom$ Dim Projet, i&, Module$
On Error Resume Next Set Wbk = Workbooks(NomClasseur) On Error GoTo 0 If Wbk Is Nothing Then MsgBox "Le classeur à reconstruire doit être ouvert..." Exit Sub End If
'dossier temporaire pour l'exportation des modules de code Chemin = Wbk.Path & "tempExport" MkDir Chemin: Chemin = Chemin & ""
'export des modules Set Projet = Wbk.VBProject With Projet For i = 1 To .VBComponents.Count Select Case .VBComponents(i).Type Case 1: .VBComponents(i).Export Chemin & .VBComponents(i).Name & ".bas" Case 2: .VBComponents(i).Export Chemin & .VBComponents(i).Name & ".cls" Case 3: .VBComponents(i).Export Chemin & .VBComponents(i).Name & ".frm" End Select Next End With
'export des feuilles dans un nouveau classeur tmpNom = Left(NomClasseur, Len(NomClasseur) - 4) & "_Refait.xls" Wbk.Sheets.Copy ActiveWorkbook.SaveAs Wbk.Path & "" & tmpNom
'réimport des modules dans le nouveau classeur Module = Dir(Chemin & "*.*") Do While (Len(Module) > 0) On Error Resume Next Workbooks(tmpNom).VBProject.VBComponents _ .Import(Chemin & Module).Name = Module On Error GoTo 0 Kill Chemin & Module Module = Dir() Loop
'enregistrement et nettoyage Workbooks(tmpNom).Close True RmDir Chemin
'remplacement de l'ancien fichier par le nouveau If MsgBox("Donner au fichier reconstruit le nom du fichier " & _ "d'origine et détruire ce dernier ?", vbYesNo) = vbYes Then Chemin = Wbk.Path & "": Nom = Wbk.Name Wbk.Close False Kill Chemin & Nom Name Chemin & tmpNom As Chemin & Nom End If
End Sub
-- Amicalement,
JF
Réponse perso: bal 100 le 6
"Nicolas" a écrit dans le message de news:
Oops, j'ai oublié de mentionner des détails: L'OS est NT4 et le soft Excel 97 SR-2
Merci! Nicolas
Bonjour,
Suite à un fil d'il y a quelques semaines, FS avait pondu la procédure
ci-dessous, très efficace pour faire perdre leurs ko superflus aux gros
fichiers Excel... Après adaptation, je le fais de temps en temps et descend
de 10Mo+ à 500Ko environ.
Sub Reconstruit(NomClasseur$)
'le projet du classeur ne doit pas être protégé
Dim Wbk As Workbook, Chemin$, tmpNom$, Nom$
Dim Projet, i&, Module$
On Error Resume Next
Set Wbk = Workbooks(NomClasseur)
On Error GoTo 0
If Wbk Is Nothing Then
MsgBox "Le classeur à reconstruire doit être ouvert..."
Exit Sub
End If
'dossier temporaire pour l'exportation des modules de code
Chemin = Wbk.Path & "tempExport"
MkDir Chemin: Chemin = Chemin & ""
'export des modules
Set Projet = Wbk.VBProject
With Projet
For i = 1 To .VBComponents.Count
Select Case .VBComponents(i).Type
Case 1:
.VBComponents(i).Export Chemin & .VBComponents(i).Name & ".bas"
Case 2:
.VBComponents(i).Export Chemin & .VBComponents(i).Name & ".cls"
Case 3:
.VBComponents(i).Export Chemin & .VBComponents(i).Name & ".frm"
End Select
Next
End With
'export des feuilles dans un nouveau classeur
tmpNom = Left(NomClasseur, Len(NomClasseur) - 4) & "_Refait.xls"
Wbk.Sheets.Copy
ActiveWorkbook.SaveAs Wbk.Path & "" & tmpNom
'réimport des modules dans le nouveau classeur
Module = Dir(Chemin & "*.*")
Do While (Len(Module) > 0)
On Error Resume Next
Workbooks(tmpNom).VBProject.VBComponents _
.Import(Chemin & Module).Name = Module
On Error GoTo 0
Kill Chemin & Module
Module = Dir()
Loop
'enregistrement et nettoyage
Workbooks(tmpNom).Close True
RmDir Chemin
'remplacement de l'ancien fichier par le nouveau
If MsgBox("Donner au fichier reconstruit le nom du fichier " & _
"d'origine et détruire ce dernier ?", vbYesNo) = vbYes Then
Chemin = Wbk.Path & "": Nom = Wbk.Name
Wbk.Close False
Kill Chemin & Nom
Name Chemin & tmpNom As Chemin & Nom
End If
End Sub
--
Amicalement,
JF
Réponse perso: bal 100 le 6
"Nicolas" <nicolasroth@infomaniak.ch> a écrit dans le message de news:
aa607b54.0307090300.6840e78e@posting.google.com...
Oops, j'ai oublié de mentionner des détails:
L'OS est NT4 et le soft Excel 97 SR-2
Suite à un fil d'il y a quelques semaines, FS avait pondu la procédure ci-dessous, très efficace pour faire perdre leurs ko superflus aux gros fichiers Excel... Après adaptation, je le fais de temps en temps et descend de 10Mo+ à 500Ko environ.
Sub Reconstruit(NomClasseur$) 'le projet du classeur ne doit pas être protégé Dim Wbk As Workbook, Chemin$, tmpNom$, Nom$ Dim Projet, i&, Module$
On Error Resume Next Set Wbk = Workbooks(NomClasseur) On Error GoTo 0 If Wbk Is Nothing Then MsgBox "Le classeur à reconstruire doit être ouvert..." Exit Sub End If
'dossier temporaire pour l'exportation des modules de code Chemin = Wbk.Path & "tempExport" MkDir Chemin: Chemin = Chemin & ""
'export des modules Set Projet = Wbk.VBProject With Projet For i = 1 To .VBComponents.Count Select Case .VBComponents(i).Type Case 1: .VBComponents(i).Export Chemin & .VBComponents(i).Name & ".bas" Case 2: .VBComponents(i).Export Chemin & .VBComponents(i).Name & ".cls" Case 3: .VBComponents(i).Export Chemin & .VBComponents(i).Name & ".frm" End Select Next End With
'export des feuilles dans un nouveau classeur tmpNom = Left(NomClasseur, Len(NomClasseur) - 4) & "_Refait.xls" Wbk.Sheets.Copy ActiveWorkbook.SaveAs Wbk.Path & "" & tmpNom
'réimport des modules dans le nouveau classeur Module = Dir(Chemin & "*.*") Do While (Len(Module) > 0) On Error Resume Next Workbooks(tmpNom).VBProject.VBComponents _ .Import(Chemin & Module).Name = Module On Error GoTo 0 Kill Chemin & Module Module = Dir() Loop
'enregistrement et nettoyage Workbooks(tmpNom).Close True RmDir Chemin
'remplacement de l'ancien fichier par le nouveau If MsgBox("Donner au fichier reconstruit le nom du fichier " & _ "d'origine et détruire ce dernier ?", vbYesNo) = vbYes Then Chemin = Wbk.Path & "": Nom = Wbk.Name Wbk.Close False Kill Chemin & Nom Name Chemin & tmpNom As Chemin & Nom End If
End Sub
-- Amicalement,
JF
Réponse perso: bal 100 le 6
"Nicolas" a écrit dans le message de news:
Oops, j'ai oublié de mentionner des détails: L'OS est NT4 et le soft Excel 97 SR-2