Poids fichier excel avec formules

Florian53

XLDnaute Impliqué
Bonjour,

je dispose d'un fichier excel avec beaucoup de formules et le poids du fichier est de 11Mo,

Pouvez vous me dire si c'est normal ? et si une solution existe pour diminué le poids de ce fichier ?

Merci à vous
 

eriiic

XLDnaute Barbatruc
Sans doute demain si pas de soucis.
Si tu démarres un nouveau topic, ce que je comprendrais, met le lien ici, je verrai s'il a avancé.
Là je fais des interventions qui demandes 5-10 min, toi il en faut nettement plus devant soi... ;-)
eric
 

Florian53

XLDnaute Impliqué
Ok, pas de soucis, je vais continuer a essayer d'avancer tout seul et j'attendrais ta dispo.

En attendant voici une macro qui a l'air de fonctionner mais prends un peu de temps à s'éxécuter:

VB:
Sub Macro4()
'
' Macro4 Macro
Dim i, j As Integer

    Sheets("AAA").Activate
    Columns("A:B").Select ' Insertion de 2 colonnes
    Selection.Insert Shift:=x1ToRight, CopyOrigin:=x1FormatFromLeftOrAbove
    Columns("A:A").NumberFormat = "dd/mm/yyyy" ' Mise au format de la ColonneA
    Range("A4").FormulaR1C1 = "=(DATE(LEFT(RC3,4),1,1))" ' Recupération de la 1ere année
     Range("A1").Value = Range("A4").Value 'Mise en mémoire de la 1er date
    Range("A5:A" & [C65536].End(xlUp).Row).FormulaR1C1 = "=IF(R[-1]C="""","""",IF(R[-1]C[1]>TEXT(YEAR((TODAY()-7)-WEEKDAY((TODAY()-7),2)+4)&""""&TEXT(INT(MOD(INT(((TODAY()-7)-2)/7)+3/5, 52+5/28))+1,""00""),""0""),"""",(R[-1]C+7)))" ' Formule pour mise en forme jj/mm/aaaaa
   

    Range("B4:B" & [C65536].End(xlUp).Row).FormulaR1C1 = "=IF(RC[-1]="""","""",TEXT(YEAR(RC[-1]-WEEKDAY(RC[-1],2)+4)&""""&TEXT(INT(MOD(INT((RC[-1]-2)/7)+3/5, 52+5/28))+1,""00""),""0""))" ' Formule pour mise en forme AAAASS
       
For i = 4 To Range("A65536").End(xlUp).Row Step 1 '  Début de la procédure

    If Range("C" & i).Value = Range("B" & i).Value Then ' 1er condition : si date correspondent alors rien
    Else
    If Range("C" & i).Value <> Range("B" & i).Value Then '2eme condition: si pas de correspondance, insertion d'un ligne et décalage des formules
    Rows(i).Insert Shift:=xlUp
    Range("A4").Value = Range("A1").Value
    Range("A5:A" & [C65536].End(xlUp).Row).FormulaR1C1 = "=IF(R[-1]C="""","""",IF(R[-1]C[1]>TEXT(YEAR((TODAY()-7)-WEEKDAY((TODAY()-7),2)+4)&""""&TEXT(INT(MOD(INT(((TODAY()-7)-2)/7)+3/5, 52+5/28))+1,""00""),""0""),"""",(R[-1]C+7)))"
    Range("B" & i).FormulaR1C1 = "=TEXT(YEAR(RC[-1]-WEEKDAY(RC[-1],2)+4)&""""&TEXT(INT(MOD(INT((RC[-1]-2)/7)+3/5,52+5/28))+1,""00""),""0"")"
  
   End If
  
    End If

     Next
   
End Sub
 

eriiic

XLDnaute Barbatruc
Bonjour,

Finalement je suis parti sur une fonction qui te retourne le tableau dont tu as besoin, plus qu'à le coller où tu veux.
Je ne met que le début pour la syntaxe, elle est assez longue et fait appel à d'autres fonctions :
VB:
Function top(entete As Range, donnees As Range, Optional nbTop As Long = 5)
    ' entete : plage des 3 lignes d'entete (Ex : [A1:AC3])
    ' donnees : plage en A des semaines voulues (Ex : [A4:A7])
    '           si une seule cellule alors la plage sera de cette cellule à la dernière (Ex : [A30] donne [A30:A147])
    ' nbTop : nombre de top voulus
Ca permet plus de souplesse dans l'utilisation. Exemples d'appels :
VB:
Sub test()
    Dim r
    With Sheets("AAA")
        r = top(.[A1:AC3], .[A4:A7], 5) ' top5 4 premières lignes
        'r = top(.[A1:AC3], .[A4], 5) ' top5 tout
        'r = top(.[A1:AC3], .[A87], 5) ' top5 ligne 87 à la fin
        'r = top(.[A1:AC3], .[A30:A32], 8) ' top8 lignes 30 à 32
    End With
    With Sheets("Feuil2")
        .[A3].CurrentRegion.ClearContents
        .[A1].Resize(UBound(r, 1), UBound(r, 2)) = r
        .Activate
    End With
End Sub
Regarde si ça te va, je te laisse la mise en place des résultats. Tout est dans Module2
Je viens seulement de voir le tableau K:AU. Je pense que tu peux l'avoir avec un top27
Vu la masse des données résultantes le fichier aura toujours une certaine taille incompressible...
eric
 

Pièces jointes

  • TEST2.xlsm
    793.7 KB · Affichages: 16

Florian53

XLDnaute Impliqué
Bonjour Ericcc,

Un grand merci à toi pour ton aide. J'ai exécuté la macro sa fonctionne a merveille, je me laisse un peu de temps afin de pouvoir comprendre le code que tu as fais.

J'ai essayé de modifié le paramètre de "r" mais j'ai eu un défaut .

J'ai voulu mettre cette option là " 'r = top(.[A1:AC3], .[A4], 5) ' top5 tout"

Je pars en vacances demain pour 3 semaines je ne sais comment sera ma connexion internet. je vais prendre du temps afin de mieux comprendre le code et je reviens vers toi.

Encore un énorme merci pour le temps que tu m'as accordé.
 

eriiic

XLDnaute Barbatruc
Je n'ai testé que sur de courtes plages, c'est un exemple que je n'ai pas testé... :)
J'ai analysé et vu le pourquoi du bug, rien d'insurmontable. Je me met à sa résolution un peu plus tard (travaux de peinture en cours).
En attendant, si tu veux tester un peu, prend des plages de données sur une année unique.
eric
 

Statistiques des forums

Discussions
312 294
Messages
2 086 902
Membres
103 404
dernier inscrit
sultan87