Lenteur de suppression
Résolu
Fahora
Messages postés
814
Date d'inscription
Statut
Membre
Dernière intervention
-
Fahora Messages postés 814 Date d'inscription Statut Membre Dernière intervention -
Fahora Messages postés 814 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaite supprimer des lignes d'un tableau selon si une cellule est vide ou non.
Cela fonctionne très bien, je pense avoir réussi. Le seul problème est la lenteur de l’exécution de la macro.
Je vous joins le bout de code concernant la partie suppression des lignes.
Je sais que je pourrais inverser le pas et partir du bas pour remonter dans les lignes afin d'en "sauter" aucune, mais est ce que ça accélérerait vraiment le programme ?
Je suis preneur de tout conseil.
Merci d'avance !
Cordialement,
Je souhaite supprimer des lignes d'un tableau selon si une cellule est vide ou non.
Cela fonctionne très bien, je pense avoir réussi. Le seul problème est la lenteur de l’exécution de la macro.
Je vous joins le bout de code concernant la partie suppression des lignes.
NbLig = Cells.SpecialCells(xlCellTypeLastCell).Row
For i = 2 To NbLig
If Not (IsEmpty(Cells(i, 22))) Then
Cells(i, 1).EntireRow.Delete
i = i - 1
End If
Next i
Je sais que je pourrais inverser le pas et partir du bas pour remonter dans les lignes afin d'en "sauter" aucune, mais est ce que ça accélérerait vraiment le programme ?
Je suis preneur de tout conseil.
Merci d'avance !
Cordialement,
A voir également:
- Lenteur de suppression
- Lenteur pc - Guide
- Forcer suppression fichier - Guide
- Suppression compte gmail - Guide
- Suppression page word - Guide
- Suppression pub youtube - Accueil - Streaming
5 réponses
Bonjour a vous deux,
pour eviter l'interruption par les evenements Excel
et
figeage/defigeage ecran pour gain de temps
pour eviter l'interruption par les evenements Excel
Application.EnableEvents = False 'stop Application.EnableEvents = True 'start
et
figeage/defigeage ecran pour gain de temps
Application.ScreenUpdating = False Application.ScreenUpdating = True
Bonjour,
une méthode beaucoup plus rapide : filtrer, supprimer les lignes filtrées.
Récupère le plus gros à l'enregistreur de macro et fait les finitions à la main de façon que ça englobe la taille maxi de ta base.
Si pb tu dis...
Sinon dans une boucle de suppression il faut absolument faire de bas en haut. Non pas pour le temps mais pour que ce soit correct tout simplement.
eric
une méthode beaucoup plus rapide : filtrer, supprimer les lignes filtrées.
Récupère le plus gros à l'enregistreur de macro et fait les finitions à la main de façon que ça englobe la taille maxi de ta base.
Si pb tu dis...
Sinon dans une boucle de suppression il faut absolument faire de bas en haut. Non pas pour le temps mais pour que ce soit correct tout simplement.
eric
Bonjour,
Je ne comprends pas trop en quoi le "correct" de bas en haut mais bon.
Tu contrôles et supprimes la ligne 5, toutes remontent et la 6 devient la 5.
Tu fais Next ligne, tu passes donc au contrôle de la 6.
Seulement la 6 est l'ex 7 et tu n'as pas testé l'ex 6 devenue 5.
Compris ou pas très clair ?
eric
Je ne comprends pas trop en quoi le "correct" de bas en haut mais bon.
Tu contrôles et supprimes la ligne 5, toutes remontent et la 6 devient la 5.
Tu fais Next ligne, tu passes donc au contrôle de la 6.
Seulement la 6 est l'ex 7 et tu n'as pas testé l'ex 6 devenue 5.
Compris ou pas très clair ?
eric
exemple suppression par filtre : https://www.cjoint.com/c/FGvjYxtZ14Q
PS: après avoir jeté un oeil à ton fichier si c'est toujours lent tu pourrais ajouter au début en plus de la désactivation des événements :
et restaurer après
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
PS: après avoir jeté un oeil à ton fichier si c'est toujours lent tu pourrais ajouter au début en plus de la désactivation des événements :
With Application .ScreenUpdating = False .Calculation = xlCalculationManual End With With Sheets("Feuil1") ' pour chaque feuille ' >=2007: calcul formats conditionnels .EnableFormatConditionsCalculation = False End With
et restaurer après
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Re,
code eriiic modifie pour cellules non vide
code eriiic modifie pour cellules non vide
Sub supp() 'Range("$A$1").AutoFilter Field:=1, Criteria1:="=" 'cellules vide Range("$A$1").AutoFilter Field:=1, Criteria1:="<>" 'cellules non vide On Error Resume Next Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase").Rows.Count - 1) _ .SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp On Error GoTo 0 Range("$A$1").AutoFilter Field:=1 End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
tu compte déjà 3000 ligne et moi 869 dur
voila un model
A+
Maurice
tu compte déjà 3000 ligne et moi 869 dur
voila un model
Sub Test() NbLig = Range("A" & Rows.Count).End(xlUp).Row For I = NbLig To 2 Step -1 If Not (IsEmpty(Cells(I, 18))) Then Rows(I).Delete End If Next I End Sub
A+
Maurice
Je n'ai pas beaucoup de lignes , mais j'ai quelques onglets pour lequel cette maccro est utilisée. En tout et pour tout , j'ai environ 900 lignes et la maccro met 30 minutes...
Combien de temps prend t'elle pour toi , dans un tel échantillon ?
Dans ma colonne (22), je n'ai pas de formule ou quoi ce soit... Juste une chaine de caractère...
Dans le doute , est ce que le fait qu'il y ait une formule pourrait ralentir le process ?
Je pense avoir compris ...
J'ai une fonction qui vérifie à chaque changement du classeur ...
As tu une idée pour suspendre cette routine pendant la suppression des lignes ?
C'est ce que j'utilise moi quand je suis dans ton cas