XL 2016 Delete shift:=xlUp trop long

sebastien450

XLDnaute Occasionnel
Bonjour,
Plus novice dans les macros je bloque pour optimiser le temps de traitement du code suivant
Sheets("Feuil1").Range(Cells(x, 1), Cells(x, 20)).Delete shift:=xlUp

Le delete est trop long - il est situé dans une boucle find qui est bien rapide testée seule.
Je précise que je cherche bien une autre écriture de ce code, peut être sans sélection de la ligne entière ?

A vos idées
 
Solution
Bon je comprends que ce qui vous embête c'est que la ListBox ne se met pas à jour.

Alors c'est bien simple, à la fin de la macro UserForm_Initialize ajoutez ces 2 instructions :
VB:
ListBox3.RowSource = ""
ListBox3.RowSource = "maliste"

job75

XLDnaute Barbatruc
Vous auriez pu nous dire dès le début que le tableau en Feuil1 était un tableau structuré.

Alors utilisez cette macro :
VB:
Sub Supprimer()
Dim d As Object, c As Range, a, i&
'---liste sans doublon---
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For Each c In Sheets("PLANNING").Range("D6:DVH6,D14:DVH14,D22:DVH22,D30:DVH30,D38:DVH38,D46:DVH46,D54:DVH54,D62:DVH62,D70:DVH70,D78:DVH78,D86:DVH86,D94:DVH94,D102:DVH102,D110:DVH110,D118:DVH118,D126:DVH126,D134:DVH134,D142:DVH142,D150:DVH150,D158:DVH158,D166:DVH166")
    d(c.Value) = ""
Next
For Each c In Sheets("PLANNING").Range("D174:DVH174,D182:DVH182,D190:DVH190,D198:DVH198,D206:DVH206,D214:DVH214")
d(c.Value) = ""
Next
'---suppressions en Feuil1---
With Sheets("Feuil1").ListObjects(1).Range
    a = .Columns(1).Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    For i = 1 To UBound(a)
        a(i, 1) = IIf(d.exists(a(i, 1)), "sup", 0)
    Next
    Application.ScreenUpdating = False
    .Columns(2).Insert xlToRight 'insère une colonne auxiliaire
    .Columns(2) = a
    .Sort .Columns(2), xlAscending, Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    .Columns(2).Offset(1).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete 'Offset(1) évite les en-têtes
    .Columns(2).Delete xlToLeft 'supprime la colonne auxiliaire
    With .Parent.UsedRange: End With 'actualise la barre de défilement verticale
End With
End Sub
J'ai ajouté une ligne pour actualiser la barre de défilement verticale.

Fichier (2), les lignes sont supprimées sans problème.
 

Pièces jointes

  • Supprimer(2).xlsm
    21.2 KB · Affichages: 3

sebastien450

XLDnaute Occasionnel
Merci,
En effet j'ai oublié pour le tableau.
D’où l'utilité de fournir un fichier.
Malheureusement l'actualisation de la barre de défilement ne marche pas.
Le fait que mon tableau est ensuite utilisé en row.source dans un userform doit y être pour quelque chose.
je te joint le fichier tu comprendra mieux.
J'ai desactivé les éléments inutiles
 

Pièces jointes

  • pourenvoi.xlsm
    371.5 KB · Affichages: 3

job75

XLDnaute Barbatruc
Ouvrir UserForm2 par double-clic n'importe où dans la feuille PLANNING n'est pas bien fameux.

Dans la macro BeforeDoubleClick mettre Application.EnableEvents = False encore moins !!!

Et mettre ma macro dans UserForm_Initialize est une idée curieuse mais bof.

Ceci dit mon code supprime 3 lignes dans Feuil1 et la barre de défilement s'actualise parfaitement.

En effet au départ la dernière ligne est la ligne 45, ensuite c'est la ligne 42.

Maintenant s'il y a d'autres problèmes ce n'est plus le sujet de ce fil, ouvrez une autre discussion, c'est ce que préconise la Charte du forum.
 

job75

XLDnaute Barbatruc
Bon je comprends que ce qui vous embête c'est que la ListBox ne se met pas à jour.

Alors c'est bien simple, à la fin de la macro UserForm_Initialize ajoutez ces 2 instructions :
VB:
ListBox3.RowSource = ""
ListBox3.RowSource = "maliste"
 

sebastien450

XLDnaute Occasionnel
Re-Bonjour,
Malheureusement je rencontre des soucis après plusieurs utilisations de la macro, elle plante car la colonne 2 ne s'efface pas, elle ne semble pas trier tout le temps.
J'ai également rencontré des erreurs où la mémoire est insuffisante.
Cela me le fait souvent après une sauvegarde du fichier en cours d'utilisation.
 

Discussions similaires

Statistiques des forums

Discussions
283 806
Messages
1 854 597
Membres
152 557
dernier inscrit
samados87
Haut Bas