Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lenteur dans cette macro à l'activation de la feuille

17 réponses
Avatar
magic-dd
bonjour

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

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

car il n'y que 30 lignes environ =E0 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 =3D 6 To 30
'copie des bases
Range("a" & i) =3D "=3DIF('SEL 100m NL H'!R[-1]C[23]<>"""",'SEL 100m NL H'!
R[-1]C[23],"""")"
'100m brasse masculin

Range("b" & i) =3D "=3DIF(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) =3D "=3DIF(ISERROR(COUNT(R6C2:R30C2)-RC[-1]+1),"""",(COUNT
(R6C2:R30C2)-RC[-1]+1))"

'50m nl feminin

Range("f" & i) =3D "=3DIF(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) =3D "=3DIF(ISERROR(COUNT(R6C6:R30C6)-RC[-1]+1),"""",(COUNT
(R6C6:R30C6)-RC[-1]+1))"

'100 m nage libre masculin

Range("H" & i) =3D "=3DIF(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) =3D "=3DIF(ISERROR(COUNT(R6C8:R30C8)-RC[-1]+1),"""",(COUNT
(R6C8:R30C8)-RC[-1]+1))"


Next i

End Sub

10 réponses

1 2
Avatar
Philippe.R
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" a écrit dans le message de
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
Avatar
Daniel.C
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


Avatar
magic-dd
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
Avatar
MichDenis
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
Avatar
magic-dd
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
Avatar
MichDenis
Dans ta problématique, ta variable I = 30 et non 60. Tu devras corriger !
Avatar
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


Avatar
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 wrote:
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


Avatar
Daniel.C
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 wrote:
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






Avatar
MichDenis
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" a écrit dans le message de groupe de discussion :

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 wrote:
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


1 2