problème NettoyageClasseur.xls

philppe27

XLDnaute Occasionnel
Bonjour,
J'ai récupéré sur le forum le fichier NettoyageClasseur.xls qui fonctionne très bien et permet manuellement de réduire considérablement la taille de certain de mes fichiers.
J'ai donc passé une étape supplémentaire en me disant que sur ces fichiers à risque d'embonpoint je pourrais mettre le code de NettoyageClasseur.xls dans Private Sub Workbook_BeforeClose(Cancel As Boolean). Ainsi, tant qu'à faire autant automatiser la procédure pour enregistrer des fichiers avec la plus petite taille possible et réduire ainsi les temps de traitement.
Bonne initiative (tant qu'à faire je me félicite moi-même...) qui fonctionne très bien quand je ferme le fichier (voir code ci-dessous)
Par contre, je rencontre un problème lorsque je ferme ce fichier à partir d'une macro qui se trouve sur un autre fichier. La macro Workbook_BeforeClose semble bien se déclencher mais c'est le code que j'ai recopié qui ne semble pas adapté à ce cas de figure et le traitement de nettoyage ne se fait pas correctement.
Merci de vos conseils



Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String, compt1 As Integer
Dim Avant As Double, plage As Range
Dim MemVisible

ThisWorkbook.Activate

On Error Resume Next
Calc = Application.Calculation ' ---- mémorisation de l'état de recalcul
'------------------------------------------------------------
With Application
.Calculation = xlCalculationManual
.StatusBar = "Nettoyage en cours..."
.EnableCancelKey = xlErrorHandler
.ScreenUpdating = True
End With
'-------------------- le traitement
For Each Sht In Worksheets
' Si la feuille est masquée
MemVisible = Sht.Visible
If Sht.Visible <> xlSheetVisible Then Sht.Visible = xlSheetVisible
'si la feuille est protégée
Sht.Unprotect Password:="secret" 'déprotéger la feuille
'
Avant = Sht.UsedRange.Cells.Count
Application.StatusBar = Sht.Name & "-" & Sht.UsedRange.Address
'-------------------Traitement de la zone trouvée
If Sht.UsedRange.Address <> "$A$1" Or Not IsEmpty(Sht.[A1]) Then
Set DCell = Sht.Cells.Find("*", , , , xlByRows, xlPrevious)(2)
'----------------Suppression des lignes inutilisées
If Not DCell Is Nothing Then
Sht.Range(DCell, Sht.Cells([A:A].Count, 1)).EntireRow.Delete
Set DCell = Nothing
Set DCell = Sht.Cells.Find("*", , , , xlByColumns, xlPrevious)(, 2)
'----------------Suppression des colonnes inutilisées
If Not DCell Is Nothing Then Sht.Range(DCell, Sht.[IV1]).EntireColumn.Delete
End If
Rien = Sht.UsedRange.Address
End If

Sht.Protect Password:="secret", DrawingObjects:=True, Contents:=True, Scenarios:=True 'protéger la feuille
Sht.Visible = MemVisible
Next Sht

ActiveSheet.Unprotect Password:="secret" 'déprotéger la feuille
'--------------------
Application.StatusBar = False
Application.Calculation = Calc
On Error GoTo 0

ThisWorkbook.save
End Sub
 

Pièces jointes

  • NettoyageClasseur.xls
    37.5 KB · Affichages: 106
  • NettoyageClasseur.xls
    37.5 KB · Affichages: 117
  • NettoyageClasseur.xls
    37.5 KB · Affichages: 113
G

Guest

Guest
Re : problème NettoyageClasseur.xls

Re,

Ton code est le bon sauf que ce que l'on veut nettoyer est le fichier Classeur1Nettoyage.xls

Alors c'est un hasard car le classeur2Test.xls que tu as fourni lançait bien la macro évènementielle Before_Close de Classeur1Nettoyage.xls qui s'en trouvait nettoyé.

Comme JC, pas moyen de savoir pourquoi cela fonctionnait chez nous et pas chez toi?

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 899
Membres
101 834
dernier inscrit
Jeremy06510