Problème de ressource

  • Initiateur de la discussion Initiateur de la discussion rmanal
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

rmanal

XLDnaute Nouveau
Bonjour,

j'ai un problème de ressource et de temps de calcul.
Je vous explique: j'ai un onglet qui fait à peu près 50000 lignes et des colonnes jusqu'à DP.
J'ai une macro qui le met en forme
...
Sheets("ICC extract").Select
Cells.Select
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlLeft
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
...

rien que cette première opération prend plus de 20 minutes....

Ensuite j'ai un deuxième onglet fixe dont le but est de recevoir une copie filtré du premier onglet.
Je commence donc pas le "nettoyer" et reformatter avant la copie avec le code suivant:
...
' Effacement de l'onglet CR avec DFMEA
Sheets("CR avec DFMEA").Select
Range("A1😀P100000").Select
Selection.Delete Shift:=xlUp
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
...

et là j'ai carrément un message d'erreur qui me dit que je n'ai pas assez de mémoire. Et cela même si je le fais manuellement. Alors que si j'efface et recrée l'onglet pas de soucis.

Est-ce que vous pourriez m'aider sur mes deux problèmes?

Merci d'avance,
Rmanal
 
Re : Problème de ressource

Bonjour

quelques conseils de base :

1) toujours éviter de sélectionner les objets en VBA pour travailler dessus
2) désactiver les calculs et la mise à jour de l'affichage
Code:
application.screenupdating= false
en début de macro, = true à lafin
Code:
Dim ModeRecalcul As Long  
ModeRecalcul = Application.Calculation
' Réglage du recalcul sur mode manuel 
Application.Calculation = xlCalculationManual
 ' [...] Instructions
 ' Rétablissement du mode de recalcul d'origine
 Application.Calculation = ModeRecalcul
3) ne travailler que sur ce qui contient vraiment ds données. Le plus simple c'est de mettre les données sous forme de tableau excel (onglet accueil/Style/mettre sous forme de tableau) et de travailler sur le tableau (pour plus d'infos sur la manipulation des tableaux en VBA voir ici
Ce lien n'existe plus
4) nettoyer le code de l'enregistreur de macros :
Code:
.HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
devient
Code:
.HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
(seulement si ce n'était pas le cas avant, sinon on peut aussi effacer cette ligne)
 
Re : Problème de ressource

En appliquant vos méthodes et surtout en restreignant les sélections cela fonctionne beaucoup mieux.
Par contre que voulez vous dire par "1) toujours éviter de sélectionner les objets en VBA pour travailler dessus"?

Merci
 
Re : Problème de ressource

Bonjour,

Il est inutile d'écrire
Code:
Sheets("ICC extract").Select
    Cells.Select
    With Selection ...


Si vous mettez vos données sous forme de tableau excel (disons tableau1, nom donné par défaut par excel mais que vous pouvez changer), vous travaillez directement sur les données de ce tableau en l'appelant dans le code VBA sans le sélectionner (il n'est donc pas mis en surbrillance dans la feuille). C'est particulièrement important quand on se balade de feuille en feuille en travaillant sur différentes cellules, lignes, colonnes...

With sheets("ICC extract").range("tableau1[#DATA]")
.HorizontalAlignment = xlLeft
end with

plus d'infos sur la façon de travailler avec les plages de données ici
Ce lien n'existe plus
et aussi
Ce lien n'existe plus
 
Re : Problème de ressource

Question subsidiaire: comment sortir d'une macro (exit et quit ne fonctionne pas)?

bonjour

pour forcer l'arrêt sur une macro qui plante ? Ou bien pour sortir d'une macro suivant une condition
pour le 1° : la touche echap
pour le 2° donnez un exemple de ce que vous voulez faire. Dans certains cas cela peut être fait avec l'instruction exit sub mais mieux vaut éviter et prévoir l'écriture de la macro pour qu'elle aille toujours jusqu'au bout (end sub)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
11
Affichages
780
Réponses
3
Affichages
672
  • Résolu(e)
XL pour MAC Target
Réponses
9
Affichages
2 K
Retour