VBA rapide ou non ???
Résolu
wire less
Messages postés
233
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai trouvé un script super pour supprimer toutes les apostrophes d'une page excel :
Mon problème est que pour ce même script, si je l'exécute dans une macro ... le script va mettre plusieurs minutes à s'exécuter.
Si j'interrompe l'exécution et que je la relance, l'exécution est quasi instantanée
Quelqu'un aurait-il une idée ??
j'ai trouvé un script super pour supprimer toutes les apostrophes d'une page excel :
Sub Apostrophe() For Each cell In ActiveSheet.UsedRange If cell.PrefixCharacter <> "" Then cell.Formula = cell.Formula End If End sub
Mon problème est que pour ce même script, si je l'exécute dans une macro ... le script va mettre plusieurs minutes à s'exécuter.
Si j'interrompe l'exécution et que je la relance, l'exécution est quasi instantanée
Quelqu'un aurait-il une idée ??
Private Sub CommandButton1_Click() Call programme_1 End Sub Sub programme_1 End sub Sub programme_2 End sub Sub programme_3 End sub Sub Apostrophe End sub
A voir également:
- VBA rapide ou non ???
- Acces rapide - Guide
- Copie rapide - Télécharger - Gestion de fichiers
- Telechargement rapide - Télécharger - Téléchargement & Transfert
- Desactiver demarrage rapide - Guide
- Incompatibilité de type vba ✓ - Forum Programmation
2 réponses
Bonjoiur,
C'est plus rapide la 2nde fois car ce qui est déjà fait n'est plus à faire.
Cette version sera plus rapide dans certains cas :
eric
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
C'est plus rapide la 2nde fois car ce qui est déjà fait n'est plus à faire.
Cette version sera plus rapide dans certains cas :
Sub Apostrophe() Dim cell As Range Application.ScreenUpdating = False For Each cell In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues) If cell.PrefixCharacter <> "" Then cell.Formula = cell.Formula End If Next cell End Sub
eric
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
Bonjour,
Mes meilleurs voeux pour 2015.
Pour compléter la réponse d'Eriiic (salutations, comment va? je te sens un peu tendu en ce moment, non?), VBA n'est pas rapide. Ca c'est un fait acquis, tout le monde le sait.
Il existe néanmoins des "astuces" pour accélérer l'exécution d'une fonction.
La première Eriiic te l'a donnée : désactiver le rafraichissement de l'écran :
Une deuxième piste, également évoquée par Eriiic, consiste à ne pas agir directement sur les cellules (Ecrire dans une cellule est très gourmand). Il te faut à ce moment connaitre un minimum de choses sur les variables tableaux.
Le principe :
- stocker les données de ta feuille dans une variable tableau,
- modifier les données dans cette variable,
- restituer les données dans la feuille.
De plus, tu dis : bien que je ne sois qu'au début de ma macro et que je dois encore implémenter des fonction
Je te recommande donc fortement d'aller te renseigner sur ce type de variable. Si tu as d'autres traitements à réaliser, pour accélérer la procédure, il ne faut pas boucler 15 fois sur les données pour faire 15 traitements, mais boucler une fois et appliquer les 15 traitements avant restitution...
Bonne continuation.
🎼 Cordialement,
Franck 🎶
Mes meilleurs voeux pour 2015.
Pour compléter la réponse d'Eriiic (salutations, comment va? je te sens un peu tendu en ce moment, non?), VBA n'est pas rapide. Ca c'est un fait acquis, tout le monde le sait.
Il existe néanmoins des "astuces" pour accélérer l'exécution d'une fonction.
La première Eriiic te l'a donnée : désactiver le rafraichissement de l'écran :
Application.ScreenUpdating = False
Une deuxième piste, également évoquée par Eriiic, consiste à ne pas agir directement sur les cellules (Ecrire dans une cellule est très gourmand). Il te faut à ce moment connaitre un minimum de choses sur les variables tableaux.
Le principe :
- stocker les données de ta feuille dans une variable tableau,
- modifier les données dans cette variable,
- restituer les données dans la feuille.
De plus, tu dis : bien que je ne sois qu'au début de ma macro et que je dois encore implémenter des fonction
Je te recommande donc fortement d'aller te renseigner sur ce type de variable. Si tu as d'autres traitements à réaliser, pour accélérer la procédure, il ne faut pas boucler 15 fois sur les données pour faire 15 traitements, mais boucler une fois et appliquer les 15 traitements avant restitution...
Bonne continuation.
🎼 Cordialement,
Franck 🎶
"C'est plus rapide la 2nde fois car ce qui est déjà fait n'est plus à faire. "
:-/ Malheureusement c'est pas si simple !
Lorsque j'exécute la macro depuis mon bouton de commande, je voie en temps réel les lignes de mon tableau Excel se mettre à jour.
J'appuie sur "Escape" , je vais dans le déboguer VBA et je relance le scripte ... et VRAOUM ... l'exécution se fini quasiment instantanément ! (au lieu d'une minute si je ne fait rien)
Et as-tu des formules utilisant les cellules appelées à être modifiées ?
C'est effectivement plus rapide. Mais je n'arrive pas à comprendre pourquoi le fait d'interrompre le script puis de le relancer le rend plus rapide !!
Bon, sinon, 1 minute c'est pas la mort (bien que je ne sois qu'au début de ma macro et que je dois encore implémenter des fonction)
thx
Ecrire dans une cellule est très gourmand et là ce n'est fait que si c'est nécessaire.
Maintenant tu peux encore réduire en restreignant à la plage où tu es susceptible de rencontrer ces '.
Sinon ne répond aux questions que si tu veux...
eric