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

lenteur d'une macro

4 réponses
Avatar
marcus
Bonjour à vous tous.
Voici mon problème. Dans une colonne, j'ai des chiffres et parfois le
chiffre zéro. 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=12 ici la formule devrait être A1/A2
A2=2 ici 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.

J'avais déjà posté ce problème et Isabelle m'avait trouvé cette merveilleuse
macro qui fonctionne super bien.

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

Le problème: c'est que si je change AC1029 pour AC40, la macro prend 20
secondes à s'exécuter, mais dans la réalité, je dois aller jusqu'à AC1029 et
là, après 10 minutes, aucune réponse ne s'affichait, il travaillait toujours.
Le fichier pèse 1,80 MO (Ce qui n'est pas vraiment énorme) et il y a qu'une
seule feuille.

Que dois-je faire pour améliorer la macro. Est-ce le code qui est trop lent,
mon ordinateur, etc.

Merci de votre aide

Marc

4 réponses

Avatar
Patrick
Bonjour,

Il y a d'abord une chose que tu peux faire, toujours en VBA : Mettre une
formule dans la colonne "AD" qui fera le même calcul que fait ta macro (par
exemple dans AD1 "=SI(A1<>0,AC1/A1,"")) et ensuite faire un copier/coller les
valeurs. Je pense que cela permettra d'aller beaucoup plus vide.

Je ne connais pas ton fichier mais, si il contient beaucoup de formules, tu
peux aussi commencer ta macro en mettant le recalcul à manuel puis remettre
le recalcul à automatique à la fin.

Bonne journée.

--
Patrick


"marcus" wrote:

Bonjour à vous tous.
Voici mon problème. Dans une colonne, j'ai des chiffres et parfois le
chiffre zéro. 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 ici la formule devrait être A1/A2
A2=2 ici 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.

J'avais déjà posté ce problème et Isabelle m'avait trouvé cette merveilleuse
macro qui fonctionne super bien.

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

Le problème: c'est que si je change AC1029 pour AC40, la macro prend 20
secondes à s'exécuter, mais dans la réalité, je dois aller jusqu'à AC1029 et
là, après 10 minutes, aucune réponse ne s'affichait, il travaillait toujours.
Le fichier pèse 1,80 MO (Ce qui n'est pas vraiment énorme) et il y a qu'une
seule feuille.

Que dois-je faire pour améliorer la macro. Est-ce le code qui est trop lent,
mon ordinateur, etc.

Merci de votre aide

Marc


Avatar
marcus
Bonjour Patrick
Merci énormément de ton aide, mais n'étant pas du tout programmeur, je ne
sais pas comment faire ce que tu me conseilles de faire. Peut-tu m'aider à
modifier ma macro, svp.
Merci de ton aide

Marc


Bonjour,

Il y a d'abord une chose que tu peux faire, toujours en VBA : Mettre une
formule dans la colonne "AD" qui fera le même calcul que fait ta macro (par
exemple dans AD1 "=SI(A1<>0,AC1/A1,"")) et ensuite faire un copier/coller les
valeurs. Je pense que cela permettra d'aller beaucoup plus vide.

Je ne connais pas ton fichier mais, si il contient beaucoup de formules, tu
peux aussi commencer ta macro en mettant le recalcul à manuel puis remettre
le recalcul à automatique à la fin.

Bonne journée.

--
Patrick


"marcus" wrote:

Bonjour à vous tous.
Voici mon problème. Dans une colonne, j'ai des chiffres et parfois le
chiffre zéro. 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 ici la formule devrait être A1/A2
A2=2 ici 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.

J'avais déjà posté ce problème et Isabelle m'avait trouvé cette merveilleuse
macro qui fonctionne super bien.

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

Le problème: c'est que si je change AC1029 pour AC40, la macro prend 20
secondes à s'exécuter, mais dans la réalité, je dois aller jusqu'à AC1029 et
là, après 10 minutes, aucune réponse ne s'affichait, il travaillait toujours.
Le fichier pèse 1,80 MO (Ce qui n'est pas vraiment énorme) et il y a qu'une
seule feuille.

Que dois-je faire pour améliorer la macro. Est-ce le code qui est trop lent,
mon ordinateur, etc.

Merci de votre aide

Marc




Avatar
Patrick
Le mieux serait que tu utilises l'enregistreur de macros. Comme cela tu fais
tout manuellement une fois et ensuite tu copies la macro générée dans ton
code.
Pour le recalcul, il faut utiliser "Application.Calculation". Quand tu
mettras un "=" après, VBA te proposera les valeurs que tu peux utiliser. Tu
verras c'est très simple à faire.

--
Patrick


"marcus" wrote:

Bonjour Patrick
Merci énormément de ton aide, mais n'étant pas du tout programmeur, je ne
sais pas comment faire ce que tu me conseilles de faire. Peut-tu m'aider à
modifier ma macro, svp.
Merci de ton aide

Marc


Bonjour,

Il y a d'abord une chose que tu peux faire, toujours en VBA : Mettre une
formule dans la colonne "AD" qui fera le même calcul que fait ta macro (par
exemple dans AD1 "=SI(A1<>0,AC1/A1,"")) et ensuite faire un copier/coller les
valeurs. Je pense que cela permettra d'aller beaucoup plus vide.

Je ne connais pas ton fichier mais, si il contient beaucoup de formules, tu
peux aussi commencer ta macro en mettant le recalcul à manuel puis remettre
le recalcul à automatique à la fin.

Bonne journée.

--
Patrick


"marcus" wrote:

Bonjour à vous tous.
Voici mon problème. Dans une colonne, j'ai des chiffres et parfois le
chiffre zéro. 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 ici la formule devrait être A1/A2
A2=2 ici 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.

J'avais déjà posté ce problème et Isabelle m'avait trouvé cette merveilleuse
macro qui fonctionne super bien.

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

Le problème: c'est que si je change AC1029 pour AC40, la macro prend 20
secondes à s'exécuter, mais dans la réalité, je dois aller jusqu'à AC1029 et
là, après 10 minutes, aucune réponse ne s'affichait, il travaillait toujours.
Le fichier pèse 1,80 MO (Ce qui n'est pas vraiment énorme) et il y a qu'une
seule feuille.

Que dois-je faire pour améliorer la macro. Est-ce le code qui est trop lent,
mon ordinateur, etc.

Merci de votre aide

Marc






Avatar
marcus
Bonjour Patrick
Effectivement, ce fût très simple à exécuter (la macro), par contre, cela
règle en rien mon problème car cela prend autant de temps à exécuter. Merci
de ton aide et je suis un peu découragé .

Merci
Marcus


Le mieux serait que tu utilises l'enregistreur de macros. Comme cela tu fais
tout manuellement une fois et ensuite tu copies la macro générée dans ton
code.
Pour le recalcul, il faut utiliser "Application.Calculation". Quand tu
mettras un "=" après, VBA te proposera les valeurs que tu peux utiliser. Tu
verras c'est très simple à faire.

--
Patrick


"marcus" wrote:

Bonjour Patrick
Merci énormément de ton aide, mais n'étant pas du tout programmeur, je ne
sais pas comment faire ce que tu me conseilles de faire. Peut-tu m'aider à
modifier ma macro, svp.
Merci de ton aide

Marc


Bonjour,

Il y a d'abord une chose que tu peux faire, toujours en VBA : Mettre une
formule dans la colonne "AD" qui fera le même calcul que fait ta macro (par
exemple dans AD1 "=SI(A1<>0,AC1/A1,"")) et ensuite faire un copier/coller les
valeurs. Je pense que cela permettra d'aller beaucoup plus vide.

Je ne connais pas ton fichier mais, si il contient beaucoup de formules, tu
peux aussi commencer ta macro en mettant le recalcul à manuel puis remettre
le recalcul à automatique à la fin.

Bonne journée.

--
Patrick


"marcus" wrote:

Bonjour à vous tous.
Voici mon problème. Dans une colonne, j'ai des chiffres et parfois le
chiffre zéro. 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 ici la formule devrait être A1/A2
A2=2 ici 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.

J'avais déjà posté ce problème et Isabelle m'avait trouvé cette merveilleuse
macro qui fonctionne super bien.

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

Le problème: c'est que si je change AC1029 pour AC40, la macro prend 20
secondes à s'exécuter, mais dans la réalité, je dois aller jusqu'à AC1029 et
là, après 10 minutes, aucune réponse ne s'affichait, il travaillait toujours.
Le fichier pèse 1,80 MO (Ce qui n'est pas vraiment énorme) et il y a qu'une
seule feuille.

Que dois-je faire pour améliorer la macro. Est-ce le code qui est trop lent,
mon ordinateur, etc.

Merci de votre aide

Marc