OVH Cloud OVH Cloud

lenteur macro

28 réponses
Avatar
marcus
Bonjour à vous tous
je tente ma chance pour une deuxième fois, n'ayant pas eu de réponse à mon
premier post. Merci à Patrick d'avoir essayé à régler mon problème. . C'est
Isabelle qui m'a donné ce code et il fonctionne à merveille. Par contre,
après 10 minutes d'attente, je n'ai toujours pas les réponses. Alors je
voulais savoir qu'elle était mon problème et s'il existait une façon
d'accéler le processus.

Merci de votre aide pour une deuxième fois
Marcus

Voici mon code de macro

Sub Macro2()
Application.ScreenUpdating = False
For Each s In Range("aC29:aC1029")
For Each c In Range("aC29:aC1029")
If c <> 0 Then Range("ad" & s.Row) = s / c
Next
Next
Application.ScreenUpdating = True
End Sub

8 réponses

1 2 3
Avatar
LSteph
Re,
Si j'ai bien compris cette fois !

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph
'nota: (j'ai gardé la bonne idée de MD pour le Calcul)



Bonjour Lsteph
Merci de m'aider. S'il existe une formule pour faire ce que je veux, je
l'apprécierais énormément. Alors, voici ce que je veux, c'est de prendre une
cellule et la diviser par la suivante qui n'est pas un zéro.
Exemple.
Colonne A
A1 Dans la cellule B1, la formule devrait être A1/A2
A2=2 Dans la cellule B2, la formule devrait être A2/ A5 car A3 et A4
contiennent 0
A3=0 ici la réponse devrait être 0
A4=0 ici la réponse devrait être 0
A5=2 etc.

Voici aussi un fichier exemple de ce que je veux faire

http://cjoint.com/?kEo5c2yCFP

Merci de ton aide



Bonjour,
je tente ma chance pour une deuxième fois
Alors pourquoi tu changes de fil? du coup on ne sait pas ce qui venait

avant!
(si on demande de ne pas le faire ce n'est pas pour des prunes)

Ceci semble bizarre,
For Each s In Range("aC29:aC1029")
For Each c In Range("aC29:aC1029")
If c <> 0 Then Range("ad" & s.Row) = s / c
si tu boucles déjà sur s pour mettre les valeurs en ad de ligne s

pourquoi reboucler sur c
si c<>0 la valeur de s/c sera mise en ad mais sera aussitôt remplacée
par la valeur suivante s/c où c<>0
du coup tu imbriques deux boucles pour n'avoir que la dernière
occurence de c où c<>0 qui te renvoie le calcul.
Ce même exercice se ferait sans doute avec une formule
Quelque chose m'échappe très certainement surtout si Isabelle t'a
donné ce code,
il y avait surement une bonne raison , tu voulais faire quoi?

Cordialement.

--
lSteph


On 30 oct, 13:36, marcus wrote:
Bonjour à vous tous
je tente ma chance pour une deuxième fois, n'ayant pas eu de réponse à mon
premier post. Merci à Patrick d'avoir essayé à régler mon problème. . C'est
Isabelle qui m'a donné ce code et il fonctionne à merveille. Par contre,
après 10 minutes d'attente, je n'ai toujours pas les réponses. Alors je
voulais savoir qu'elle était mon problème et s'il existait une façon
d'accéler le processus.

Merci de votre aide pour une deuxième fois
Marcus

Voici mon code de macro

Sub Macro2()
Application.ScreenUpdating = False
For Each s In Range("aC29:aC1029")
For Each c In Range("aC29:aC1029")
If c <> 0 Then Range("ad" & s.Row) = s / c
Next
Next
Application.ScreenUpdating = True
End Sub








Avatar
LSteph
Re,
Si j'ai bien compris cette fois !

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph

Bonjour à vous tous
je tente ma chance pour une deuxième fois, n'ayant pas eu de réponse à mon
premier post. Merci à Patrick d'avoir essayé à régler mon problème. . C'est
Isabelle qui m'a donné ce code et il fonctionne à merveille. Par contre,
après 10 minutes d'attente, je n'ai toujours pas les réponses. Alors je
voulais savoir qu'elle était mon problème et s'il existait une façon
d'accéler le processus.

Merci de votre aide pour une deuxième fois
Marcus

Voici mon code de macro

Sub Macro2()
Application.ScreenUpdating = False
For Each s In Range("aC29:aC1029")
For Each c In Range("aC29:aC1029")
If c <> 0 Then Range("ad" & s.Row) = s / c
Next
Next
Application.ScreenUpdating = True
End Sub




Avatar
LSteph
..une petite rectif (si on répète faut effacer d'abord en ad29:ad65536)

Option Explicit

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
[ad29:ad65536].ClearContents
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph
Avatar
LSteph
..une petite rectif (si on répète faut effacer d'abord en ad29:ad65536)

Option Explicit

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
[ad29:ad65536].ClearContents
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph

Re,
Si j'ai bien compris cette fois !

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph
'nota: (j'ai gardé la bonne idée de MD pour le Calcul)



Bonjour Lsteph
Merci de m'aider. S'il existe une formule pour faire ce que je veux,
je l'apprécierais énormément. Alors, voici ce que je veux, c'est de
prendre une cellule et la diviser par la suivante qui n'est pas un
zéro. Exemple.
Colonne A
A1 Dans la cellule B1, la formule devrait être A1/A2
A2=2 Dans la cellule B2, la formule devrait être A2/ A5 car A3 et A4
contiennent 0
A3=0 ici la réponse devrait être 0
A4=0 ici la réponse devrait être 0
A5=2 etc.

Voici aussi un fichier exemple de ce que je veux faire

http://cjoint.com/?kEo5c2yCFP

Merci de ton aide



Bonjour,
je tente ma chance pour une deuxième fois
Alors pourquoi tu changes de fil? du coup on ne sait pas ce qui venait

avant!
(si on demande de ne pas le faire ce n'est pas pour des prunes)

Ceci semble bizarre,
For Each s In Range("aC29:aC1029")
For Each c In Range("aC29:aC1029")
If c <> 0 Then Range("ad" & s.Row) = s / c
si tu boucles déjà sur s pour mettre les valeurs en ad de ligne s

pourquoi reboucler sur c
si c<>0 la valeur de s/c sera mise en ad mais sera aussitôt remplacée
par la valeur suivante s/c où c<>0
du coup tu imbriques deux boucles pour n'avoir que la dernière
occurence de c où c<>0 qui te renvoie le calcul.
Ce même exercice se ferait sans doute avec une formule
Quelque chose m'échappe très certainement surtout si Isabelle t'a
donné ce code,
il y avait surement une bonne raison , tu voulais faire quoi?

Cordialement.

--
lSteph


On 30 oct, 13:36, marcus wrote:
Bonjour à vous tous
je tente ma chance pour une deuxième fois, n'ayant pas eu de réponse
à mon
premier post. Merci à Patrick d'avoir essayé à régler mon problème.
. C'est
Isabelle qui m'a donné ce code et il fonctionne à merveille. Par
contre,
après 10 minutes d'attente, je n'ai toujours pas les réponses. Alors je
voulais savoir qu'elle était mon problème et s'il existait une façon
d'accéler le processus.

Merci de votre aide pour une deuxième fois
Marcus

Voici mon code de macro

Sub Macro2()
Application.ScreenUpdating = False
For Each s In Range("aC29:aC1029")
For Each c In Range("aC29:aC1029")
If c <> 0 Then Range("ad" & s.Row) = s / c
Next
Next
Application.ScreenUpdating = True
End Sub










Avatar
marcus
Bonjour LSteph et à vous tous
Je ne croyais pas causé autant de réaction avec mon post. J'ai essayé de
m'exprimer le plus clairement possible, même si je ne suis pas programmeur et
à voir le résultat, cela semble moins claire.

Voici ce que je recherche. À la base, je cherchais une formule qui ferait ce
travaille, mais dans un autre post, isabelle m'avait fait comprendre que cela
ne se faisait pas, alors elle m'avait une macro qui fonctionne à merveille,
sauf que dans mon fichier, la macro prend minimum 10 minutes à s'exécuter.

Ce que je veux c'Est une formule qui divise une cellule par la suivante qui
n'a pas le chiffre 0. c'est tout. Je sais que la dernière cellule me donnera
comme résultat DIV/0, mais c'est pas grave. Je joins un document expliquant
ce que je cherche à faire. Je l'avais déjà posté dans un autre post, mais je
vais le remettre dans celui-ci.

Merci énormément de votre aide, à toi et à tout les autres.

http://cjoint.com/?kEo5c2yCFP




...une petite rectif (si on répète faut effacer d'abord en ad29:ad65536)

Option Explicit

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
[ad29:ad65536].ClearContents
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph



Avatar
marcus
Bonjour LSteph
Je viens de tester ta macro, et elle me donne une erreur à la phrase
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then


Dans mon fichier, la cellule AC contient seulement des chiffres, dont
quelques fois le chiffre 0. Il n'y a pas d'espace vide, pas de cellule en
format texte, pas rien de tout cela, mise à part des chiffres et seulement
des chiffres. Ce que j'aimerais, c'est que la macro divise par la prochaine
cellule qui n'a pas le chiffre 0.

Merci de ton aide


...une petite rectif (si on répète faut effacer d'abord en ad29:ad65536)

Option Explicit

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
[ad29:ad65536].ClearContents
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph



Avatar
lSteph
Bonjour,

Ca ne plante pas:

http://cjoint.com/?kFoNk3g56U

en revanche cela plantera si en AC il y a du texte par exemple.

Cordialement.

--
lSteph


On 31 oct, 13:35, marcus wrote:
Bonjour LSteph
Je viens de tester ta macro, et elle me donne une erreur à la phrase
If Not IsEmpty(Range("ac" & i)) And _

Range("ac" & i) <> 0 Then


Dans mon fichier, la cellule AC contient seulement des chiffres, dont
quelques fois le chiffre 0. Il n'y a pas d'espace vide, pas de cellule en
format texte, pas rien de tout cela, mise à part des chiffres et seulem ent
des chiffres. Ce que j'aimerais, c'est que la macro divise par la prochai ne
cellule qui n'a pas le chiffre 0.

Merci de ton aide


...une petite rectif (si on répète faut effacer d'abord en ad29:ad6 5536)

Option Explicit

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
[ad29:ad65536].ClearContents
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph




Avatar
marcus
BOnjour LSteph

Effectivement, je l'essayais sur un autre document qui lui a du texte dans
la colonne AC2000.

Merci de ton aide, ce fût très apprécié
Bonne journée
Marc

Bonjour,

Ca ne plante pas:

http://cjoint.com/?kFoNk3g56U

en revanche cela plantera si en AC il y a du texte par exemple.

Cordialement.

--
lSteph


On 31 oct, 13:35, marcus wrote:
Bonjour LSteph
Je viens de tester ta macro, et elle me donne une erreur à la phrase
If Not IsEmpty(Range("ac" & i)) And _

Range("ac" & i) <> 0 Then


Dans mon fichier, la cellule AC contient seulement des chiffres, dont
quelques fois le chiffre 0. Il n'y a pas d'espace vide, pas de cellule en
format texte, pas rien de tout cela, mise à part des chiffres et seulement
des chiffres. Ce que j'aimerais, c'est que la macro divise par la prochaine
cellule qui n'a pas le chiffre 0.

Merci de ton aide


...une petite rectif (si on répète faut effacer d'abord en ad29:ad65536)

Option Explicit

Sub Macro2()

Dim ModCalcul As String, i As Long, j As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
[ad29:ad65536].ClearContents
j = 0
For i = [ac65536].End(3).Row To 29 Step -1
If Not IsEmpty(Range("ac" & i)) And _
Range("ac" & i) <> 0 Then
If j > 0 Then Range("ad" & i) = _
Range("ac" & i) / Range("ac" & j)
j = i
End If
Next i

Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub

'lSteph









1 2 3