Macro qui fait grossir fichier
Bonjour à tous,
J'ai un problème avec une macro et je n'arrive pas à trouver une solution...
je vous explique :
J'ai un bouton "MiseAJour" qui effectue l'enchainement de macro suivant :
Sub RemplissageTableau()
Application.ScreenUpdating = False
Dim c As Range
Dim EffNec
EffNec = "=IF(OR(RC13=""AGPRO"",RC13=""AGTEC"",RC13=""AGING"",RC13=""AGAPP""),0,RC[-2])"
For I = 11 To Sheets.Count
With Sheets(I)
.Columns("T:U").ClearContents
For Each c In .Range("T1:U" & .Range("S" & Rows.Count).End(xlUp).Row)
c.Formula = EffNec
Next c
End With
Next I
Total
End Sub
_____________________________________________________
Sub Total()
Dim LastLig As Long, Deb As Long, Fin As Long
Dim T As Double, U As Double
Dim Prem As String
Dim c As Range
For I = 11 To Sheets.Count
With Sheets(I)
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
Set c = .Range("B2:B" & LastLig).Find("Total*", LookIn:=xlValues, lookat:=xlPart)
Deb = 2
If Not c Is Nothing Then
Prem = c.Address
Do
Fin = c.Row - 1
.Range("T" & Fin + 1).Formula = "=SUMIF(E" & Deb & ":E" & Fin & ",""<>"",T" & Deb & ":T" & Fin & ")"
.Range("U" & Fin + 1).Formula = "=SUM(U" & Deb & ":U" & Fin & ")"
Deb = Fin + 2
T = T + .Range("T" & Fin + 1)
U = U + .Range("U" & Fin + 1)
Set c = .Range("B2:B" & LastLig).FindNext(c)
Loop While Not c Is Nothing And c.Address <> Prem
End If
.Range("T" & LastLig).Resize(, 2) = Array(T, U)
T = 0
U = 0
End With
Next I
MiseEnForme
End Sub
_______________________________________________________________
Sub MiseEnForme()
For I = 11 To Sheets.Count
With Sheets(I)
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("E1:E" & LastLig).Copy
.Range("D1:V" & LastLig).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
'.Columns("A:V").AutoFit
.Range("A1:Q" & LastLig).HorizontalAlignment = xlLeft
.Range("T1:U" & LastLig).HorizontalAlignment = xlRight
.Range("R1:S" & LastLig).EntireColumn.Hidden = True
.Range("R1:S" & LastLig).EntireColumn.Hidden = True
.Range("V1:V" & LastLig).ColumnWidth = 40
.Range("L1:L" & LastLig).NumberFormat = "m/d/yyyy"
.Range("H1:H" & LastLig).NumberFormat = "m/d/yyyy"
.Range("O1:O" & LastLig).NumberFormat = "m/d/yyyy"
.Range("Q1:Q" & LastLig).NumberFormat = "m/d/yyyy"
.Range("D1:D" & LastLig).EntireColumn.Hidden = True
'Mise en forme Ligne
.Rows("1:1").HorizontalAlignment = xlCenter
.Rows("1:1").VerticalAlignment = xlCenter
End With
Next I
End SubTout fonctionne très bien jusqu'à la macro MiseEnForme. Même si celle ci fonctionne, à chaque fois que je l'active, celle ci fait grossir mon fichier, le rendant de plus en plus lent et au final inutilisable.
Sur les conseil d'une personne j'ai rajouté le code suivant, pour voir ou s'exécute la macro:
MsgBox .UsedRange.AddressEt celle ci s'exécute bien dans les dimension voulue...
Je ne sais pas d'où viens le problème et j'ai cherché sans trop trouver de solution convenable. j'ai donc besoin de votre aide
Je suis désolé si je ne me fait mal comprendre ou si mon code est pas lisible ou mal opti, je suis en apprentissage
Un grand merci d'avance à ceux qui voudrons bien m'aider, je mets en pièce jointe un fichier test avec le problème en question (normalement toutes les feuilles sont utilisé mais le fichier était trop gros pour être mise en pièce jointe)
Bonsoir MaitreBanjo,
J'ai eu beau faire, je n'ai pas trouvé la raison pour laquelle à chaque exécution de "Mise En Forme", le fichier grossissait d'environ 80K.
Il ne semble pas que le code en soit la cause. Plutôt les tables pivots et pour une raison inexplicable.
Une suggestion : si cela est reste compatible avec l'objectif du classeur, le sauvegarder en format "Feuille de calcul OpenDocument (*.ods)", la réduction de taille est importante et l'impact de l'exécution de "Mise en Forme" sur la taille est quasiment nulle...
Bonjour GVIALLES,
Ce problème est juste incompréhensible...
En tout cas merci d'avoir essayé de m'aider
Je vais aller arpenter d'autre forum en espèrent trouver une solution et si jamais c'est le cas je viendrais la dire ici.
En attendant je vais utiliser ta solution
Merci beaucoup !
Je pense avoir trouvé d'où viens le problème !
Il s'emblerais que ce soit la mise en forme de la 1ere ligne qui soit la cause du problème :
.Rows("1:1").HorizontalAlignment = xlCenter
.Rows("1:1").VerticalAlignment = xlCenterIl faudrais que j'arrive à modifier le code pour dire de A1 à "DernièreColonne"1.
Sauf que je sais pas le faire.
Une âme charitable pour m'aider et m'expliquer ?
Bonjour,
Je te propose :
.Range(.Cells(1, 1), .Cells(1, .UsedRange.Columns.Count)).HorizontalAlignment = xlCenter
.Range(.Cells(1, 1), .Cells(1, .UsedRange.Columns.Count)).VerticalAlignment = xlCenterRebonjour,
Merci pour ta réponse
Cela fonctionne mais le fichier continue de grossir... C'est absolument incompréhensible
J'ai trouvé un moyen détourné de "régler" le problème en transformant le code comme ceci :
Sub MiseEnForme()
For I = 11 To Sheets.Count
With Sheets(I)
.Cells.ClearFormats
End With
Next I
ThisWorkbook.RefreshAll
For I = 11 To Sheets.Count
With Sheets(I)
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("E1:E" & LastLig).Copy
.Range("D1:V" & LastLig).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Columns("A:V").AutoFit
.Range("A1:Q" & LastLig).HorizontalAlignment = xlLeft
.Range("T1:U" & LastLig).HorizontalAlignment = xlRight
.Range("R1:S" & LastLig).EntireColumn.Hidden = True
.Range("R1:S" & LastLig).EntireColumn.Hidden = True
.Range("V1:V" & LastLig).ColumnWidth = 40
.Range("L1:L" & LastLig).NumberFormat = "m/d/yyyy"
.Range("H1:H" & LastLig).NumberFormat = "m/d/yyyy"
.Range("O1:O" & LastLig).NumberFormat = "m/d/yyyy"
.Range("Q1:Q" & LastLig).NumberFormat = "m/d/yyyy"
.Range("D1:D" & LastLig).EntireColumn.Hidden = True
'Mise en forme Ligne
.Range(.Cells(1, 1), .Cells(1, .UsedRange.Columns.Count)).HorizontalAlignment = xlCenter
.Range(.Cells(1, 1), .Cells(1, .UsedRange.Columns.Count)).VerticalAlignment = xlCenter
'MsgBox .UsedRange.Address
End With
Next I
End SubJe supprime toutes les mise en formes avant d'aplliquer à nouveau les mise en forme... Mais si je veux mettre des couleurs sur certaines lignes je dois le faire à chaque mise à jour car celle ci disparaisse ...
Sinon je n'ai qu'à supprimer les deux lignes qui font grossir le fichier et je fais une Mise en forme manuel
Parfois, les voies d'EXCEL sont impénétrables...
Bon courage pour la suite...