Bonjour,
j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de valeur).Le problème est que ma base de données contient 16 000 lignes et le code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner une astuce pour réduire le temps de ma macro .
Voici mon code :
Dim b as Single
b =Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
For I = 2 To b
Range("B" & I).Select
ActiveCell.Formula = Left(Range("A" & I), 2)
Next I
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
isabelle
bonjour anfeus,
en évitant les select
For I = 2 To b Range("B" & I) = Left(Range("A" & I), 2) Next I
si la modification des valeurs de la colonne B entraine un recalcule, tu pourrait en début de macro mettre le calcul à manuel et arrêter le rafraichissement de l'écran, sans oublier de rétablir le tout avant la fin de la macro.
Bonjour, j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de valeur).Le problème est que ma base de données contient 16 000 lignes et le code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner une astuce pour réduire le temps de ma macro . Voici mon code : Dim b as Single b =Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count For I = 2 To b Range("B"& I).Select ActiveCell.Formula = Left(Range("A"& I), 2) Next I
bonjour anfeus,
en évitant les select
For I = 2 To b
Range("B" & I) = Left(Range("A" & I), 2)
Next I
si la modification des valeurs de la colonne B entraine un recalcule,
tu pourrait en début de macro mettre le calcul à manuel et arrêter le rafraichissement de l'écran,
sans oublier de rétablir le tout avant la fin de la macro.
Bonjour,
j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de
valeur).Le problème est que ma base de données contient 16 000 lignes et le
code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps
que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner
une astuce pour réduire le temps de ma macro .
Voici mon code :
Dim b as Single
b
=Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
For I = 2 To b
Range("B"& I).Select
ActiveCell.Formula = Left(Range("A"& I), 2)
Next I
For I = 2 To b Range("B" & I) = Left(Range("A" & I), 2) Next I
si la modification des valeurs de la colonne B entraine un recalcule, tu pourrait en début de macro mettre le calcul à manuel et arrêter le rafraichissement de l'écran, sans oublier de rétablir le tout avant la fin de la macro.
Bonjour, j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de valeur).Le problème est que ma base de données contient 16 000 lignes et le code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner une astuce pour réduire le temps de ma macro . Voici mon code : Dim b as Single b =Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count For I = 2 To b Range("B"& I).Select ActiveCell.Formula = Left(Range("A"& I), 2) Next I
Caetera
j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de valeur).Le problème est que ma base de données contient 16 000 lignes et le code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner une astuce pour réduire le temps de ma macro . Voici mon code : Dim b as Single b =Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count For I = 2 To b Range("B" & I).Select ActiveCell.Formula = Left(Range("A" & I), 2) Next I
***********************
Aucun besoin de boucle et encore moins de select :
b = 16000 Range("B2:B" & b) = "=LEFT(RC[-1],2)"
Etc
j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de
valeur).Le problème est que ma base de données contient 16 000 lignes et le
code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du
temps
que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner
une astuce pour réduire le temps de ma macro .
Voici mon code :
Dim b as Single
b
=Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
For I = 2 To b
Range("B" & I).Select
ActiveCell.Formula = Left(Range("A" & I), 2)
Next I
***********************
Aucun besoin de boucle et encore moins de select :
j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de valeur).Le problème est que ma base de données contient 16 000 lignes et le code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner une astuce pour réduire le temps de ma macro . Voici mon code : Dim b as Single b =Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count For I = 2 To b Range("B" & I).Select ActiveCell.Formula = Left(Range("A" & I), 2) Next I
***********************
Aucun besoin de boucle et encore moins de select :
b = 16000 Range("B2:B" & b) = "=LEFT(RC[-1],2)"
Etc
anfeus
isabelle a écrit le 14/09/2010 à 05h49 :
bonjour anfeus,
en évitant les select
For I = 2 To b Range("B" & I) = Left(Range("A" & I), 2) Next I
si la modification des valeurs de la colonne B entraine un recalcule, tu pourrait en début de macro mettre le calcul à manuel et arrêter le rafraichissement de l'écran, sans oublier de rétablir le tout avant la fin de la macro.
Bonjour, j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de valeur).Le problème est que ma base de données contient 16 000 lignes et le code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner une astuce pour réduire le temps de ma macro . Voici mon code : Dim b as Single b =Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count For I = 2 To b Range("B"& I).Select ActiveCell.Formula = Left(Range("A"& I), 2) Next I
merci , pour ta réponse isabelle , je passe d'1minute 30 à 10 secondes.
isabelle a écrit le 14/09/2010 à 05h49 :
bonjour anfeus,
en évitant les select
For I = 2 To b
Range("B" & I) = Left(Range("A" & I), 2)
Next I
si la modification des valeurs de la colonne B entraine un recalcule,
tu pourrait en début de macro mettre le calcul à manuel et
arrêter le rafraichissement de l'écran,
sans oublier de rétablir le tout avant la fin de la macro.
Bonjour,
j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de
valeur).Le problème est que ma base de données contient 16 000
lignes et le
code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai
donc peur du temps
que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner
une astuce pour réduire le temps de ma macro .
Voici mon code :
Dim b as Single
b
=Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
For I = 2 To b
Range("B"& I).Select
ActiveCell.Formula = Left(Range("A"& I), 2)
Next I
merci , pour ta réponse isabelle , je passe d'1minute 30 à 10 secondes.
For I = 2 To b Range("B" & I) = Left(Range("A" & I), 2) Next I
si la modification des valeurs de la colonne B entraine un recalcule, tu pourrait en début de macro mettre le calcul à manuel et arrêter le rafraichissement de l'écran, sans oublier de rétablir le tout avant la fin de la macro.
Bonjour, j'ai une macro qui applique la formule d'excel = gauche(cellulle, nbre de valeur).Le problème est que ma base de données contient 16 000 lignes et le code que j'ai trouvé met 1mn 30 pour effectuer la tâche. J'ai donc peur du temps que je mettrai lorsque j'aurais des bases de 50 000 lignes. Merci de me donner une astuce pour réduire le temps de ma macro . Voici mon code : Dim b as Single b =Worksheets("BASE").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count For I = 2 To b Range("B"& I).Select ActiveCell.Formula = Left(Range("A"& I), 2) Next I
merci , pour ta réponse isabelle , je passe d'1minute 30 à 10 secondes.
Caetera
"anfeus" a écrit dans le message de news:
merci , pour ta réponse isabelle , je passe d'1minute 30 à 10 secondes.
Et la mienne ? Elle sent le pâté ?
"anfeus" <anfeus@domain-xyz.in> a écrit dans le message de news:
JNSdnUTfmrQBoxLR4p2dnAA@giganews.com...
merci , pour ta réponse isabelle , je passe d'1minute 30 à 10 secondes.
Non pas du tout , je l'ai testé et elle a mis 12 secondes.
IMPOSSIBLE ! La méthode que je t'ai indiqué est (à peu près) 40 fois plus rapide !
La preuve là : http://www.cijoint.fr/cjlink.php?file=cj201009/cijJcG7Zui.xls
Sur ma bécane... Isabelle = (environ) 1250 millisecondes Caetera = (environ) 30 millisecondes
Etc
isabelle
c'est vrai Caetera, ton code est 10 fois plus rapide, mais les propositions pour améliorer la vitesse du code: - éviter les select - mettre le calcul à manuel - arrêter le rafraichissement de l'écran seront surement utile dans d'autre situation
ps/ anfeus, si tu veut seulement les valeurs en colonne B sur la proposition de Caetera tu peut ajouter la ligne suivante,
Range("B2:B" & b) = "=LEFT(RC[-1],2)" Range("B2:B" & b) = Range("B2:B" & b).Value ' transformer les formules en valeur
isabelle
Le 2010-09-14 08:08, Caetera a écrit :
"anfeus" a écrit dans le message de news:
Non pas du tout , je l'ai testé et elle a mis 12 secondes.
IMPOSSIBLE ! La méthode que je t'ai indiqué est (à peu près) 40 fois plus rapide !
La preuve là : http://www.cijoint.fr/cjlink.php?file=cj201009/cijJcG7Zui.xls
Sur ma bécane... Isabelle = (environ) 1250 millisecondes Caetera = (environ) 30 millisecondes
Etc
c'est vrai Caetera, ton code est 10 fois plus rapide,
mais les propositions pour améliorer la vitesse du code:
- éviter les select
- mettre le calcul à manuel
- arrêter le rafraichissement de l'écran
seront surement utile dans d'autre situation
ps/ anfeus, si tu veut seulement les valeurs en colonne B
sur la proposition de Caetera tu peut ajouter la ligne suivante,
Range("B2:B" & b) = "=LEFT(RC[-1],2)"
Range("B2:B" & b) = Range("B2:B" & b).Value ' transformer les formules en valeur
isabelle
Le 2010-09-14 08:08, Caetera a écrit :
"anfeus"<anfeus@domain-xyz.in> a écrit dans le message de news:
Fc6dnT_0AKCjzxLR4p2dnAA@giganews.com...
Non pas du tout , je l'ai testé et elle a mis 12 secondes.
IMPOSSIBLE !
La méthode que je t'ai indiqué est (à peu près) 40 fois plus rapide !
La preuve là :
http://www.cijoint.fr/cjlink.php?file=cj201009/cijJcG7Zui.xls
Sur ma bécane...
Isabelle = (environ) 1250 millisecondes
Caetera = (environ) 30 millisecondes
c'est vrai Caetera, ton code est 10 fois plus rapide, mais les propositions pour améliorer la vitesse du code: - éviter les select - mettre le calcul à manuel - arrêter le rafraichissement de l'écran seront surement utile dans d'autre situation
ps/ anfeus, si tu veut seulement les valeurs en colonne B sur la proposition de Caetera tu peut ajouter la ligne suivante,
Range("B2:B" & b) = "=LEFT(RC[-1],2)" Range("B2:B" & b) = Range("B2:B" & b).Value ' transformer les formules en valeur
isabelle
Le 2010-09-14 08:08, Caetera a écrit :
"anfeus" a écrit dans le message de news:
Non pas du tout , je l'ai testé et elle a mis 12 secondes.
IMPOSSIBLE ! La méthode que je t'ai indiqué est (à peu près) 40 fois plus rapide !
La preuve là : http://www.cijoint.fr/cjlink.php?file=cj201009/cijJcG7Zui.xls
Sur ma bécane... Isabelle = (environ) 1250 millisecondes Caetera = (environ) 30 millisecondes
Etc
Caetera
"isabelle" a écrit dans le message de news: i6o09s$t73$
c'est vrai Caetera, ton code est 10 fois plus rapide, mais les propositions pour améliorer la vitesse du code: - éviter les select - mettre le calcul à manuel - arrêter le rafraichissement de l'écran
Ces règles la étaient évidemment sous-entendues puisque ce sont des règles génériques (non spécifiques à ce cas précis) Mais, dans ce cas, et dans l'exemple joint, il était bon de ne pas les utiliser pour bien montrer les gains en temps d'éxécution en n'utilisant pas une boucle
Etc
"isabelle" <i@v.org> a écrit dans le message de news:
i6o09s$t73$1@speranza.aioe.org...
c'est vrai Caetera, ton code est 10 fois plus rapide,
mais les propositions pour améliorer la vitesse du code:
- éviter les select
- mettre le calcul à manuel
- arrêter le rafraichissement de l'écran
Ces règles la étaient évidemment sous-entendues puisque ce sont des règles
génériques (non spécifiques à ce cas précis)
Mais, dans ce cas, et dans l'exemple joint, il était bon de ne pas les utiliser
pour bien montrer les gains en temps d'éxécution en n'utilisant pas une boucle
"isabelle" a écrit dans le message de news: i6o09s$t73$
c'est vrai Caetera, ton code est 10 fois plus rapide, mais les propositions pour améliorer la vitesse du code: - éviter les select - mettre le calcul à manuel - arrêter le rafraichissement de l'écran
Ces règles la étaient évidemment sous-entendues puisque ce sont des règles génériques (non spécifiques à ce cas précis) Mais, dans ce cas, et dans l'exemple joint, il était bon de ne pas les utiliser pour bien montrer les gains en temps d'éxécution en n'utilisant pas une boucle
Etc
Jacquouille
Bonjour J'aime cette théorie.... Quoique, même en ayant le doigt prêt sur le mulot, je ne suis pas certain de la différence lorsqu'il faudra cliquer sur quelque chose à l'étape suivante. Je me suis toujours marré à la lecture de ces milisecondes, alors que l'on reste pantois du résultat pendant 5 min .....devant son écran à se demander ce que l'on va faire. -)
-- Bien amicalmement, "Le vin est au repas ce que le parfum est à la femme."
Jacquouille (MPFE).
"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news: i6noiu$blg$
"anfeus" a écrit dans le message de news:
Non pas du tout , je l'ai testé et elle a mis 12 secondes.
IMPOSSIBLE ! La méthode que je t'ai indiqué est (à peu près) 40 fois plus rapide !
La preuve là : http://www.cijoint.fr/cjlink.php?file=cj201009/cijJcG7Zui.xls
Sur ma bécane... Isabelle = (environ) 1250 millisecondes Caetera = (environ) 30 millisecondes
Etc
Bonjour
J'aime cette théorie....
Quoique, même en ayant le doigt prêt sur le mulot, je ne suis pas certain de
la différence lorsqu'il faudra cliquer sur quelque chose à l'étape suivante.
Je me suis toujours marré à la lecture de ces milisecondes, alors que l'on
reste pantois du résultat pendant 5 min .....devant son écran à se demander
ce que l'on va faire. -)
--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."
Jacquouille (MPFE).
"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news:
i6noiu$blg$1@speranza.aioe.org...
"anfeus" <anfeus@domain-xyz.in> a écrit dans le message de news:
Fc6dnT_0AKCjzxLR4p2dnAA@giganews.com...
Non pas du tout , je l'ai testé et elle a mis 12 secondes.
IMPOSSIBLE !
La méthode que je t'ai indiqué est (à peu près) 40 fois plus rapide !
La preuve là :
http://www.cijoint.fr/cjlink.php?file=cj201009/cijJcG7Zui.xls
Sur ma bécane...
Isabelle = (environ) 1250 millisecondes
Caetera = (environ) 30 millisecondes
Bonjour J'aime cette théorie.... Quoique, même en ayant le doigt prêt sur le mulot, je ne suis pas certain de la différence lorsqu'il faudra cliquer sur quelque chose à l'étape suivante. Je me suis toujours marré à la lecture de ces milisecondes, alors que l'on reste pantois du résultat pendant 5 min .....devant son écran à se demander ce que l'on va faire. -)
-- Bien amicalmement, "Le vin est au repas ce que le parfum est à la femme."
Jacquouille (MPFE).
"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news: i6noiu$blg$
"anfeus" a écrit dans le message de news:
Non pas du tout , je l'ai testé et elle a mis 12 secondes.
IMPOSSIBLE ! La méthode que je t'ai indiqué est (à peu près) 40 fois plus rapide !
La preuve là : http://www.cijoint.fr/cjlink.php?file=cj201009/cijJcG7Zui.xls
Sur ma bécane... Isabelle = (environ) 1250 millisecondes Caetera = (environ) 30 millisecondes