Microsoft 365 Ajout ou suppression de ligne(s) très très très long

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous :)

Dans l'une de mes "Usines à gaz", j'ai un souci d'ajouts et de suppressions de lignes qui sont très très longs, en moyenne 2 minutes et ++.
Plus curieux encore, ça prend le même temps pour les feuilles sans code VBA
Je n'arrive pas à trouver pourquoi c'est si long Grrrr !

Malheureusement, je ne peux pas joindre le fichier à problème car il est très lourd et contient mes données confidentielles.
(Mais si c'est indispensable, je prendrai le temps de l'alléger et de supprimer les données confidentielles).

Voici les codes d'ajouts/suppressions :
VB:
Sub ajoute_ligne()
Dim t#
t = Now
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    ActiveCell.EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Exécution en " & Mid(Format(Now - t, "hh:mm:ss"), 4)
'MsgBox "Exécution en " & Minute(t) & " minute(s) et " & Second(t) & " seconde(s)"
End Sub
Sub suppr_ligne()
Dim t#
t = Now
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    ActiveCell.EntireRow.Delete Shift:=xlUp
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Exécution en " & Mid(Format(Now - t, "hh:mm:ss"), 4)
'MsgBox "Exécution en " & Minute(t) & " minute(s) et " & Second(t) & " seconde(s)"
End Sub
Dans le fichier test joint, c'est instantané et ...
Dans mon "Usine à gaz", en moyenne 2 minutes et ++. Plus curieux encore, ça prend le même temps pour les feuilles sans code VBA
Auriez-vous des pistes de recherches ?
Un grand merci à tous...
:)
 

Pièces jointes

  • ligne ajout suppr.xlsm
    19.8 KB · Affichages: 5
Dernière édition:
Solution
Bonjour Lionel, le forum,

Sélectionne toutes les cellules et menu Accueil => Effacer => Effacer les formats.

Pour une feuille et pour toutes ensuite si nécessaire.

L'ajout et suppression sont-ils devenus normaux ?

Si oui remets les formats ensuite.

A+

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Usine à Gaz,
N'auriez vous pas, comme il y a quelques temps, des centaines de mises en formes, de MFC, de copier coller qui trainent, ce qui expliquerait un ralentissement. Si oui, faites le nettoyage comme précédemment.
Ensuite votre feuille de travail contient combien de lignes ? S'il y en a 100000, alors ça va ramer. :)
 

Phil69970

XLDnaute Barbatruc
Bonjour Lionel
Edit Bonjour Sylvain

Dans le fichier test joint, c'est instantané et ...
C'est bien la preuve que cela ne vient pas du code mais de ton fichier

Sans LE fichier je te propose quelques pistes à voir : (Pas forcement dans l'ordre)
-Tu as peux être trop de MFC
-Ton fichier est vérolé
-Une ou des macros événementielles sont appeleés pendant l’exécution de ton code


@Phil69970
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bjr sylvanu :)
Merci du retour... NON pas de mfc (très très peu) mais c'est peut-être une piste :)

Bonjour Phil69970 :)
Merci également du retour... effectivement, ça provient bien de mon fichier de travail
Tu as peux être trop de MFC... NON pas de mfc (très très peu) mais c'est peut-être une piste :)
-Ton fichier est vérolé... NON pas vérolé, par ailleur, il fonctionne très bien dans toutes ses macros.
-Une ou des macros événementielles sont appelés pendant l’exécution de ton code... NON elles ne sont pas appelés car neutralisées avec :
- Application.EnableEvents = False
- Application.ScreenUpdating = False
- Application.Calculation = xlCalculationManual
à moins qu'elles soient appelées à l'insu de moi-même lol ça me rappelle qq chose :)
Merci à vous deux :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'opterais pour trop de copier collé intempestifs, et donc le même souci qu'il y a quelques temps.
Essayez de le "faire maigrir" en utilisant le même système de nettoyage.
 

Phil69970

XLDnaute Barbatruc
Re

Et combien de feuille ?

Test:
1) Fais une copie de ton fichier
2) Supprime une feuille enregistre et ferme le fichier regarde son poids
3) Reprends ton fichier et refais la manip sur une autre feuille etc.....

Le but est de repéré si tu as une feuille en particulier qui pose problème pour après agir sur celle ci .....

@Phil69970
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Idée : Copiez votre fichier pour essai, et sur chaque feuille passez cette macro qui nettoie ( inspiré du post donné au dessus ) Attention code modifié à l'instant.
VB:
Sub Nettoyage()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    DL = 2 + Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Row
    DC = 2 + Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Column
    Application.CutCopyMode = False
    Range(Cells(1, DC), Cells(1048576, 16384)).Select
    Selection.Delete Shift:=xlToLeft
    Rows(DL & ":1048576").Select
    Selection.Delete Shift:=xlUp
    [A1].Select
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re

Et combien de feuille ?

Test:
1) Fais une copie de ton fichier
2) Supprime une feuille enregistre et ferme le fichier regarde son poids
3) Reprends ton fichier et refais la manip sur une autre feuille etc.....

Le but est de repéré si tu as une feuille en particulier qui pose problème pour après agir sur celle ci .....

@Phil69970
j'ai 11 feuilles.
OK, je vais faire les tests dès que j'ai un moment
:)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Idée : Copiez votre fichier pour essai, et sur chaque feuille passez cette macro qui nettoie ( inspiré du post donné au dessus ) Attention code modifié à l'instant.
VB:
Sub Nettoyage()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    DL = 2 + Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Row
    DC = 2 + Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Column
    Application.CutCopyMode = False
    Range(Cells(1, DC), Cells(1048576, 16384)).Select
    Selection.Delete Shift:=xlToLeft
    Rows(DL & ":1048576").Select
    Selection.Delete Shift:=xlUp
    [A1].Select
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub
OK, je fais ça dès que je peux :)
 

Discussions similaires

Réponses
7
Affichages
327

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass