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

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

10 réponses

1 2 3
Avatar
lSteph
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 cont re,
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
MichDenis
Sub Macro2()

Dim ModCalcul As String
Dim S As Range, C As Range

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = 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 C, S
Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub




"marcus" a écrit dans le message de news:

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
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
... si le but est de pomper sans savoir pourquoi on pompe,
le code serait executé plus rapidement avec
exit for
en sortant ainsi de la boucle sitôt qu'une valeur de c satisfaisante
est rencontrée
, voire si c'est la dernière qui est souhaitée faire une boucle en
remontant,
tout cela dont il n'est pas évident que le but recherché ne soit pas
lié, donc
outre définir toutes les variables et suspendre le recalcul et les
évènements
mettre en haut du module.

Option explicit


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 cont re,
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
merci de ton aide. Je comprends que ce n'est pas si simple de faire tout
cela, et en plus, n'étant pas programmeur, alors....

Merci de ton aide, je l'apprécie


.... si le but est de pomper sans savoir pourquoi on pompe,
le code serait executé plus rapidement avec
exit for
en sortant ainsi de la boucle sitôt qu'une valeur de c satisfaisante
est rencontrée
, voire si c'est la dernière qui est souhaitée faire une boucle en
remontant,
tout cela dont il n'est pas évident que le but recherché ne soit pas
lié, donc
outre définir toutes les variables et suspendre le recalcul et les
évènements
mettre en haut du module.

Option explicit


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 MichDenis
Merci de ton aide, cela à aider à passer le temps à 4 minutes.

J'ai une dernière question. Si, selon mes besoins, je ne connais pas le
nombre de données qu'il y a dans la colonne AC, mais que les données
commencent toujours à AC29, comment dois-je modifier mon code? Étant pas
programmeur...

Merci de ton aide

Marcus


Sub Macro2()

Dim ModCalcul As String
Dim S As Range, C As Range

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = 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 C, S
Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub




"marcus" a écrit dans le message de news:

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
MichDenis
Sub Macro2()

Dim ModCalcul As String
Dim S As Range, C As Range
Dim DerLig As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

DerLig = Range("aC65536").End(xlUp).Row

For Each S In Range("aC29:aC" & DerLig)
For Each C In Range("aC29:aC" & DerLig)
If C <> 0 Then Range("ad" & S.Row) = S / C
Next C, S
Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub





"marcus" a écrit dans le message de news:

Bonjour MichDenis
Merci de ton aide, cela à aider à passer le temps à 4 minutes.

J'ai une dernière question. Si, selon mes besoins, je ne connais pas le
nombre de données qu'il y a dans la colonne AC, mais que les données
commencent toujours à AC29, comment dois-je modifier mon code? Étant pas
programmeur...

Merci de ton aide

Marcus


Sub Macro2()

Dim ModCalcul As String
Dim S As Range, C As Range

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = 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 C, S
Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub




"marcus" a écrit dans le message de news:

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
Salut MichDenis

à la ligne IF C<>0 then range.... j'ai un message d'erreur. Que se passe t-il?


Sub Macro2()

Dim ModCalcul As String
Dim S As Range, C As Range
Dim DerLig As Long

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

DerLig = Range("aC65536").End(xlUp).Row

For Each S In Range("aC29:aC" & DerLig)
For Each C In Range("aC29:aC" & DerLig)
If C <> 0 Then Range("ad" & S.Row) = S / C
Next C, S
Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub





"marcus" a écrit dans le message de news:

Bonjour MichDenis
Merci de ton aide, cela à aider à passer le temps à 4 minutes.

J'ai une dernière question. Si, selon mes besoins, je ne connais pas le
nombre de données qu'il y a dans la colonne AC, mais que les données
commencent toujours à AC29, comment dois-je modifier mon code? Étant pas
programmeur...

Merci de ton aide

Marcus


Sub Macro2()

Dim ModCalcul As String
Dim S As Range, C As Range

Application.ScreenUpdating = False
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = 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 C, S
Application.Calculation = ModCalcul
Application.EnableEvents = True

End Sub




"marcus" a écrit dans le message de news:

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
Tatanka
Salut Marcus,

En supposant que la plage A1:A1000 contienne des
nombres dont certains sont nuls, essaie cette macro :

Sub Division()
Application.ScreenUpdating = False
For i = 1 To 1000
If i = 1000 Then Exit Sub
If Cells(i, 1) = 0 Then
Cells(i, 2) = 0
Else
For j = i + 1 To 1000
x = Cells(j, 1)
If x <> 0 Then Exit For
Next j
Cells(i, 2) = Cells(i, 1) / x
End If
x = 0
Next i
Application.ScreenUpdating = True
End Sub

Serge



"marcus" a écrit dans le message de news:
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
Bonsoir,

Au vu aussi des propositions de mes "petits camarades" mais...
comme je ne sais toujours pas à quoi c'est destiné, cela devient
surréaliste!
Pour l'instant mis à part Serge qui a rejoint mon idée de mettre un
exit for pour gagner du temps mais est-ce l'objectif puisque le code
initial écrase chaque valeur précédentes, veux t-on la première ou la
dernière, MD semble ne se poser même pas la question, ce qui
connaissant ses hautes capacités me rend encore plus perplexe sur ma
compréhension du but et du contexte. L'idée d'interrompre le calcul,
ça en revanche c'est très clair.
Isabelle propose If Not IsEmpty(c) <> 0 , cette forme là m'émeut
encore plus.
Aussi je vais aller faire un tour, boire un truc bien fort et
repasserais bien plus tard si j'y vois plus clair.
Il y a des jours comme ça où l'on se sent complètement à côté d e la
plaque.

@+

--
lSteph



On 30 oct, 15:41, marcus wrote:
Bonjour Lsteph
merci de ton aide. Je comprends que ce n'est pas si simple de faire tout
cela, et en plus, n'étant pas programmeur, alors....

Merci de ton aide, je l'apprécie


.... si le but est de pomper sans savoir pourquoi on pompe,
le code serait executé plus rapidement avec
exit for
en sortant ainsi de la boucle sitôt qu'une valeur de c satisfaisante
est rencontrée
, voire si c'est la dernière qui est souhaitée faire une boucle en
remontant,
tout cela dont il n'est pas évident que le but recherché ne soit pas
lié, donc
outre définir toutes les variables et suspendre le recalcul et les
évènements
mettre en haut du module.

Option explicit

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épo nse à mon
premier post. Merci à Patrick d'avoir essayé à régler mon pro blè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. Al ors 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






1 2 3