VB Excel2007 Ma boucle met 15 secondes - peut-on réduire le temp
Fermé
Mouftie
Messages postés
215
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
6 septembre 2020
-
Modifié par Mouftie le 16/02/2013 à 16:44
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 - 18 févr. 2013 à 16:18
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 - 18 févr. 2013 à 16:18
A voir également:
- VB Excel2007 Ma boucle met 15 secondes - peut-on réduire le temp
- Comment réduire la taille d'un fichier - Guide
- Vb - Télécharger - Langages
- Vb cable - Télécharger - Audio & Musique
- Reduire taille photo - Guide
- Core temp - Télécharger - Divers Utilitaires
6 réponses
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
16 févr. 2013 à 21:40
16 févr. 2013 à 21:40
Bonjour,
2,5 secondes
A+
2,5 secondes
Sub PfsDai() 'Supprime les lignes dont la colonne C ne contient pas une des infos ci-après Dim z As String Dim i As Integer Application.ScreenUpdating = False For i = Range("B65536").End(xlUp).Row To 2 Step -1 z = Cells(i, 3).Value If Not z Like "*DAI" Or z Like "*PFS" Then Rows(i).Delete Next End Sub
A+
Mouftie
Messages postés
215
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
6 septembre 2020
15
17 févr. 2013 à 10:57
17 févr. 2013 à 10:57
Bonjour Lermite222,
Merci;
Effectivement ça va beaucoup plus vite, juste un petit truc que je ne comprends pas, les données qui se terminent par PFS sont aussi supprimées ?
Tu vois pourquoi ?
Merci;
Effectivement ça va beaucoup plus vite, juste un petit truc que je ne comprends pas, les données qui se terminent par PFS sont aussi supprimées ?
Tu vois pourquoi ?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
17 févr. 2013 à 11:40
17 févr. 2013 à 11:40
Bonjour à tous,
en 0.6s :
eric
en 0.6s :
Sub supplig() Dim t As Single, derlig As Long Application.ScreenUpdating = False t = Timer derlig = Cells(Rows.Count, "C").End(xlUp).Row Range("C2").AutoFilter ActiveSheet.Range("$B$2:$I$" & derlig).AutoFilter Field:=2, Criteria1:="<>*PFS", Operator:=xlAnd, Criteria2:="<>*DAI" Rows("3:" & derlig).Delete Shift:=xlUp Selection.AutoFilter Application.ScreenUpdating = True MsgBox Timer - t End Sub
eric
Mouftie
Messages postés
215
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
6 septembre 2020
15
17 févr. 2013 à 14:02
17 févr. 2013 à 14:02
Bonjour Eric,
effectivement tu sors vainqueur !
je te remercie pour le timer, je le reprendrai...
je me suis même amusée à refaire ma macro avec et le timer indique exactement 16,47 secondes (moi j'avais compté ça à la louche...)
là c'est scientifique ;>
Pus sérieusement, c'est la propriété ScreenUpdating qui est importante
je suis donc allée voir dans l'aide et Microsoft dit : "N'oubliez pas de redéfinir sur True la propriété ScreenUpdating à la fin de l'exécution de la macro."
Or ni toi ni lermite222 ne le faite. je suppose qu'il faut la 'fermer' si la macro n'est pas fini et que de toute façon à la fin, la propriété se remet toute seule sur true ?
effectivement tu sors vainqueur !
je te remercie pour le timer, je le reprendrai...
je me suis même amusée à refaire ma macro avec et le timer indique exactement 16,47 secondes (moi j'avais compté ça à la louche...)
là c'est scientifique ;>
Pus sérieusement, c'est la propriété ScreenUpdating qui est importante
je suis donc allée voir dans l'aide et Microsoft dit : "N'oubliez pas de redéfinir sur True la propriété ScreenUpdating à la fin de l'exécution de la macro."
Or ni toi ni lermite222 ne le faite. je suppose qu'il faut la 'fermer' si la macro n'est pas fini et que de toute façon à la fin, la propriété se remet toute seule sur true ?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
17 févr. 2013 à 15:05
17 févr. 2013 à 15:05
"N'oubliez pas de redéfinir sur True la propriété ScreenUpdating à la fin de l'exécution de la macro.
Or ni toi ni lermite222 ne le faite."
Si je l'avais mis, mais vu que mon code se limite à une seule suppression ça ne joue que pour 0.03 s...
De toute façon il vaut mieux prendre pour habitude de le mettre dès que tu as qcq centaines de lignes à modifier.
Et, comme tu dis, ça se rétablit à la fin des macros si tu oublies de rétablir.
eric
Or ni toi ni lermite222 ne le faite."
Si je l'avais mis, mais vu que mon code se limite à une seule suppression ça ne joue que pour 0.03 s...
De toute façon il vaut mieux prendre pour habitude de le mettre dès que tu as qcq centaines de lignes à modifier.
Et, comme tu dis, ça se rétablit à la fin des macros si tu oublies de rétablir.
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mouftie
Messages postés
215
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
6 septembre 2020
15
Modifié par Mouftie le 17/02/2013 à 15:16
Modifié par Mouftie le 17/02/2013 à 15:16
Désolée Eric, j'ai mal lu, toi tu as fermer la propriété...
quant au code de Lermite222, il tourne en 1.5 s il y a juste un petit pb de parenthèse, pour la prise en compte des 2 critères :
Merci à vous deux
quant au code de Lermite222, il tourne en 1.5 s il y a juste un petit pb de parenthèse, pour la prise en compte des 2 critères :
Sub PfsDai() 'Supprime les lignes dont la colonne C ne contient pas une des infos ci-après Dim z As String Dim i As Integer Dim t As Single Application.ScreenUpdating = False t = Timer For i = Range("B65536").End(xlUp).Row To 2 Step -1 z = Cells(i, 3).Value If Not (z Like "*DAI" Or z Like "*PFS") Then Rows(i).Delete Next Application.ScreenUpdating = True MsgBox Timer - t 'timer = 1.449 End Sub
Merci à vous deux
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
18 févr. 2013 à 14:34
18 févr. 2013 à 14:34
Re, pour info
Concernant Application.ScreenUpdating
Il faut remettre à true SI ONT NE QUITTE PAS LA MACRO, ce qui est le cas avec un MsgBox
Sinon, dés que le code est terminer, contrairement à ce qui est dit dans l'aide c'est remis à true automatiquement au sortir de la macro.
Essaye sans MsgBox et sans la ligne
Et tu verras que l'affichage se met à jour.
A+
Concernant Application.ScreenUpdating
Il faut remettre à true SI ONT NE QUITTE PAS LA MACRO, ce qui est le cas avec un MsgBox
Sinon, dés que le code est terminer, contrairement à ce qui est dit dans l'aide c'est remis à true automatiquement au sortir de la macro.
Essaye sans MsgBox et sans la ligne
Application.ScreenUpdating = True
Et tu verras que l'affichage se met à jour.
A+
Mouftie
Messages postés
215
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
6 septembre 2020
15
18 févr. 2013 à 16:18
18 févr. 2013 à 16:18
Bonjour Lermitte222,
Merci pour la précision, je regarde ça tout de suite ; surtout que j'ai plein de traitement de ce genre, donc j'ai mis des "Application.ScreenUpdating " un peu partout .
NB : je travaille avec des petites macros que je rassemble après ou que j'appelle les unes après les autres ; ça me rassure...
Merci pour la précision, je regarde ça tout de suite ; surtout que j'ai plein de traitement de ce genre, donc j'ai mis des "Application.ScreenUpdating " un peu partout .
NB : je travaille avec des petites macros que je rassemble après ou que j'appelle les unes après les autres ; ça me rassure...