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
Merci
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
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
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:
Pas besoin de courir le risque de corrompre davantage votre fichier en utilisant Open Office comme suggéré sur d'autres forums
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é:
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".
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.
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.
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é".
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
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.
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.