OVH Cloud OVH Cloud

Diminution du usedrange

4 réponses
Avatar
Alain79
Bonjour

Via vba, je delete les colonnes qui ne contienne rien et qui sont situées
sur la gauche d'une feuille
Mon objectif étant de réduire la zone UsedRange au strict utilisé surtout
que je lance ensuite un Pivot table sur la zone...

Mais rien n'y fait le UsedRange comporte tjrs qcq colonnes vides situées sur
la droite

Je fais pourtant le même genre de manip sur les lignes et cela fonctionne
parfaitement...

Une idée?
Merci
Alain

4 réponses

Avatar
MichDenis
Ne le dit pas à personne et essaie ceci,
si tu n'es pas satisfait... on passera à quelque chose d'autre...!

Sub test()

For Each sh In Worksheets
sh.UsedRange
Next

End Sub



"Alain79" a écrit dans le message de news:
%
Bonjour

Via vba, je delete les colonnes qui ne contienne rien et qui sont situées
sur la gauche d'une feuille
Mon objectif étant de réduire la zone UsedRange au strict utilisé surtout
que je lance ensuite un Pivot table sur la zone...

Mais rien n'y fait le UsedRange comporte tjrs qcq colonnes vides situées sur
la droite

Je fais pourtant le même genre de manip sur les lignes et cela fonctionne
parfaitement...

Une idée?
Merci
Alain
Avatar
Alain79
Merci mais pas assez malin pour entrevoir l'idée... En tout cas avec Option
Explicit en entrée le code proposé placé dans le classeur en beforesave ne
passe pas la compilation... Alain

"MichDenis" wrote in message
news:
Ne le dit pas à personne et essaie ceci,
si tu n'es pas satisfait... on passera à quelque chose d'autre...!

Sub test()

For Each sh In Worksheets
sh.UsedRange
Next

End Sub



"Alain79" a écrit dans le message de news:
%
Bonjour

Via vba, je delete les colonnes qui ne contienne rien et qui sont situées
sur la gauche d'une feuille
Mon objectif étant de réduire la zone UsedRange au strict utilisé surtout
que je lance ensuite un Pivot table sur la zone...

Mais rien n'y fait le UsedRange comporte tjrs qcq colonnes vides situées
sur

la droite

Je fais pourtant le même genre de manip sur les lignes et cela fonctionne
parfaitement...

Une idée?
Merci
Alain






Avatar
MichDenis
Sub Nettoie()

Dim Sht As Worksheet, DCell As Range, Calc As Long
Dim Rien As String, Avant As Double, plage As Range
On Error Resume Next
Calc = Application.Calculation 'Mémorisation de l'État de recalcul
'--------------------------------------------------------
----
MsgBox "Pour le classeur actif : " _
& Chr(10) & ActiveWorkbook.FullName _
& Chr(10) & "dans chaque feuille de calcul" _
& Chr(10) & "recherche la zone contenant des données, " _
& Chr(10) & "réinitialise la derni re cellule utilisée" _
& Chr(10) & "et optimise la taille du fichier Excel ", _
vbInformation, "d'après LL par "
'---------------------------------------------------------
----
MsgBox "Taille initiale de ce classeur en octets"
& Chr(10) & FileLen(ActiveWorkbook.FullName),
vbInformation , ActiveWorkbook.FullName
'--------------------------------------------------------
----
With Application
.Calculation = xlCalculationManual
.StatusBar = "Nettoyage en cours..."
.EnableCancelKey = xlErrorHandler
.ScreenUpdating = True
End With
'-------------------- le traitement
For Each Sht In Worksheets
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
ActiveWorkbook.Save
'---------------------Message pour la feuille trait e
MsgBox "Nom de la feuille de calcul :" & vbCrLf & _
Chr(10) & Sht.Name & _
Chr(10) & Format(Sht.UsedRange.Cells.Count / Avant, "0.00%") & _
" de la taille initiale", _
vbInformation, ActiveWorkbook.FullName
Next Sht
'--------------------Message fin de traitement
MsgBox "Taille optimis e de ce classeur en octets " & _
Chr(10) & FileLen(ActiveWorkbook.FullName), vbInformation, _
ActiveWorkbook.FullNameActive
'--------------------
Application.StatusBar = False
Application.Calculation = Calc
End Sub






"Alain79" a écrit dans le message de news:
%
Merci mais pas assez malin pour entrevoir l'idée... En tout cas avec Option
Explicit en entrée le code proposé placé dans le classeur en beforesave ne
passe pas la compilation... Alain

"MichDenis" wrote in message
news:
Ne le dit pas à personne et essaie ceci,
si tu n'es pas satisfait... on passera à quelque chose d'autre...!

Sub test()

For Each sh In Worksheets
sh.UsedRange
Next

End Sub



"Alain79" a écrit dans le message de news:
%
Bonjour

Via vba, je delete les colonnes qui ne contienne rien et qui sont situées
sur la gauche d'une feuille
Mon objectif étant de réduire la zone UsedRange au strict utilisé surtout
que je lance ensuite un Pivot table sur la zone...

Mais rien n'y fait le UsedRange comporte tjrs qcq colonnes vides situées
sur

la droite

Je fais pourtant le même genre de manip sur les lignes et cela fonctionne
parfaitement...

Une idée?
Merci
Alain






Avatar
Alain79
Merci pour le nettoyeur

Je l'ai fait tourner sur mon classeur et c'est Ok - En fait sans être aller
dans les détails la procédure utilisée est assez proche de ce que je fais
moi même...

En fait la situation s'est éclairci d'elle même à partir du moment ou j'ai
fait une copie du classeur comme si la sauvearge n'était pas suffisante pour
enterriner la diminution de taille... Un mystère de plus...

Merci pour le support
Bon WE et Bonne Année 2007
Alain

"MichDenis" wrote in message
news:
Sub Nettoie()

Dim Sht As Worksheet, DCell As Range, Calc As Long
Dim Rien As String, Avant As Double, plage As Range
On Error Resume Next
Calc = Application.Calculation 'Mémorisation de l'État de recalcul
'--------------------------------------------------------
----
MsgBox "Pour le classeur actif : " _
& Chr(10) & ActiveWorkbook.FullName _
& Chr(10) & "dans chaque feuille de calcul" _
& Chr(10) & "recherche la zone contenant des données, " _
& Chr(10) & "réinitialise la derni re cellule utilisée" _
& Chr(10) & "et optimise la taille du fichier Excel ", _
vbInformation, "d'après LL par "
'---------------------------------------------------------
----
MsgBox "Taille initiale de ce classeur en octets"
& Chr(10) & FileLen(ActiveWorkbook.FullName),
vbInformation , ActiveWorkbook.FullName
'--------------------------------------------------------
----
With Application
.Calculation = xlCalculationManual
.StatusBar = "Nettoyage en cours..."
.EnableCancelKey = xlErrorHandler
.ScreenUpdating = True
End With
'-------------------- le traitement
For Each Sht In Worksheets
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
ActiveWorkbook.Save
'---------------------Message pour la feuille trait e
MsgBox "Nom de la feuille de calcul :" & vbCrLf & _
Chr(10) & Sht.Name & _
Chr(10) & Format(Sht.UsedRange.Cells.Count / Avant, "0.00%") & _
" de la taille initiale", _
vbInformation, ActiveWorkbook.FullName
Next Sht
'--------------------Message fin de traitement
MsgBox "Taille optimis e de ce classeur en octets " & _
Chr(10) & FileLen(ActiveWorkbook.FullName), vbInformation, _
ActiveWorkbook.FullNameActive
'--------------------
Application.StatusBar = False
Application.Calculation = Calc
End Sub






"Alain79" a écrit dans le message de news:
%
Merci mais pas assez malin pour entrevoir l'idée... En tout cas avec
Option

Explicit en entrée le code proposé placé dans le classeur en beforesave ne
passe pas la compilation... Alain

"MichDenis" wrote in message
news:
Ne le dit pas à personne et essaie ceci,
si tu n'es pas satisfait... on passera à quelque chose d'autre...!

Sub test()

For Each sh In Worksheets
sh.UsedRange
Next

End Sub



"Alain79" a écrit dans le message de news:
%
Bonjour

Via vba, je delete les colonnes qui ne contienne rien et qui sont
situées


sur la gauche d'une feuille
Mon objectif étant de réduire la zone UsedRange au strict utilisé
surtout


que je lance ensuite un Pivot table sur la zone...

Mais rien n'y fait le UsedRange comporte tjrs qcq colonnes vides situées
sur

la droite

Je fais pourtant le même genre de manip sur les lignes et cela
fonctionne


parfaitement...

Une idée?
Merci
Alain