web-dev-qa-db-fra.com

Trop de formats de cellules différents

  1. J'ai un fichier volumineux avec 10 feuilles recréées à partir de rien, 12 feuilles mises à jour, 5 feuilles chargées de données brutes et 7 feuilles utilisées par les macros pour le rapport.
  2. J'ai récemment ajouté une nouvelle feuille et je rencontre le problème Excel "Trop de formats de cellules différents"

ce que j'ai essayé  

J'ai lu certains résultats de recherche sur Google et ils disent que je devrais simplifier le formatage, mais je ne sais même pas comment je suis arrivé à 4000 formats de cellules distincts, et encore moins combien j'utilise, lesquels je peux supprimer certains. 

Il s’affiche également à certains moments où le fichier est exécuté, mais pas tous, jusqu’à ce qu’il apparaisse, puis cela se produit chaque fois qu’il est exécuté. Étant donné que la macro effectue une grande partie du travail, y compris la création de 10 feuilles à partir de rien, je ne sais pas quoi faire. 

Est-ce que quelqu'un sait

  • d'une macro que je pourrais exécuter pour obtenir une liste de tous les formats de cellules et combien de cellules les utilisent?
  • d'un programme en lequel ils ont confiance pour aider à éliminer les formats de cellules excédentaires? 

Merci 

19
Craig

Les "formats de cellules" sont compliqués. Les cellules n'ont pas vraiment de "format". Ils ont une police (qui a elle-même un nom et une taille), un NumberFormat, une hauteur, une largeur, une orientation, etc.

Vous devez donc définir ce que vous entendez par "format".

Vous trouverez ci-dessous le code permettant d’obtenir le nom et la taille de la police. Vous pouvez substituer les attributs de votre choix.

Le code ci-dessous suppose que vous avez créé une feuille de calcul nommée "Formats" dans le classeur. Après avoir exécuté la macro, les noms et tailles de police seront répertoriés dans cette feuille de calcul.

Public Sub GetFormats()

    Dim CurrentSheet As Integer
    Dim UsedRange As Range
    Dim CurrentCell As Range
    Dim rw As Long

    Sheets("Formats").Cells.ClearContents
    rw = 1
    For CurrentSheet = 1 To Sheets.Count
        Set UsedRange = Range(Sheets(CurrentSheet).Range("A1"), Sheets(CurrentSheet).Range("A1").SpecialCells(xlLastCell))
        For Each CurrentCell In UsedRange
            FontUsed = CurrentCell.Font.Name + ":" + CStr(CurrentCell.Font.Size)
            If Sheets("Formats").Cells.Find(FontUsed) Is Nothing Then
                Sheets("Formats").Cells(rw, 1).Value = FontUsed
                rw = rw + 1
            End If
        Next
    Next CurrentSheet
End Sub
7
Mike Lewis

Le problème que vous décrivez m'a amené (ainsi qu'un collègue) à perdre de nombreuses heures de productivité lors de l'utilisation d'Excel 2010. Le code/macro VBA suivant m'a aidée à supprimer un fichier .xlsm de 3540 styles à 34.

' Description:
'    Borrowed largely from http://www.jkp-ads.com/Articles/styles06.asp

Option Explicit

' Description:
'    This is the "driver" for the entire module.
Public Sub DropUnusedStyles()

    Dim styleObj As Style
    Dim rngCell As Range
    Dim wb As Workbook
    Dim wsh As Worksheet
    Dim str As String
    Dim iStyleCount As Long
    Dim dict As New Scripting.Dictionary    ' <- from Tools / References... / "Microsoft Scripting Runtime"

    ' wb := workbook of interest.  Choose one of the following
    ' Set wb = ThisWorkbook ' choose this module's workbook
    Set wb = ActiveWorkbook ' the active workbook in Excel


    Debug.Print "BEGINNING # of styles in workbook: " & wb.Styles.Count
    MsgBox "BEGINNING # of styles in workbook: " & wb.Styles.Count

    ' dict := list of styles
    For Each styleObj In wb.Styles
        str = styleObj.NameLocal
        iStyleCount = iStyleCount + 1
        Call dict.Add(str, 0)    ' First time:  adds keys
    Next styleObj
    Debug.Print "  dictionary now has " & dict.Count & " entries."
    ' Status, dictionary has styles (key) which are known to workbook


    ' Traverse each visible worksheet and increment count each style occurrence
    For Each wsh In wb.Worksheets
        If wsh.Visible Then
            For Each rngCell In wsh.UsedRange.Cells
                str = rngCell.Style
                dict.Item(str) = dict.Item(str) + 1     ' This time:  counts occurrences
            Next rngCell
        End If
    Next wsh
    ' Status, dictionary styles (key) has cell occurrence count (item)


    ' Try to delete unused styles
    Dim aKey As Variant
    On Error Resume Next    ' wb.Styles(aKey).Delete may throw error

    For Each aKey In dict.Keys

        ' display count & stylename
        '    e.g. "24   Normal"
        Debug.Print dict.Item(aKey) & vbTab & aKey

        If dict.Item(aKey) = 0 Then
            ' Occurrence count (Item) indicates this style is not used
            Call wb.Styles(aKey).Delete
            If Err.Number <> 0 Then
                Debug.Print vbTab & "^-- failed to delete"
                Err.Clear
            End If
            Call dict.Remove(aKey)
        End If

    Next aKey

    Debug.Print "ENDING # of style in workbook: " & wb.Styles.Count
    MsgBox "ENDING # of style in workbook: " & wb.Styles.Count

End Sub
45
Chuck The Nerd

Beaucoup de gens semblent se heurter à ce problème.

Le plus souvent, {le problème est lié au nombre excessif de styles inutilisés et souvent corrompus)

J'ai écrit un utilitaire pour corriger les fichiers XL2007 OOXML qui peuvent être enregistrés au format XL2003. Voici le lien vers le blog: 

  • Nécessite Net3.5 et MS Excel 2007.
  • Corrige les fichiers xlsx ou xlsm. 
  • Cet article contient un fichier Lisez-moi qui va avec l'application.

Pas besoin de courir le risque de corrompre davantage votre fichier en utilisant Open Office comme suggéré sur d'autres forums

6
XLGeek

J'ai eu ce problème, trouvé le moyen le plus simple pour effacer qu'il utilisait cet ajout Excel . Il semble que ce soit la réponse "officielle" de la page Microsoft sur le problème .

Pour les personnes aussi confuses que moi lorsque j'utilisais des fichiers .xlam, faites-le dans Excel après l'avoir téléchargé: 

  1. Cliquez sur Fichier <Options <Compléments.
  2. Sous l'option Gérer, cliquez sur Go.
  3. Dans la fenêtre des compléments, cliquez sur Parcourir, naviguez jusqu'à l'emplacement où le fichier XLAM est enregistré, mettez-le en surbrillance, puis cliquez sur OK.
  4. Activez le nouveau complément dans la fenêtre des compléments, puis cliquez sur OK.
  5. La barre de ruban de votre écran d’accueil devrait maintenant comporter une section "Supprimer les styles", qui consiste en un bouton indiquant le nombre de styles dans le classeur (probablement des milliers si vous rencontrez ce problème).
  6. Cliquez sur le bouton du ruban pour éliminer tous les formats en double.

Si vous ne le voyez pas, vérifiez qu'il s'affiche correctement sur le ruban. Faites un clic droit sur le ruban et dites "Personnaliser le ruban". Cliquez ensuite sur Add-Ins. Sous Compléments d'applications actives, vous devez voir "Supprimer les styles supplémentaires".

2
Alex S

Les bogues qui entraînaient le message d'erreur "Trop de formats de cellules" dans Excel 2007+ ont été traités: http://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for-Excel -2007-custom-styles-duplication/ Notez que les corrections de bogues ne suppriment pas la corruption de fichier liée aux styles préexistants. Les outils basés sur Open XML (disponibles gratuitement) sont la seule option permettant de supprimer les éléments inaccessibles aux outils basés sur un modèle objet Excel: par exemple, les styles défectueux qui se sont déguisés en styles intégrés, masqués, etc. 100% styles liés aux fichiers libres de corruption.

2
XLGeek

Une solution consiste à utiliser Utilitaires ASAP . Dans la section feuille, il y a une option remove all unused styles. Vous devez ensuite fermer le classeur et rouvrir, je pense.

1
Barbara Wiseman

Cela supprimera tous les styles SAUF les styles par défaut (normal, explicatif, 20% d'accent1, etc.). Y compris les styles que l'utilisateur a créés, mais il s'agit d'un moyen simple et rapide de nettoyer un classeur:


Sub NewNukeStyles()
Dim tempstyle As Style

For Each tempstyle In ActiveWorkbook.Styles

 If tempstyle.BuiltIn = False Then
    If tempstyle.Locked = True Then 'not sure what this is
       tempstyle.Delete
    End If
End If

Next tempstyle

End Sub 'NukeStyles

J'aimerais savoir à quoi la propriété tempstyle.locked fait référence, autre qu'une "valeur booléenne indiquant si l'objet est verrouillé".

1
LeasMaps

SpreadsheetGear for .NET mettra au point des formats non uniques pouvant vous aider dans votre situation. 

Vous pouvez télécharger la version d'essai gratuite ici si vous voulez voir si cela vous aide. Il vous suffit de charger le classeur dans l'application "SpreadsheetGear 2009 pour Windows" installée avec le logiciel d'évaluation, puis de l'enregistrer.

Si vous avez réellement autant de formats uniques, vous devrez simplifier. Chaque combinaison unique de couleur de police/cellule (intérieur), format numérique, alignement horizontal et vertical, bordures, niveau de retrait et probablement de quelques éléments auxquels je ne pense pas entraînera une entrée unique dans le tableau.

Une autre option consiste à basculer vers Excel 2007, dans lequel la limite des formats de cellules uniques est passée de 4 000 à 64 Ko.

Disclaimer: Je possède SpreadsheetGear LLC

1
Joe Erickson

J'ai déjà vu ce problème auparavant. Il est possible de recréer pour prouver ce que je suis capable de dire. C'est un peu un piège 22 mais quand vous avez une feuille qui a le problème «Trop de formats», ouvrez une nouvelle feuille et copiez une cellule de la feuille de trop de formats et collez-la simplement dans le nouveau classeur. Ce classeur sera désormais "infecté" et comportera également l'erreur de format trop nombreux. Il semble que beaucoup de données de format viennent avec cette pâte, sauf si vous utilisez une pâte spéciale pour la restreindre.

Comment améliorer les choses? Une solution de contournement consiste à utiliser la fonction Enregistrer sous HTML. Ours avec moi si cela fonctionne. Je parle de 2003 ici, je ne sais pas ce qui se passe en 2007, peut-être que ce bogue a été corrigé. Alors ... Enregistrer en tant que HTML puis fermez Excel. Chargez une nouvelle session et chargez-la en vous assurant que ne pas exécutez les macros, puis une fois chargé, enregistrez-le sous forme de feuille de calcul.

Lorsque vous fermez et rouvrez cette nouvelle feuille de calcul, vos problèmes de formats trop nombreux devraient disparaître. 

1

Si vous pouvez ouvrir le fichier Essayez> Éditer> Effacer> Formats.

Mettez en surbrillance la feuille avant de frapper les formats cela a fonctionné pour moi.

assurez-vous de faire une copie d'Excel avant de le faire. Si seulement quelque chose manquait, vous pouvez consulter l'ancien document.

0
Zach Shaw