Je suis à la recherche de la solution la plus rapide possible pour
supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé
plusieurs techniques qui fonctionnent très bien mais mon fichier
s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5
secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste
déroulante. Je clique sur un bouton et la macro va effacer dans une
autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Supprimer revient à effacer et trier pour regrouper les lignes pleines ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un tri pour regrouper les lignes restantes :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Clear End If Next i End With
Supprimer revient à effacer et trier pour regrouper les lignes pleines
ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un
tri pour regrouper les lignes restantes :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Clear
End If
Next i
End With
Supprimer revient à effacer et trier pour regrouper les lignes pleines ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un tri pour regrouper les lignes restantes :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Clear End If Next i End With
Bonjour et merci pour t'intéresser à mon problème,
Effectivement cela gagne du temps => 18 secondes pour l'ancienne macro vs 4,8 secondes pour celle-ci dans un fichier de 4000 lignes. Cependant, j'ai fait un test en doublant le fichier et le temps double aussi : 9,6 secondes pour 8000 lignes.
Y-a-t-il d'autres pistes à explorer ?
Julie
FFO a écrit :
Salut Julie
Supprimer revient à effacer et trier pour regrouper les lignes pleines ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un tri pour regrouper les lignes restantes :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Clear End If Next i End With
Bonjour et merci pour t'intéresser à mon problème,
Effectivement cela gagne du temps => 18 secondes pour l'ancienne macro
vs 4,8 secondes pour celle-ci dans un fichier de 4000 lignes.
Cependant, j'ai fait un test en doublant le fichier et le temps double
aussi : 9,6 secondes pour 8000 lignes.
Y-a-t-il d'autres pistes à explorer ?
Julie
FFO a écrit :
Salut Julie
Supprimer revient à effacer et trier pour regrouper les lignes pleines
ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un
tri pour regrouper les lignes restantes :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Clear
End If
Next i
End With
Bonjour et merci pour t'intéresser à mon problème,
Effectivement cela gagne du temps => 18 secondes pour l'ancienne macro vs 4,8 secondes pour celle-ci dans un fichier de 4000 lignes. Cependant, j'ai fait un test en doublant le fichier et le temps double aussi : 9,6 secondes pour 8000 lignes.
Y-a-t-il d'autres pistes à explorer ?
Julie
FFO a écrit :
Salut Julie
Supprimer revient à effacer et trier pour regrouper les lignes pleines ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un tri pour regrouper les lignes restantes :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Clear End If Next i End With
exécuter un trie sur la colonne E et exécuter ce code
début = Application.Match(Range("B11"), Range("E:E"), 0) fin = Application.Match(Range("B11"), Range("E:E"), 1) Rows(début & ":" & fin).Delete
isabelle
JulieH a écrit :
Bonjour et merci pour t'intéresser à mon problème,
Effectivement cela gagne du temps => 18 secondes pour l'ancienne macro vs 4,8 secondes pour celle-ci dans un fichier de 4000 lignes. Cependant, j'ai fait un test en doublant le fichier et le temps double aussi : 9,6 secondes pour 8000 lignes.
Y-a-t-il d'autres pistes à explorer ?
Julie
FFO a écrit :
Salut Julie
Supprimer revient à effacer et trier pour regrouper les lignes pleines ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un tri pour regrouper les lignes restantes :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Clear End If Next i End With
exécuter un trie sur la colonne E et
exécuter ce code
début = Application.Match(Range("B11"), Range("E:E"), 0)
fin = Application.Match(Range("B11"), Range("E:E"), 1)
Rows(début & ":" & fin).Delete
isabelle
JulieH a écrit :
Bonjour et merci pour t'intéresser à mon problème,
Effectivement cela gagne du temps => 18 secondes pour l'ancienne
macro vs 4,8 secondes pour celle-ci dans un fichier de 4000 lignes.
Cependant, j'ai fait un test en doublant le fichier et le temps
double aussi : 9,6 secondes pour 8000 lignes.
Y-a-t-il d'autres pistes à explorer ?
Julie
FFO a écrit :
Salut Julie
Supprimer revient à effacer et trier pour regrouper les lignes pleines
ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un
tri pour regrouper les lignes restantes :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Clear
End If
Next i
End With
exécuter un trie sur la colonne E et exécuter ce code
début = Application.Match(Range("B11"), Range("E:E"), 0) fin = Application.Match(Range("B11"), Range("E:E"), 1) Rows(début & ":" & fin).Delete
isabelle
JulieH a écrit :
Bonjour et merci pour t'intéresser à mon problème,
Effectivement cela gagne du temps => 18 secondes pour l'ancienne macro vs 4,8 secondes pour celle-ci dans un fichier de 4000 lignes. Cependant, j'ai fait un test en doublant le fichier et le temps double aussi : 9,6 secondes pour 8000 lignes.
Y-a-t-il d'autres pistes à explorer ?
Julie
FFO a écrit :
Salut Julie
Supprimer revient à effacer et trier pour regrouper les lignes pleines ensembles
Au lieu donc de supprimer tu pourrais vider tes lignes et opérer un tri pour regrouper les lignes restantes :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Clear End If Next i End With
Je suis étonné de ton délais pour 4000 lignes car pour un fichier de + de 12000 lignes chez moi quelque secondes suffisent Si ton fichier ne contient pas de données confidentielles il serait interessant que tu me le transmettes pour que je le teste chez moi (http://www.cijoint.fr/index.php) Il y a peut être autre chose à l'origine de ce temps de traitement qu'il faudrait que j'étudie Quoi qu'il en soit je nai pas d'autres pistes pour plus de rapidité Vois ce que tu veux faire Tiens moi informé !!!!!!
Rebonjour à toi
Je suis étonné de ton délais pour 4000 lignes car pour un fichier de +
de 12000 lignes chez moi quelque secondes suffisent
Si ton fichier ne contient pas de données confidentielles il serait
interessant que tu me le transmettes pour que je le teste chez moi
(http://www.cijoint.fr/index.php)
Il y a peut être autre chose à l'origine de ce temps de traitement
qu'il faudrait que j'étudie
Quoi qu'il en soit je nai pas d'autres pistes pour plus de rapidité
Vois ce que tu veux faire
Tiens moi informé !!!!!!
Je suis étonné de ton délais pour 4000 lignes car pour un fichier de + de 12000 lignes chez moi quelque secondes suffisent Si ton fichier ne contient pas de données confidentielles il serait interessant que tu me le transmettes pour que je le teste chez moi (http://www.cijoint.fr/index.php) Il y a peut être autre chose à l'origine de ce temps de traitement qu'il faudrait que j'étudie Quoi qu'il en soit je nai pas d'autres pistes pour plus de rapidité Vois ce que tu veux faire Tiens moi informé !!!!!!
michdenis
Bonjour JulieH,
Voici un exemple type avec un filtre automatique
Mon critère est dans cette exemple : <>2 '---------------------------------- Sub test()
Dim Rg As Range, Critère As String Critère = 2 ' à définir
'Tu dois définir le nom de la feuille et la plage de cellule concernée With Worksheets("Feuil1") Set Rg = Range("A1:A" & Range("A65536").End(xlUp).Row) End With With Rg .AutoFilter field:=1, Criteria1:="<>" & Critère With .Offset(1).Resize(.Rows.Count - 1) _ .SpecialCells(xlCellTypeVisible).EntireRow .Delete End With .AutoFilter End With End Sub '----------------------------------
"JulieH" a écrit dans le message de groupe de discussion : # Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Bonjour JulieH,
Voici un exemple type avec un filtre automatique
Mon critère est dans cette exemple : <>2
'----------------------------------
Sub test()
Dim Rg As Range, Critère As String
Critère = 2 ' à définir
'Tu dois définir le nom de la feuille et la plage de cellule concernée
With Worksheets("Feuil1")
Set Rg = Range("A1:A" & Range("A65536").End(xlUp).Row)
End With
With Rg
.AutoFilter field:=1, Criteria1:="<>" & Critère
With .Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow
.Delete
End With
.AutoFilter
End With
End Sub
'----------------------------------
"JulieH" <julieh@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : #0SbK3IXKHA.3720@TK2MSFTNGP02.phx.gbl...
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour
supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé
plusieurs techniques qui fonctionnent très bien mais mon fichier
s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5
secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste
déroulante. Je clique sur un bouton et la macro va effacer dans une
autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Mon critère est dans cette exemple : <>2 '---------------------------------- Sub test()
Dim Rg As Range, Critère As String Critère = 2 ' à définir
'Tu dois définir le nom de la feuille et la plage de cellule concernée With Worksheets("Feuil1") Set Rg = Range("A1:A" & Range("A65536").End(xlUp).Row) End With With Rg .AutoFilter field:=1, Criteria1:="<>" & Critère With .Offset(1).Resize(.Rows.Count - 1) _ .SpecialCells(xlCellTypeVisible).EntireRow .Delete End With .AutoFilter End With End Sub '----------------------------------
"JulieH" a écrit dans le message de groupe de discussion : # Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Misange
Bonjour
Si tu as dans ta feuille des données faisant référence aux lignes supprimées ou à des lignes conservées mais qui du fait de la suppression changent de référence cela peut amener excel à recalculer de nombreuses formules d'où des temps de traitement très longs (surtout si tu as des sommeprod par exemple. Dans ce cas là ajoute au début de ta macro With Application ModeCalcul = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False End With
et rétablit à lafin : Application.Calculation = ModeCalcul
Misange migrateuse http://www.excelabo.net : Participez à un travail collaboratif sur excel !
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Bonjour
Si tu as dans ta feuille des données faisant référence aux lignes
supprimées ou à des lignes conservées mais qui du fait de la suppression
changent de référence cela peut amener excel à recalculer de nombreuses
formules d'où des temps de traitement très longs (surtout si tu as des
sommeprod par exemple.
Dans ce cas là ajoute au début de ta macro
With Application
ModeCalcul = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
et rétablit à lafin :
Application.Calculation = ModeCalcul
Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour
supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé
plusieurs techniques qui fonctionnent très bien mais mon fichier
s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5
secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste
déroulante. Je clique sur un bouton et la macro va effacer dans une
autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Si tu as dans ta feuille des données faisant référence aux lignes supprimées ou à des lignes conservées mais qui du fait de la suppression changent de référence cela peut amener excel à recalculer de nombreuses formules d'où des temps de traitement très longs (surtout si tu as des sommeprod par exemple. Dans ce cas là ajoute au début de ta macro With Application ModeCalcul = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False End With
et rétablit à lafin : Application.Calculation = ModeCalcul
Misange migrateuse http://www.excelabo.net : Participez à un travail collaboratif sur excel !
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Corto
Bonjour JulieH, Une solution possible est de supprimer le tout en une seule fois
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value Set PlageASupprimer = Nothing With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then If PlageASupprimer is Nothing Then Set PlageASupprimer = .Rows(i) Else Set PlageASupprimer = Union(PlageASupprimer, .Rows(i)) End If End If Next i If Not PlageASupprimer Is Nothing Then PlageASupprimer.Delete End With
Corto
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pou r supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fich ier s'alourdit (environ 30 000 lignes à terme) et cela devient très lon g (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Bonjour JulieH,
Une solution possible est de supprimer le tout en une seule fois
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
Set PlageASupprimer = Nothing
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
If PlageASupprimer is Nothing Then
Set PlageASupprimer = .Rows(i)
Else
Set PlageASupprimer = Union(PlageASupprimer, .Rows(i))
End If
End If
Next i
If Not PlageASupprimer Is Nothing Then PlageASupprimer.Delete
End With
Corto
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pou r
supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai
testé plusieurs techniques qui fonctionnent très bien mais mon fich ier
s'alourdit (environ 30 000 lignes à terme) et cela devient très lon g
(5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste
déroulante. Je clique sur un bouton et la macro va effacer dans une
autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Bonjour JulieH, Une solution possible est de supprimer le tout en une seule fois
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value Set PlageASupprimer = Nothing With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then If PlageASupprimer is Nothing Then Set PlageASupprimer = .Rows(i) Else Set PlageASupprimer = Union(PlageASupprimer, .Rows(i)) End If End If Next i If Not PlageASupprimer Is Nothing Then PlageASupprimer.Delete End With
Corto
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pou r supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fich ier s'alourdit (environ 30 000 lignes à terme) et cela devient très lon g (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Alain
Bonjour Julie,
Excel est en mode de calcul automatique par défaut alors il va refaire les calculs entre chaque suppression de ligne, passer en mode manuel avant les suppressions devrait accélérer considérablement le processus et tu remet ensuite le mode automatique pour que les calculs se mettent à jour...
Application.Calculation=xlCalculationManual
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Application.Calculation=xlCalculationAutomatic
Alain
"JulieH" wrote in message news:#
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Bonjour Julie,
Excel est en mode de calcul automatique par défaut alors il va refaire les
calculs entre chaque suppression de ligne, passer en mode manuel avant les
suppressions devrait accélérer considérablement le processus et tu remet
ensuite le mode automatique pour que les calculs se mettent à jour...
Application.Calculation=xlCalculationManual
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Application.Calculation=xlCalculationAutomatic
Alain
"JulieH" <julieh@discussions.microsoft.com> wrote in message
news:#0SbK3IXKHA.3720@TK2MSFTNGP02.phx.gbl...
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour
supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé
plusieurs techniques qui fonctionnent très bien mais mon fichier
s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5
secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste
déroulante. Je clique sur un bouton et la macro va effacer dans une autre
feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Excel est en mode de calcul automatique par défaut alors il va refaire les calculs entre chaque suppression de ligne, passer en mode manuel avant les suppressions devrait accélérer considérablement le processus et tu remet ensuite le mode automatique pour que les calculs se mettent à jour...
Application.Calculation=xlCalculationManual
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Application.Calculation=xlCalculationAutomatic
Alain
"JulieH" wrote in message news:#
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
JulieH
Bonjour à toutes et tous,
Il y a une avalanche de réponses et je vais mettre un peu de temps à tout digérer. Cependant, je pense qu'avec toutes ces solutions, je vais bien en trouver une très rapide. Pour répondre aux différentes questions : - Il n'y a aucune formule dans mon fichier. - La première solution proposée par FFO mettait 4,6 s pour 4172 lignes - 9,6 pour 8344, donc assez logique.
Merci pour votre aide
Julie
Corto a écrit :
Bonjour JulieH, Une solution possible est de supprimer le tout en une seule fois
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value Set PlageASupprimer = Nothing With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then If PlageASupprimer is Nothing Then Set PlageASupprimer = .Rows(i) Else Set PlageASupprimer = Union(PlageASupprimer, .Rows(i)) End If End If Next i If Not PlageASupprimer Is Nothing Then PlageASupprimer.Delete End With
Corto
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Quelqu'un a-t-il quelque chose de plus rapide ?
Merci d'avance.
Julie
Bonjour à toutes et tous,
Il y a une avalanche de réponses et je vais mettre un peu de temps à
tout digérer. Cependant, je pense qu'avec toutes ces solutions, je vais
bien en trouver une très rapide.
Pour répondre aux différentes questions :
- Il n'y a aucune formule dans mon fichier.
- La première solution proposée par FFO mettait 4,6 s pour 4172
lignes - 9,6 pour 8344, donc assez logique.
Merci pour votre aide
Julie
Corto a écrit :
Bonjour JulieH,
Une solution possible est de supprimer le tout en une seule fois
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
Set PlageASupprimer = Nothing
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
If PlageASupprimer is Nothing Then
Set PlageASupprimer = .Rows(i)
Else
Set PlageASupprimer = Union(PlageASupprimer, .Rows(i))
End If
End If
Next i
If Not PlageASupprimer Is Nothing Then PlageASupprimer.Delete
End With
Corto
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour
supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai
testé plusieurs techniques qui fonctionnent très bien mais mon fichier
s'alourdit (environ 30 000 lignes à terme) et cela devient très long
(5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste
déroulante. Je clique sur un bouton et la macro va effacer dans une
autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Il y a une avalanche de réponses et je vais mettre un peu de temps à tout digérer. Cependant, je pense qu'avec toutes ces solutions, je vais bien en trouver une très rapide. Pour répondre aux différentes questions : - Il n'y a aucune formule dans mon fichier. - La première solution proposée par FFO mettait 4,6 s pour 4172 lignes - 9,6 pour 8344, donc assez logique.
Merci pour votre aide
Julie
Corto a écrit :
Bonjour JulieH, Une solution possible est de supprimer le tout en une seule fois
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value Set PlageASupprimer = Nothing With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then If PlageASupprimer is Nothing Then Set PlageASupprimer = .Rows(i) Else Set PlageASupprimer = Union(PlageASupprimer, .Rows(i)) End If End If Next i If Not PlageASupprimer Is Nothing Then PlageASupprimer.Delete End With
Corto
JulieH a écrit :
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide possible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai testé plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans une liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
Je suis à la recherche de la solution la plus rapide po ssible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai test é plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans un e liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With
On 3 nov, 14:54, JulieH <jul...@discussions.microsoft.com> wrote:
Bonjour à toutes et tous,
Je suis à la recherche de la solution la plus rapide po ssible pour
supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai test é
plusieurs techniques qui fonctionnent très bien mais mon fichier
s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5
secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans un e liste
déroulante. Je clique sur un bouton et la macro va effacer dans une
autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate
Dim i As Long, Valeur As String
Valeur = Sheets("Accueil").Range("B11").Value
With Sheets("Données")
For i = .Range("E65000").End(xlUp).Row To 6 Step -1
If .Cells(i, "E") <> Valeur Then
.Rows(i).Delete
End If
Next i
End With
Je suis à la recherche de la solution la plus rapide po ssible pour supprimer des lignes (Excel 2003). En effet, grâce au forum, j'ai test é plusieurs techniques qui fonctionnent très bien mais mon fichier s'alourdit (environ 30 000 lignes à terme) et cela devient très long (5 secondes environ pour 1500 lignes).
Dans une feuille "Accueil", je choisis une valeur dans un e liste déroulante. Je clique sur un bouton et la macro va effacer dans une autre feuille toutes les données différentes de ma valeur.
Voici la macro que j'utilise actuellement :
Sheets("Données").Activate Dim i As Long, Valeur As String Valeur = Sheets("Accueil").Range("B11").Value With Sheets("Données") For i = .Range("E65000").End(xlUp).Row To 6 Step -1 If .Cells(i, "E") <> Valeur Then .Rows(i).Delete End If Next i End With