Bonjour à tous,
Tout d'abord, je sais très bien que ce sujet a été traité nombre de fois. Malheureusement, aucune des solutions proposées ne sont parvenues à apporter une réponse à mon problème.
Je travaille sur Excel 2003, et comme vous l'avez compris, je fais face à une erreur qui me dit en anglais "Too many different cell format".
Au risque de paraitre irrespectueux, ne perdez pas votre temps à me répondre d'aller voir tel ou tel forum Microsoft, qui m'apporterait un utilitaire capable de nettoyer les formats inutilisés au sein de mon fichier, ou qui me dirait d'utiliser moins de format. Il ne s'agit là que d'une réponse sans aucun intérêt.
Clairement, je n'ai pas utilisé les 4000 formats differents au sein de mon fichier, et quand bien même je supprime tous les onglets et n'en laisse qu'un seul, avec une dizaine de cellules remplies, le problème est encore là. Le comble de ce problème, c'est que sur quelques onglets, il m'enverra le message d'erreur qu'à certains niveaux de la feuille excel (lorsque j'essaie d'insérer une ligne au niveau de la ligne 10, il m'enverra le message d'erreur, mais pas lorsque j'essaie au niveau de la ligne 200...).
Bref, vous l'aurez compris, cette erreur me pourrit la vie, et j'essaie de m'en débarasser !!!
Voici une macro que j'ai compilé, et qui fonctionne, mais qui n'efface pas les formats inutilisés. Si quelqu'un pouvait m'aider à l'affiner, je lui en serais grandement reconnaissant !!
Denis
Tout d'abord, je sais très bien que ce sujet a été traité nombre de fois. Malheureusement, aucune des solutions proposées ne sont parvenues à apporter une réponse à mon problème.
Je travaille sur Excel 2003, et comme vous l'avez compris, je fais face à une erreur qui me dit en anglais "Too many different cell format".
Au risque de paraitre irrespectueux, ne perdez pas votre temps à me répondre d'aller voir tel ou tel forum Microsoft, qui m'apporterait un utilitaire capable de nettoyer les formats inutilisés au sein de mon fichier, ou qui me dirait d'utiliser moins de format. Il ne s'agit là que d'une réponse sans aucun intérêt.
Clairement, je n'ai pas utilisé les 4000 formats differents au sein de mon fichier, et quand bien même je supprime tous les onglets et n'en laisse qu'un seul, avec une dizaine de cellules remplies, le problème est encore là. Le comble de ce problème, c'est que sur quelques onglets, il m'enverra le message d'erreur qu'à certains niveaux de la feuille excel (lorsque j'essaie d'insérer une ligne au niveau de la ligne 10, il m'enverra le message d'erreur, mais pas lorsque j'essaie au niveau de la ligne 200...).
Bref, vous l'aurez compris, cette erreur me pourrit la vie, et j'essaie de m'en débarasser !!!
Voici une macro que j'ai compilé, et qui fonctionne, mais qui n'efface pas les formats inutilisés. Si quelqu'un pouvait m'aider à l'affiner, je lui en serais grandement reconnaissant !!
Denis
Code:
Sub DeleteUnusedCustomNumberFormats()
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 = 4000
StartRow = 3 ' Do not alter this value
EndRow = 65536 ' For Excel 97 and 2000 set EndRow to 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 = StartRow
DataEnd = DataStart + Counter2 - 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