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
isabelle
bonjour Marcus,

si c'est pour tester si une cellule est vide, essai comme ça,

If Not IsEmpty(c) <> 0 Then

isabelle

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
Et si la liste des données finit par un ou des 0,
ma macro bogue. Alors mettre un On Error GoTo FIN
au début de la macro et FIN: à la fin ;-)
Pas très élégant !
En ajoutant ça et si la liste, par exemple, se termine par
10
5
0
0
0
alors les calculs s'arrêtent à 10 et 2 apparaît dans la colonne B.

Serge


"lSteph" a écrit dans le message de news:
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é de 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é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
| MD semble ne se poser même pas la question

Et oui, quand j'ai répondu (première réponse du fil)
je n'avais pas la donne du problème mais seulement
la procédure d'isabelle.

Depuis, il a ajouté ceci :
****************************
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.

****************************
Il parle de cellule contenant le caractère 0 et non égale à zéro ???
Et,
Dans les cellules qui ont le caractère 0, devrait-on ajouté la formule
ou indiqué simplement le résultat 0 ????

Sans énoncé clair, difficile de se pencher sur la problématique !!!



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

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é de 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é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
isabelle
oups visiblement je n'avais pas tout lu, mais suis contente tout de même de t'avoir ému ;-)
isabelle

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é de 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é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
Jacquouille
Hé hé
Le Jean Paul, il ne va pas être jaloux? -)

--
Bien amicalmement,
Le vin est au repas ce que le parfum est à la femme.

Jacquouille.

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

oups visiblement je n'avais pas tout Bu, mais suis contente tout de même
de t'avoir ému ;-)
isabelle


Avatar
LSteph
;o))

ouf!! Merci les amis,pour ces précisions, je me demandais si je perdais
la boule.

En cherchant il semble bien qu'Isabelle avait
déjà suggèré dans le code d'origine cet Exit For
(je précise Jacquouille il s'agit juste de sortir de la boucle)

Sans énoncé clair, difficile de se pencher sur la problématique !!!
Bien de cet avis.


Cordialement.

--
lSteph




| MD semble ne se poser même pas la question

Et oui, quand j'ai répondu (première réponse du fil)
je n'avais pas la donne du problème mais seulement
la procédure d'isabelle.

Depuis, il a ajouté ceci :
****************************
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.

****************************
Il parle de cellule contenant le caractère 0 et non égale à zéro ???
Et,
Dans les cellules qui ont le caractère 0, devrait-on ajouté la formule
ou indiqué simplement le résultat 0 ????

Sans énoncé clair, difficile de se pencher sur la problématique !!!



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

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é de 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é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,
Marcus si tu le souhaites tu peux aussi donner un exemple réduit de ton
classeur là http://cjoint.com
et revenir ici donner le lien et tout éclaircissement.

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
LSteph
Oui j'aurais pensé
If Not IsEmpty(c) And c <> 0

car supposons

Dim c as range
set c¬tivecell
If Not IsEmpty(c) <> 0 then msgbox "zaza"

si c contient 0 le message s'affiche quand même!

Mais c'est peut-être ça qui est voulu.

;-)

@+
lSteph


oups visiblement je n'avais pas tout lu, mais suis contente tout de même
de t'avoir ému ;-)
isabelle

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é de 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é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
Francois L

Bonsoir,

Sauf si je n'ai rien compris... et en supposant les valeur en A de 1 à
3290, j'aurais écrit ce qui suit :

Sub zaza()
For i = 1 To 3290
val1 = Range("A" & i).Value
j = i + 1
Do Until Range("A" & j).Value <> 0
If IsEmpty(Range("A" & j)) Then Exit Sub
j = j + 1
Loop
val2 = Range("A" & j).Value
Range("B" & i).Value = val1 / val2
Next
End Sub




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

Ce message m'apparaît seulement.
Cet après midi, d'où j'étais je ne le voyais pas, sincèrement confus !
Je comprends mieux maintenant,itou ce dont parlait MD.

Cordialement.

--
lSteph


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








1 2 3