lenteur dans cette macro à l'activation de la feuille

Le
magic-dd
bonjour

je voulais qu'une macro s'active des l'ouverture de la feuille mais je
trouve que le code est long à s'executer

pourriez vous m'aider pour rendre plus efficace l'execution svp.

car il n'y que 30 lignes environ à traiter alors sur 150 j'imagine
meme pas

aussi, n'est il pas plus facile de mettre le resultat d'une formule
plutot que la formule elle meme?


merci





Private Sub Worksheet_Activate()
For i = 6 To 30
'copie des bases
Range("a" & i) = "=IF('SEL 100m NL H'!R[-1]C[23]<>"""",'SEL 100m NL H'!
R[-1]C[23],"""")"
'100m brasse masculin

Range("b" & i) = "=IF(ISERROR(VLOOKUP(RC[-1],'SEL 100m BR H'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-1],'SEL 100m BR H'!
R5C24:R34C25,2,0)))"

Range("c" & i) = "=IF(ISERROR(COUNT(R6C2:R30C2)-RC[-1]+1),"""",(COUNT
(R6C2:R30C2)-RC[-1]+1))"

'50m nl feminin

Range("f" & i) = "=IF(ISERROR(VLOOKUP(RC[-5],'50 m NL F'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-5],'50 m NL F'!
R5C24:R34C25,2,0)))"

Range("g" & i) = "=IF(ISERROR(COUNT(R6C6:R30C6)-RC[-1]+1),"""",(COUNT
(R6C6:R30C6)-RC[-1]+1))"

'100 m nage libre masculin

Range("H" & i) = "=IF(ISERROR(VLOOKUP(RC[-7],'SEL 100m NL H'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-7],'SEL 100m NL H'!
R5C24:R34C25,2,0)))"

Range("I" & i) = "=IF(ISERROR(COUNT(R6C8:R30C8)-RC[-1]+1),"""",(COUNT
(R6C8:R30C8)-RC[-1]+1))"


Next i

End Sub
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Philippe.R
Le #19040291
Bonsoir,
Inscrire par VBA une formule dans la feuille a un réel intérêt si tu as
besoin que le résultat se recalcule régulièrement, avec l'inconvénient du
temps que ça prends.
En l'occurrence, vu le nombre de formules que tu colles via une boucle,
l'ensemble du classeur est recalculé à chaque pas et ceci explique la
lenteur.

Tu peux au moins passer en calcul manuel en début de procédure :
Application.Calculation = xlManual

et repasser en calcul auto à la fin :
Application.Calculation = xlAutomatic
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"magic-dd" news:
bonjour

je voulais qu'une macro s'active des l'ouverture de la feuille mais je
trouve que le code est long à s'executer

pourriez vous m'aider pour rendre plus efficace l'execution svp.

car il n'y que 30 lignes environ à traiter alors sur 150 j'imagine
meme pas

aussi, n'est il pas plus facile de mettre le resultat d'une formule
plutot que la formule elle meme?


merci





Private Sub Worksheet_Activate()
For i = 6 To 30
'copie des bases
Range("a" & i) = "=IF('SEL 100m NL H'!R[-1]C[23]<>"""",'SEL 100m NL H'!
R[-1]C[23],"""")"
'100m brasse masculin

Range("b" & i) = "=IF(ISERROR(VLOOKUP(RC[-1],'SEL 100m BR H'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-1],'SEL 100m BR H'!
R5C24:R34C25,2,0)))"

Range("c" & i) = "=IF(ISERROR(COUNT(R6C2:R30C2)-RC[-1]+1),"""",(COUNT
(R6C2:R30C2)-RC[-1]+1))"

'50m nl feminin

Range("f" & i) = "=IF(ISERROR(VLOOKUP(RC[-5],'50 m NL F'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-5],'50 m NL F'!
R5C24:R34C25,2,0)))"

Range("g" & i) = "=IF(ISERROR(COUNT(R6C6:R30C6)-RC[-1]+1),"""",(COUNT
(R6C6:R30C6)-RC[-1]+1))"

'100 m nage libre masculin

Range("H" & i) = "=IF(ISERROR(VLOOKUP(RC[-7],'SEL 100m NL H'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-7],'SEL 100m NL H'!
R5C24:R34C25,2,0)))"

Range("I" & i) = "=IF(ISERROR(COUNT(R6C8:R30C8)-RC[-1]+1),"""",(COUNT
(R6C8:R30C8)-RC[-1]+1))"


Next i

End Sub
Daniel.C
Le #19040281
Bonjour.
Tu n'es pas obligé non plus de faire une boucle :

Range("A6:A30").Formula = "=IF('SEL 100m NL H'!X5<>"""",'SEL 100m NL
H'!X5,"""")"
etc.

Daniel

bonjour

je voulais qu'une macro s'active des l'ouverture de la feuille mais je
trouve que le code est long à s'executer

pourriez vous m'aider pour rendre plus efficace l'execution svp.

car il n'y que 30 lignes environ à traiter alors sur 150 j'imagine
meme pas

aussi, n'est il pas plus facile de mettre le resultat d'une formule
plutot que la formule elle meme?


merci





Private Sub Worksheet_Activate()
For i = 6 To 30
'copie des bases
Range("a" & i) = "=IF('SEL 100m NL H'!R[-1]C[23]<>"""",'SEL 100m NL H'!
R[-1]C[23],"""")"
'100m brasse masculin

Range("b" & i) = "=IF(ISERROR(VLOOKUP(RC[-1],'SEL 100m BR H'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-1],'SEL 100m BR H'!
R5C24:R34C25,2,0)))"

Range("c" & i) = "=IF(ISERROR(COUNT(R6C2:R30C2)-RC[-1]+1),"""",(COUNT
(R6C2:R30C2)-RC[-1]+1))"

'50m nl feminin

Range("f" & i) = "=IF(ISERROR(VLOOKUP(RC[-5],'50 m NL F'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-5],'50 m NL F'!
R5C24:R34C25,2,0)))"

Range("g" & i) = "=IF(ISERROR(COUNT(R6C6:R30C6)-RC[-1]+1),"""",(COUNT
(R6C6:R30C6)-RC[-1]+1))"

'100 m nage libre masculin

Range("H" & i) = "=IF(ISERROR(VLOOKUP(RC[-7],'SEL 100m NL H'!
R5C24:R34C25,2,0)),"""",(VLOOKUP(RC[-7],'SEL 100m NL H'!
R5C24:R34C25,2,0)))"

Range("I" & i) = "=IF(ISERROR(COUNT(R6C8:R30C8)-RC[-1]+1),"""",(COUNT
(R6C8:R30C8)-RC[-1]+1))"


Next i

End Sub


magic-dd
Le #19040271
merci pour la reponse

pour eviter de retrouver des formules dans les cellule qui en
contiennent, n'existe t'il pas un moyen d'y mettre le resultat de la
formule

j'ai tente avec evaluation mais je n'y parviens pas
MichDenis
Le #19040331
Bonjour Magic-dd,

As-tu essayé ceci :

Private Sub Worksheet_Activate()

Dim I As Integer
Dim ModeCalcul As String

Application.EnableEvents = False
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual

I = 60
'copie des bases
Range("a6:A" & I) = "=IF('SEL 100m NL H'!R[-1]C[23]" & _
"<>"""",'SEL 100m NL H'!R[-1]C[23],"""")"

'100m brasse masculin
Range("b6:B" & I) = "=IF(ISERROR(VLOOKUP(RC[-1]," & _
"'SEL 100m BR H'!R5C24:R34C25,2,0)),""""," & _
"(VLOOKUP(RC[-1],'SEL 100m BR H'!R5C24:R34C25,2,0)))"

Range("c6:C" & I) = "=IF(ISERROR(COUNT(R6C2:R30C2)" & _
"-RC[-1]+1),"""",(COUNT(R6C2:R30C2)-RC[-1]+1))"

'50m nl feminin
Range("f6:F" & I) = "=IF(ISERROR(VLOOKUP(RC[-5]," & _
"'50 m NL F'!R5C24:R34C25,2,0)),""""," & _
"(VLOOKUP(RC[-5],'50 m NL F'!R5C24:R34C25,2,0)))"

Range("g6:G" & I) = "=IF(ISERROR(COUNT(R6C6:R30C6)-" & _
"RC[-1]+1),"""",(COUNT(R6C6:R30C6)-RC[-1]+1))"

'100 m nage libre masculin
Range("H6:H" & I) = "=IF(ISERROR(VLOOKUP(RC[-7]," & _
"'SEL 100m NL H'!R5C24:R34C25,2,0)),""""," & _
"(VLOOKUP(RC[-7],'SEL 100m NL H'!R5C24:R34C25,2,0)))"

Range("I6:I" & I) = "=IF(ISERROR(COUNT(R6C8:R30C8)-" & _
"RC[-1]+1),"""",(COUNT(R6C8:R30C8)-RC[-1]+1))"

Application.Calculation = ModeCalcul
Application.EnableEvents = True

End Sub
magic-dd
Le #19040321
WAOUH!!!

ca calcul plus vite d'un coup

merci pour cette astuce mais je reste persuader que l'on peut ne
mettre que le resultat dans la cellule au lieu de la formule
MichDenis
Le #19040541
Dans ta problématique, ta variable I = 30 et non 60. Tu devras corriger !
Daniel.C
Le #19040521
Je ne sais pas si l'on peut utiliser Evaluate avec des formules codées
R1C1; un exemple pour la première ligne :
Range("a" & i) = Evaluate("=IF('SEL 100m NL H'!X" & i - 1 &
"<>"""",'SEL 100m NL H'!X" & i - 1 & ","""")")
Daniel

WAOUH!!!

ca calcul plus vite d'un coup

merci pour cette astuce mais je reste persuader que l'on peut ne
mettre que le resultat dans la cellule au lieu de la formule


magic-dd
Le #19040781
cela à l'air de fonctionner mais pour les autres formules, je suis in
fichu de les transformer

donc merci de m'aiguiller pour les autres


On 2 avr, 21:43, Daniel.C
Je ne sais pas si l'on peut utiliser Evaluate avec des formules codées
R1C1; un exemple pour la première ligne :
Range("a" & i) = Evaluate("=IF('SEL 100m NL H'!X" & i - 1 &
"<>"""",'SEL 100m NL H'!X" & i - 1 & ","""")")
Daniel

> WAOUH!!!

> ca calcul plus vite d'un coup

> merci pour cette astuce mais je reste persuader que l'on peut ne
> mettre que le resultat dans la cellule au lieu de la formule


Daniel.C
Le #19041081
En ajoutant les lignes accélératrices (non testé) :

Private Sub Worksheet_Activate()
For i = 6 To 8
'copie des bases
Range("a" & i) = Evaluate("=IF('SEL 100m NL H'!X" & i - 1 &
"<>"""",'SEL 100m NL H'!X" & i - 1 & ","""")")
'100m brasse masculin

Range("b" & i) = Evaluate("=IF(ISERROR(VLOOKUP(A" & i & ",'SEL 100m BR
H'!$X$5:$Y$34,2,0)),"",(VLOOKUP(A" & i & ",'SEL 100m BR
H'!$X$5:$Y$34,2,0)))")

Range("c" & i) = Evaluate("IF(ISERROR(COUNT($B$6:$B$30)-B" & i &
"+1),"""",(COUNT($B$6:$B$30)-B6+1))")
'50m nl feminin

Range("f" & i) = Evaluate("IF(ISERROR(VLOOKUP(A" & i & ",'50 m NL
F'!$X$5:$Y$34,2,0)),"""",(VLOOKUP(A" & i & ",'50 m NL
F'!$X$5:$Y$34,2,0)))")

Range("g" & i) = Evaluate("IF(ISERROR(COUNT($F$6:$F$30)-F" & i &
"+1),"""",(COUNT($F$6:$F$30)-F" & i & "+1))")

'100 m nage libre masculin

Range("H" & i) = Evaluate("IF(ISERROR(VLOOKUP(A" & i & ",'SEL 100m NL
H'!$X$5:$Y$34,2,0)),"""",(VLOOKUP(A" & i & ",'SEL 100m NL
H'!$X$5:$Y$34,2,0)))")

Range("I" & i) = Evaluate("IF(ISERROR(COUNT($H$6:$H$30)-H" & i &
"+1),"""",(COUNT($H$6:$H$30)-H" & i & "+1))")


Next i

End Sub

Daniel


cela à l'air de fonctionner mais pour les autres formules, je suis in
fichu de les transformer

donc merci de m'aiguiller pour les autres


On 2 avr, 21:43, Daniel.C
Je ne sais pas si l'on peut utiliser Evaluate avec des formules codées
R1C1; un exemple pour la première ligne :
Range("a" & i) = Evaluate("=IF('SEL 100m NL H'!X" & i - 1 &
"<>"""",'SEL 100m NL H'!X" & i - 1 & ","""")")
Daniel

WAOUH!!!



ca calcul plus vite d'un coup



merci pour cette astuce mais je reste persuader que l'on peut ne
mettre que le resultat dans la cellule au lieu de la formule






MichDenis
Le #19041231
La première proposition que je t'ai faite est sûrement la
plus rapide... mais avec Evaluate, tu n'as pas besoin de
réévaluer constamment... sinon, tu es mieux de conserver
les formules.


Si cela peut de donner des idées...
Difficile de tester cela...

'-------------------------------------------------
Private Sub Worksheet_Activate()

Dim I As Integer

For I = 6 To 30
'copie des bases
Range("a" & I).FormulaLocal = Evaluate("if('SEL 100m NL H'!X" & _
I & "<>"""",'SEL 100m NL H'!X" & I & ","""")")
'100m brasse masculin

Range("b" & I).FormulaLocal = Evaluate("If(iserror(Vlookup(XFD" & I & _
",'SEL 100m BR H'!$X$5:$Y$34,2,0)),"""",(Vlookup(XFD" _
& I & ",'SEL 100m BR H'!$X$5:$Y$34,2,0)))")

Range("c" & I) = Range("a6:A" & _
I) = Evaluate("if(iserror(Count($B$6:$B$30)-XFD" & _
I & "+1),"""",(Count($B$6:$B$30)-XFD" & I & "+1))")

'50m nl feminin

Range("f" & I) = Evaluate("if(iserror(vlooKup(XEZ" & _
I & ",'50 m NL F'!$X$5:$Y$34,2,0)),"""",(vlookup(XEZ" & _
I & ",'50 m NL F'!$X$5:$Y$34,2,0)))")

Range("g" & I) = Evaluate("if(iserror(count($F$6:$F$30)-XFD" & _
I & "+1),"""",(count($F$6:$F$30)-XFD" & I & "+1))")

'100 m nage libre masculin

Range("H" & I) = Evaluate("If(iserror(Vlookup(XEX" & _
I & ",'SEL 100m NL H'!$X$5:$Y$34,2,0)),"""",(Vlookup(XEX" & _
I & ",'SEL 100m NL H'!$X$5:$Y$34,2,0)))")

Range("I" & I) = Evaluate("if(iserror(count($H$6:$H$30)-XFD" & _
I & "+1),"""",(count($H$6:$H$30)-XFD" & I & "+1))")

Next I

End Sub
'-------------------------------------------------


"magic-dd"
cela à l'air de fonctionner mais pour les autres formules, je suis in
fichu de les transformer

donc merci de m'aiguiller pour les autres


On 2 avr, 21:43, Daniel.C
Je ne sais pas si l'on peut utiliser Evaluate avec des formules codées
R1C1; un exemple pour la première ligne :
Range("a" & i) = Evaluate("=IF('SEL 100m NL H'!X" & i - 1 &
"<>"""",'SEL 100m NL H'!X" & i - 1 & ","""")")
Daniel

> WAOUH!!!

> ca calcul plus vite d'un coup

> merci pour cette astuce mais je reste persuader que l'on peut ne
> mettre que le resultat dans la cellule au lieu de la formule


Publicité
Poster une réponse
Anonyme