xlsstylereduction - nettoyeur de format

  • Initiateur de la discussion Initiateur de la discussion violaine
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

violaine

XLDnaute Nouveau
Bonjour,

Je travaille sur un fichier assez complexe sur lequel je suis arrivée à saturation au niveau des formats (pop-up puis impossibilité de mettre en page de nouvelles cellules)
J'ai déjà pas mal navigué sur les forums, ai tenté des macros de nettoyage téléchargées ici même mais rien n'y fait.

Un ami m'a parlé d'un utilitaire nommé xlsstylereduction (ou quelque chose de proche). Je ne le trouve pas à télécharger à part sur des plateformes qui ne m'inspirent pas confiance et je ne sais pas exactement à quoi il sert et si cela m'aidera.

Avez vous cet utilitaire? ou des infos à son propos?

Merci d'avance.
 
Re : xlsstylereduction - nettoyeur de format

Bonsoir à tous

Essaye cette macro sur une copie de ton fichier
VB:
'Deletes All Styles (Except Normal) From Active Workbook
'-> Code de Johnske
Sub ClearStyles() 
    Dim i&, Cell As Range, RangeOfStyles As Range 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
     'Add a temporary sheet
    Sheets.Add before:=Sheets(1) 
     'List all the styles
    For i = 1 To ActiveWorkbook.Styles.Count 
        [a65536].End(xlUp).Offset(1, 0) = ActiveWorkbook. _ 
        Styles(i).Name 
    Next 
    Set RangeOfStyles = Range(Columns(1).Rows(2), _ 
    Columns(1).Rows(65536).End(xlUp)) 
    For Each Cell In RangeOfStyles 
        If Not Cell.Text Like "Normal" Then 
            On Error Resume Next 
            ActiveWorkbook.Styles(Cell.Text).Delete 
            ActiveWorkbook.Styles(Cell.NumberFormat).Delete 
        End If 
    Next Cell 
     'delete the temp sheet
    Application.DisplayAlerts = False 
    ActiveSheet.Delete 
End Sub

 
Dernière édition:
Re : xlsstylereduction - nettoyeur de format

Bonjour

Cette macro de Leo Heuser MVP excel américain délète les styles inutilisés dans le classeur
Code:
Sub DeleteUnusedCustomNumberFormats()
  'leo.heuser...@get2net.dk, May 6. 2001
  'Version 1.01
  Dim Buffer As Object
  Dim Sh As Object
  Dim SaveFormat As Variant
  Dim fFormat As Variant
  Dim nFormat() As Variant
  Dim xFormat As Long
  Dim Counter As Long
  Dim Counter1 As Long
  Dim Counter2 As Long
  Dim StartRow As Long
  Dim EndRow As Long
  Dim pPresent As Boolean
  Dim NumberOfFormats As Long
  Dim Answer
  Dim Cell As Object
  Dim DataStart As Long
  Dim DataEnd As Long
  Dim AnswerText As String
  Dim ActWorkbookName As String
  Dim BufferWorkbookName As String
   
  NumberOfFormats = 1000
  StartRow = 3 ' Do not alter this value
  EndRow =  65536

   
   
  ReDim nFormat(0 To NumberOfFormats)
   
   
  AnswerText = "Do you want to delete unused custom formats " _
  & "from the workbook?"
  AnswerText = AnswerText & Chr(10) & "To get a list of used " _
  & "and unused formats only, choose No."
  Answer = MsgBox(AnswerText, 259)
  If Answer = vbCancel Then GoTo Finito
   
   
  On Error GoTo Finito
  ActWorkbookName = ActiveWorkbook.Name
  Workbooks.Add
  BufferWorkbookName = ActiveWorkbook.Name
   
   
  Set Buffer = Workbooks(BufferWorkbookName). _
  ActiveSheet.Range("A3")
  nFormat(0) = Buffer.NumberFormatLocal
  Buffer.NumberFormat = "@"
  Buffer.Value = nFormat(0)
   
  Workbooks(ActWorkbookName).Activate
   
  Counter = 1
  Do
  SaveFormat = Buffer.Value
  DoEvents
  SendKeys "{TAB 3}"
  For Counter1 = 1 To Counter
  SendKeys "{DOWN}"
  Next Counter1
  SendKeys "+{TAB}{HOME}'{HOME}+{END}" _
  & "^C{TAB 4}{ENTER}"
  Application.Dialogs(xlDialogFormatNumber). _
  Show nFormat(0)
  ActiveSheet.Paste Destination:=Buffer
  Buffer.Value = Mid(Buffer.Value, 2)
  nFormat(Counter) = Buffer.Value
  Counter = Counter + 1
  Loop Until nFormat(Counter - 1) = SaveFormat
   
  ReDim Preserve nFormat(0 To Counter - 2)
   
  Workbooks(BufferWorkbookName).Activate
   
  Range("A1").Value = "Custom formats"
  Range("B1").Value = "Formats used in workbook"
  Range("C1").Value = "Formats not used"
  Range("A1:C1").Font.Bold = True
   
  For Counter = 0 To UBound(nFormat)
  Cells(StartRow, 1).Offset(Counter, 0). _
  NumberFormatLocal = nFormat(Counter)
  Cells(StartRow, 1).Offset(Counter, 0).Value = _
  nFormat(Counter)
  Next Counter
   
  Counter = 0
  For Each Sh In Workbooks(ActWorkbookName).Worksheets
  For Each Cell In Sh.UsedRange.Cells
  fFormat = Cell.NumberFormatLocal
  If Application.WorksheetFunction.CountIf _
  (Range(Cells(StartRow, 2), Cells _
  (EndRow, 2)), fFormat) = 0 Then
  Cells(StartRow, 2).Offset(Counter, 0). _
  NumberFormatLocal = fFormat
  Cells(StartRow, 2).Offset(Counter, 0).Value _
  = fFormat
  Counter = Counter + 1
  End If
  Next Cell
  Next Sh
   
  xFormat = Range(Cells(StartRow, 2), Cells(EndRow, 2)). _
  Find("").Row - 2
  Counter2 = 0
  For Counter = 0 To UBound(nFormat)
  pPresent = False
  For Counter1 = 1 To xFormat
  If nFormat(Counter) = Cells(StartRow, 2).Offset _
  (Counter1, 0).NumberFormatLocal Then
  pPresent = True
  End If
  Next Counter1
  If pPresent = False Then
  Cells(StartRow, 3).Offset(Counter2, 0). _
  NumberFormatLocal = nFormat(Counter)
  Cells(StartRow, 3).Offset(Counter2, 0).Value = _
  nFormat(Counter)
  Counter2 = Counter2 + 1
  End If
  Next Counter
  With ActiveSheet.Columns("A:C")
  .AutoFit
  .HorizontalAlignment = xlLeft
  End With
  If Answer = vbYes Then
  DataStart = Range(Cells(1, 3), _
  Cells(EndRow, 3)).Find("").Row + 1
  DataEnd = Cells(DataStart, 3).Resize(EndRow, 1). _
  Find("").Row - 1
  On Error Resume Next
  For Each Cell In Range(Cells(DataStart, 3), _
  Cells(DataEnd, 3)).Cells
  Workbooks(ActWorkbookName).DeleteNumberFormat _
  (Cell.NumberFormat)
  Next Cell
  End If
  Finito:
  Set Cell = Nothing
  Set Sh = Nothing
  Set Buffer = Nothing
  End Sub
 
Dernière édition:
Re : xlsstylereduction - nettoyeur de format

bonjour à tous,

voir aussi ce Sub de Laurent Longre (un peu modidié)
pour supprimer les formats cellules personnalisés !
FAIRE F5 sur ce sub placé dans un module !
je m'en sert régulièrement ! fiable et efficace !

Code:
'supprimer les formats cellules personnalisés code d'origine Laurent Longre
'fonctionne jusque Excel 2007 avec la référence "Microsoft Forms 2.0 Object Library"
'si réfce inexistante, faire parcourir... et sélectionner \WINDOWS\system32\FM20.DLL
'.. sinon vous créez un userform et vous le supprimez, la réfce sera cochée automatiquement
'------------------------------
'VOIR explication pour la ligne If Not IsEmpty(Cell) Or True Then '***) mettre False ou True selon !?
'------------------------------
'
'FAIRE SIMPLEMENT F5 sur ce sub placé dans un module
'===================================================
Private Sub SupprFormatCellPerso()
On Error GoTo Erreur: Err.Clear
Dim DatObj As New DataObject, CollectFormat As New Collection
Dim Wksht As Worksheet, Shts As Sheets, Cell As Range

'test si des feuilles sont protégées (erreur avec Application.Dialogs..)
For Each Wksht In Worksheets
 If Wksht.ProtectContents = True Then
    Msg$ = "Pour exécuter cette macro, aucune feuille ne doit être protégée." & vbLf & vbLf & _
    "La feuille " & Wksht.Name & " doit être déprotégée !"
    MsgBox Msg$, vbInformation: Exit Sub
 End If
Next

'svg feuil select en cours pour replacer à la fin
Set Shts = ActiveWindow.SelectedSheets
Application.ScreenUpdating = False

'1' Collecte des formats en cours...
'   init touches clavier pour copier les formats dans le presse papier
'   ouvre la boite de dialogue des formats
'   load formats dans le presse papier et ajoute à la collection
MsgBox "Je vais loader les formats ..."

'F% = 0: I% = 0    Application.SendKeys de Laurent Longre
'Do: F% = (F% + 1) Mod 5: If F% = 0 Then I% = I% + 1
'Application.SendKeys "{TAB}{END}{TAB 2}{HOME}" & IIf(I%, "{PGDN " & I% & "}", "") & IIf(F%, "{DOWN " & F% & "}", "") & "+{TAB}^c{ESC}"

' modif perso simplifié
'Application.SendKeys pour se placer dans la boite de dialogue des formats cellules...
'{TAB}sur Catégorie {END}sur Personnalisés {TAB 2}sur la liste des formats {HOME}en haut
'{DOWN F%}curseur bas autant de fois dans la liste
'+{TAB}MajusTab(soit Tab arrière)remonte au-dessus case Type: (pour après copier les caract)
'^c Copie dans PressPap {ESC}sortie
SvgForma$ = "": F% = 0 'départ après Standard
Do: F% = F% + 1
 Application.SendKeys "{TAB}{END}{TAB 2}{HOME}{DOWN " & F% & "}" & "+{TAB}^c{ESC}"
 Application.Dialogs(xlDialogFormatNumber).Show: DatObj.GetFromClipboard
 Forma$ = DatObj.GetText(1): If Forma$ = SvgForma$ Then Exit Do
 CollectFormat.Add Forma$, Forma$: SvgForma$ = Forma$
Loop

'2' Recherche des formats utilisés en cours (boucle sur toutes les feuil)
'ligne If Not IsEmpty(Cell) Or ???? Then *** mettre False ou True selon..
'***) Or True  pour supprimer les formats inutilisés dans les cellules  .
'***) Or False pour supprimer les formats dans les cellules vides       .
'IsEmpty(Cell)=True si non initialisé / donc Not True=False si initialisé
'test Ok: si False Ou False / si False Ou True
MsgBox "Je vais tester les formats ..."
On Error Resume Next: Err.Clear: Z$ = ""
'boucle sur toutes les feuil
For Each Wksht In Worksheets
 Wksht.Select 'boucle cells de la feuil
 For Each Cell In Wksht.UsedRange
  If Not IsEmpty(Cell) Or True Then '***) mettre False ou True selon !?
     Z$ = CollectFormat.Item(Cell.NumberFormatLocal) 'si format existe on le garde
     If Z$ <> "" Then CollectFormat.Remove Cell.NumberFormatLocal: Z$ = "" 'enlève de la liste à supprimer
  End If
 Next
Next
'3' CreNouv classeur pour coller et tester/supprimer formats personnalisés
MsgBox "Je vais supprimer les formats ..."
On Error Resume Next: Err.Clear: F% = 0
With ActiveWorkbook
 Workbooks.Add
 For I% = 0 To CollectFormat.Count
   Range("A1").NumberFormatLocal = CollectFormat(I%) 'colle le format
  .DeleteNumberFormat ActiveCell.NumberFormat 'delete format (de ActiveCell ! pas pareil que CollectFormat(I%)
   If Err Then Err.Clear Else F% = F% + 1 'si Err ce n'est pas un perso
 Next
End With
ActiveWorkbook.Close False
'fin
Shts.Select
Application.ScreenUpdating = True
MsgBox F% & " format(s) inutilisé(s) supprimé(s).", vbInformation
Set DatObj = Nothing: Set CollectFormat = Nothing: Set Wksht = Nothing: Set Shts = Nothing
On Error GoTo 0: Err.Clear
Exit Sub
Erreur: '-- traite erreur -------
Application.ScreenUpdating = True
Msg$ = "Erreur " & Err.Source & "  No " & Err.Number & vbLf & vbLf & Err.Description
MsgBox Msg$, vbCritical, "", Err.HelpFile, Err.HelpContext
On Error GoTo 0: Err.Clear
End Sub
 
Dernière édition:
Re : xlsstylereduction - nettoyeur de format

Bonjour,

merci à tous pour ces indications, malheureusement cela ne suffit pas.
J'avais déjà utilisé la macro indiquée par Roland_M, mais cela ne m'a donné que peu de répis.
J'ai été obligée d'enlever tous les formats personnalisés (mêmes ceux qui sont vraiment utiles à l'utilisation de mon outil) et le problème est revenu.

Je travaille sous office 2003 et il semblerait que la seule solution viable soit de migrer sous 2010.
Cela ne m'est impossible pour des raisons pratiques (300 utilisateurs à migrer!)

Du coup je me demandais s'il pouvait y avoir d'autres axes d'amélioration: est-ce qu'il y a un moyen de simplifier automatiquement ma mise en forme? j'ai 12 onglets avec pas mal de couleurs, si je mets en n&b est-ce que ça me permettra d'avancer?
Comme c'est long à faire je préfèrerais avoir la réponse avant d'entreprendre cela sans compter que je suis quasiment obligée d'enregistrer fermer et ouvrir mon fichier à chaque fois que je change une police, un couleur...


Quelle galère!

Merci de votre aide 🙂
 
Re : xlsstylereduction - nettoyeur de format

Bonjour
Le plus sur et de loin à mon avis c'est de refaire un classeur NEUF en recopiant les formules mais pas les formats et en réappliquant un nombre raisonnable de formats personnalisés, nombre de polices, tailles de polices.
Ca ne sert à rien de supprimer dans un classeur existant les couleurs de police par exemple car excel garde en mémoire le nombre de formats qui ont été utilsés à un moment quelconque, même si ils ne sont plus en activité.
 
Re : xlsstylereduction - nettoyeur de format

J'ai tellement de macros associées, de calculs avec liaisons que c'est vraiment périlleux 🙁
j'essaye à tout pris d'éviter cette solution drastique mais au final j'y viendrai peut être...
 
Re : xlsstylereduction - nettoyeur de format

Bonjour,
S'il n'y a que 12 onglets c'est vraiement bizarre d'avoir ce message.
Autre axe de recherche : J'ai rencontré un jour ce message dans un fichier où se trouvaient de très nombreux objets graphiques (images, formes, graphiques) réduits à une taille nulle suite à suppression de lignes ou de colonnes.
mon conseil : se placer dans une feuille et faire édition/atteindre/objets : on voit vite les objets cachés.
Cordialement
 
Re : xlsstylereduction - nettoyeur de format

Les macros se transfèrent très simplement en faisant glisser le module d'un classeur vers l'autre dans l'éditeur ce qui prend quelques secondes.
Pour les liaisons, si tu copies les formules d'un classeur vers un autre, rien ne change. Et puis tu ne fais que copier donc au pire tu as l'original ! Il te suffit d'enregistrer le classeur dans le même dossier que l'original, sous un nom différent que tu modifieras ensuite quand tout sera verrouillé.
Ca n'a rien de périlleux mais c'est en général la méthode la plus sure de repartir d'un bon pied.
 
Re : xlsstylereduction - nettoyeur de format

Pour les macros je ne pensais pas que cela soit si simple, c'est une bonne nouvelle.
En revanche ce que je ne sais pas comment gérer ce sont les noms. J'ai pas mal de formules qui font appel à des cellules que j'ai nommées.
J'imagine qu'il faut que je crée les noms dans les bons champs avant de faire la copie de mes onglets de l'ancienne à la nouvelle version...
 
Re : xlsstylereduction - nettoyeur de format

Tu peux recréer tes noms avant ou après. Tant que tu n'auras pas recréé les noms tu auras des #valeurs et autres injures dans tes cellules mais ne t'en occupe pas, ça disparaitra quand tu auras défini les noms.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour