OVH Cloud OVH Cloud

Nombre de formats de cellules

15 réponses
Avatar
Jean Marc VELO
Bonjour,

Existe t'il un moyen en VBA pour connaître le nombre de formats de cellules
différents d'un classeur ?

Ceci pour éviter l'erreur "Nombre de formats de cellules différents trop
élevé" qui empèche l'ouverture d'un classeur.

Merci.

Jean-Marc VELO

5 réponses

1 2
Avatar
Frédéric Sigonneau
Bonsoir Daniel,

Il y a déjà pas mal de boulot fait en deux jours !..
Archivons toujours en cet état, en l'attente d'une réaction du demandeur ou
d'une nouvelle question et d'un sursaut d'énergie :)

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

En tenant compte des formats conditionnels mais pas de la façon optimale que je
voudrais. Ce sera à un autre de prendre le relais ;-)

Salutations,

Daniel M.

' +++++++++++++++++++++++++++++

Dim D As Object

Type Styles_Et_Formats
Styles_Utilises As Long
DeltaAvecLeStyle As Long
MEFC As Long
End Type

Sub TestNFSC()
Dim r As Styles_Et_Formats
r = NbFormatsSurClasseur(ActiveWorkbook)
MsgBox ActiveWorkbook.Name & ":" & vbNewLine & _
"==>" & vbTab & r.DeltaAvecLeStyle & _
" cellules avec formats particuliers" & vbNewLine & _
"==>" & vbTab & r.Styles_Utilises & _
" styles précis utilisés" & vbNewLine & _
"==>" & vbTab & r.MEFC & " MEFC."
End Sub

Function NbFormatsSurClasseur(Classeur As Workbook) As Styles_Et_Formats
Dim Feuille As Worksheet
Dim n As Long, fc As Long, r As Styles_Et_Formats
n = 0: fc = 0
Set D = CreateObject("Scripting.Dictionary")

For Each Feuille In ActiveWorkbook.Worksheets
r = NbFormatsSurFeuille(Feuille)
n = n + r.DeltaAvecLeStyle
fc = fc + r.MEFC
Next Feuille
NbFormatsSurClasseur.DeltaAvecLeStyle = n
NbFormatsSurClasseur.MEFC = fc
NbFormatsSurClasseur.Styles_Utilises = D.Count
Set D = Nothing
End Function

Function NbFormatsSurFeuille(sht As Worksheet) As Styles_Et_Formats
Dim Cell As Range, nomStyle As String, Res As Styles_Et_Formats
Res.MEFC = 0: Res.DeltaAvecLeStyle = 0

For Each Cell In sht.UsedRange
nomStyle = Cell.Style.Name
If Not D.exists(nomStyle) Then D.Add nomStyle, 1

With ActiveWorkbook.Styles(nomStyle)
If Cell.NumberFormat <> .NumberFormat Or _
Cell.HorizontalAlignment <> .HorizontalAlignment Or _
Cell.VerticalAlignment <> .VerticalAlignment Or _
Cell.Borders.Value <> .Borders.Value Or _
Cell.Locked <> .Locked Or _
Cell.Interior.ColorIndex <> .Interior.ColorIndex Or _
Cell.Interior.Pattern <> .Interior.Pattern Or _
Cell.Font.Name <> .Font.Name Or _
Cell.Font.Size <> .Font.Size Or _
Cell.Font.Bold <> .Font.Bold Or _
Cell.Font.Italic <> .Font.Italic Or _
Cell.Font.ColorIndex <> .Font.ColorIndex Then
Res.DeltaAvecLeStyle = Res.DeltaAvecLeStyle + 1
End If
Res.MEFC = Res.MEFC + Cell.FormatConditions.Count
End With
Next Cell
NbFormatsSurFeuille = Res
End Function
' +++++++++++++++++++++++++++++


--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

Avatar
please-no-spam-jm.velo
Frédéric Sigonneau wrote in message news:...
Bonsoir Daniel,

Il y a déjà pas mal de boulot fait en deux jours !..
Archivons toujours en cet état, en l'attente d'une réaction du demandeur ou
d'une nouvelle question et d'un sursaut d'énergie :)



Bonjour,

Je vous remercie tous pour votre aide, même si j'avoue que je suis un
peu perdu.
En fait, on ne sait pas de manière précise ce qui doit être pris en
compte ou pas dans le comptage du nombre de cellules.

De mon coté, j'ai fait un bout de code qui génère dans un fichier
texte les formats de toutes les cellules du classeur, pour ensuite
traiter ce fichier afin de repérer les différents formats, ce qui
logiquement devrait me donner le nombre de formats différents, mais je
n'ai pris en compte que les propriétés définissables par les onglets
de la fenêtre "Formats de cellule". Est-ce suffisant ?

Par cette manip, j'obtient une chose etrange : sur un classeur avec
trois feuilles je trouve 158 formats différents, et si dans ce
classeur je fais une simple copie de ces trois feuilles, j'obtient 199
formats différents, alors que je n'ai rien fait d'autre que de copier
des feuilles qui se trouvaient déjà dans ce classuer sans rien saisir
ni modifier de format de cellules.

Il me vient deux autres questions :

Y a t'il un moyen d'ouvrir un fichier qui présente le message "Nombre
de formats de cellule différents trop élevé", moyen brutal ou pas,
avec perte des formats ou pas, en supprimant une ou plusieurs feuilles
ou pas, enfin, un début de solution quoi !

D'autre part, je manipule Excel par Automation depuis Windev 7.5,
est-ce possible en automation d'accéder à un objet Worksheet sans
ouvrir l'objet Workbook car l'ouverture par automation présente le
même message d'erreur.

Je vous joint ci-dessous le code de mon module de comptage des
différents formats :

Sub TestFormat()

Open "C:Test.txt" For Append As #1

For Each Wksht In Worksheets
For Each Cell In Wksht.UsedRange
' Debug.Print cell.NumberFormatLocal & "¤" & _
Alignement(cell) & _
Polices(cell) & _
Bordures(cell) & _
Motifs(cell) & _
Protection(cell)
Print #1, Cell.NumberFormatLocal & "¤" & _
Alignement(Cell) & _
Polices(Cell) & _
Bordures(Cell) & _
Motifs(Cell) & _
Protection(Cell)

Next Cell
Wksht.select
MsgBox Wksht.Name
Next Wksht

Close #1

MsgBox "OK"

End Sub

Function Alignement(Cell) As String

'
' Alignement Macro
' Macro enregistrée le 24/11/2003 par CHAMPAGNE INFORMATIQUE
'
Alignement = Cell.HorizontalAlignment & "¤" _
& Cell.VerticalAlignment & "¤" _
& Cell.WrapText & "¤" _
& Cell.Orientation & "¤" _
& Cell.AddIndent & "¤" _
& Cell.IndentLevel & "¤" _
& Cell.ShrinkToFit & "¤" _
& Cell.MergeCells & "¤"

End Function
Function Polices(Cell) As String
'
' Polices Macro
' Macro enregistrée le 24/11/2003 par CHAMPAGNE INFORMATIQUE
'

' Polices

Polices = Cell.Font.Name & "¤" _
& Cell.Font.FontStyle & "¤" _
& Cell.Font.Size & "¤" _
& Cell.Font.Strikethrough & "¤" _
& Cell.Font.Superscript & "¤" _
& Cell.Font.Subscript & "¤" _
& Cell.Font.OutlineFont & "¤" _
& Cell.Font.Shadow & "¤" _
& Cell.Font.Underline & "¤" _
& Cell.Font.ColorIndex & "¤"

End Function
Function Bordures(Cell) As String

'
' Macro3 Macro
' Macro enregistrée le 24/11/2003 par CHAMPAGNE INFORMATIQUE
'

'
With Cell.Borders(xlDiagonalDown)
Bordures = .LineStyle & "¤" _
& .Weight & "¤" _
& .ColorIndex & "¤"
End With

With Cell.Borders(xlDiagonalUp)
Bordures = Bordures & .LineStyle & "¤" _
& .Weight & "¤" _
& .ColorIndex & "¤"
End With

With Cell.Borders(xlEdgeLeft)
Bordures = Bordures & .LineStyle & "¤" _
& .Weight & "¤" _
& .ColorIndex & "¤"
End With
With Cell.Borders(xlEdgeTop)
Bordures = Bordures & .LineStyle & "¤" _
& .Weight & "¤" _
& .ColorIndex & "¤"
End With
With Cell.Borders(xlEdgeBottom)
Bordures = Bordures & .LineStyle & "¤" _
& .Weight & "¤" _
& .ColorIndex & "¤"
End With
With Cell.Borders(xlEdgeRight)
Bordures = Bordures & .LineStyle & "¤" _
& .Weight & "¤" _
& .ColorIndex & "¤"
End With

End Function
Function Motifs(Cell) As String

'
' Macro5 Macro
' Macro enregistrée le 24/11/2003 par CHAMPAGNE INFORMATIQUE
'

'
With Selection.Interior
Motifs = .ColorIndex & "¤" _
& .Pattern & "¤" _
& .PatternColorIndex & "¤"
End With

End Function
Function Protection(Cell) As String
'
' Macro6 Macro
' Macro enregistrée le 24/11/2003 par CHAMPAGNE INFORMATIQUE
'

'
Protection = Cell.Locked & "¤" & _
Cell.FormulaHidden & "¤"


End Function

Avatar
Daniel.M
Bonjour,

Je vous remercie tous pour votre aide, même si j'avoue que je suis un
peu perdu.
En fait, on ne sait pas de manière précise ce qui doit être pris en
compte ou pas dans le comptage du nombre de cellules.



C'est la question clé. Qu'est-ce qui participe au nombre total des formats?
Je ne sais pas précisément. Voir prochaine réponse.

De mon coté, j'ai fait un bout de code qui génère dans un fichier
texte les formats de toutes les cellules du classeur, pour ensuite
traiter ce fichier afin de repérer les différents formats, ce qui
logiquement devrait me donner le nombre de formats différents, mais je
n'ai pris en compte que les propriétés définissables par les onglets
de la fenêtre "Formats de cellule". Est-ce suffisant ?


Si tu regardes du côté de la dernière réponse d'AV, il y a de quoi te décourager
même si je crois qu'il a malheureusement raison.



Par cette manip, j'obtient une chose etrange : sur un classeur avec
trois feuilles je trouve 158 formats différents, et si dans ce
classeur je fais une simple copie de ces trois feuilles, j'obtient 199
formats différents, alors que je n'ai rien fait d'autre que de copier
des feuilles qui se trouvaient déjà dans ce classuer sans rien saisir
ni modifier de format de cellules.


Quelle réponse obtiens-tu si tu roule ma proc dans ton classeur?

Y a t'il un moyen d'ouvrir un fichier qui présente le message "Nombre
de formats de cellule différents trop élevé", moyen brutal ou pas,
avec perte des formats ou pas, en supprimant une ou plusieurs feuilles
ou pas, enfin, un début de solution quoi !


Une solution parmi d'autres:
Tu récupères la suite www.OpenOffice.org (50 Megs).
Tu ouvres le fichier dans OpenCalc.
Tu enlèves les formats.
Tu sauvegardes sous une autre nom (choisir format Excel).
Tu ouvres le nouveau fichier sans format dans Excel.
Tu définis des styles :-) et tu les appliques aux cellules désirées.

Salutations,

Daniel M.

Avatar
Clément Marcotte
Bonjour,

En fait, on ne sait pas de manière précise ce qui doit être pris en
compte ou pas dans le comptage du nombre de cellules.


Le principe de base par là:


http://support.microsoft.com/default.aspx?scid=kb;FR;q213904

Avatar
Daniel.M
Salut Clément,

Merci pour l'info.

Après avoir lu l'article, l'impression que j'en ai est que les MEFC, graphiques,
boîtes de dial et autres 'shapes' ne participent pas au décompte du nombre de
formats maximum (4000).

Ainsi donc, ma proc (2e version) devrait donner une bonne idée.
Je vais en publier une dernière version d'ici peu.

Salutations,

Daniel M.

"Clément Marcotte" wrote in message
news:
Bonjour,

En fait, on ne sait pas de manière précise ce qui doit être pris en
compte ou pas dans le comptage du nombre de cellules.


Le principe de base par là:


http://support.microsoft.com/default.aspx?scid=kb;FR;q213904




1 2