Je cherche =C3=A0 r=C3=A9duire le temps d'ex=C3=A9cution d'une macro.
Le code au bas prend au moins 6 secondes =C3=A0 s'ex=C3=A9cuter. Le range n=
'a pourtant que 10 cellules.
Croyez-vous qu'une formule pourrait =C3=AAtre possible afin de savoir si la=
colonne est visible ou non? Ou une autre fa=C3=A7on de faire?
Merci =C3=A0 l'avance.
For Each cell In Feuil42.Range("CN_RegulFilterRow2").Cells
If cell.Column <> Feuil42.Range("CN_RegulNumZone").Column Then
If cell.EntireColumn.Hidden =3D True Then
cell.Value =3D 1
Else
cell.Value =3D ""
End If
End If
Next
Bonjour, Je cherche à réduire le temps d'exécution d'une macro. Le code au bas prend au moins 6 secondes à s'exécuter. Le range n'a pourtant que 10 cellules. Croyez-vous qu'une formule pourrait être possible afin de savoir si la colonne est visible ou non? Ou une autre façon de faire? Merci à l'avance. For Each cell In Feuil42.Range("CN_RegulFilterRow2").Cells If cell.Column <> Feuil42.Range("CN_RegulNumZone").Column Then If cell.EntireColumn.Hidden = True Then cell.Value = 1 Else cell.Value = "" End If End If Next
Bonjour, En supposant que j'ai bien compris ce que tu voulais faire... N.B. C'est quand même bien d'expliquer un peu ce que tu veux faire plutôt que de nous demander de le déduire à partir de ton code! '---------------------------------- Sub test() Dim Col As Range Application.EnableEvents = False Application.ScreenUpdating = False For Each Col In Feuil42.Range("CN_RegulFilterRow2").Columns If Intersect(Col, Feuil42.Range("CN_RegulNumZone")) Is Nothing Then If Col.EntireColumn.Hidden = True Then Col.Value = 1 Else Col.Value ="" End If End If Next Application.EnableEvents = True Application.ScreenUpdating = True End Sub '---------------------------------- MichD
Le 15/02/20 à 18:12, Roland Miller a écrit :
Bonjour,
Je cherche à réduire le temps d'exécution d'une macro.
Le code au bas prend au moins 6 secondes à s'exécuter. Le range n'a pourtant que 10 cellules.
Croyez-vous qu'une formule pourrait être possible afin de savoir si la colonne est visible ou non? Ou une autre façon de faire?
Merci à l'avance.
For Each cell In Feuil42.Range("CN_RegulFilterRow2").Cells
If cell.Column <> Feuil42.Range("CN_RegulNumZone").Column Then
If cell.EntireColumn.Hidden = True Then
cell.Value = 1
Else
cell.Value = ""
End If
End If
Next
Bonjour,
En supposant que j'ai bien compris ce que tu voulais faire...
N.B. C'est quand même bien d'expliquer un peu ce que tu veux faire
plutôt que de nous demander de le déduire à partir de ton code!
For Each Col In Feuil42.Range("CN_RegulFilterRow2").Columns
If Intersect(Col, Feuil42.Range("CN_RegulNumZone")) Is Nothing Then
If Col.EntireColumn.Hidden = True Then
Col.Value = 1
Else
Col.Value =""
End If
End If
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
Bonjour, Je cherche à réduire le temps d'exécution d'une macro. Le code au bas prend au moins 6 secondes à s'exécuter. Le range n'a pourtant que 10 cellules. Croyez-vous qu'une formule pourrait être possible afin de savoir si la colonne est visible ou non? Ou une autre façon de faire? Merci à l'avance. For Each cell In Feuil42.Range("CN_RegulFilterRow2").Cells If cell.Column <> Feuil42.Range("CN_RegulNumZone").Column Then If cell.EntireColumn.Hidden = True Then cell.Value = 1 Else cell.Value = "" End If End If Next
Bonjour, En supposant que j'ai bien compris ce que tu voulais faire... N.B. C'est quand même bien d'expliquer un peu ce que tu veux faire plutôt que de nous demander de le déduire à partir de ton code! '---------------------------------- Sub test() Dim Col As Range Application.EnableEvents = False Application.ScreenUpdating = False For Each Col In Feuil42.Range("CN_RegulFilterRow2").Columns If Intersect(Col, Feuil42.Range("CN_RegulNumZone")) Is Nothing Then If Col.EntireColumn.Hidden = True Then Col.Value = 1 Else Col.Value ="" End If End If Next Application.EnableEvents = True Application.ScreenUpdating = True End Sub '---------------------------------- MichD
patrice.blasquez
Bonjour, Tu pourrais aussi limiter l'exploration à la zone utilisée For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Bonjour,
Tu pourrais aussi limiter l'exploration à la zone utilisée
For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Bonjour, Tu pourrais aussi limiter l'exploration à la zone utilisée For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Roland Miller
Bonjour, Concernant … N.B. C'est quand même bien d'expliquer un peu ce que tu veux faire plutôt que de nous demander de le déduire à partir de ton co de! OK. Merci de me le mentionner. Je vais m'efforcer de le faire. Merci je vais appliquer cette méthode.
Bonjour,
Concernant … N.B. C'est quand même bien d'expliquer un peu ce que tu veux faire
plutôt que de nous demander de le déduire à partir de ton co de!
OK. Merci de me le mentionner. Je vais m'efforcer de le faire.
Bonjour, Concernant … N.B. C'est quand même bien d'expliquer un peu ce que tu veux faire plutôt que de nous demander de le déduire à partir de ton co de! OK. Merci de me le mentionner. Je vais m'efforcer de le faire. Merci je vais appliquer cette méthode.
Geo
Bonjour
OK. Merci de me le mentionner. Je vais m'efforcer de le faire.
Ca va faire grimper la facture.
Bonjour
OK. Merci de me le mentionner. Je vais m'efforcer de le faire.
OK. Merci de me le mentionner. Je vais m'efforcer de le faire.
Ca va faire grimper la facture.
Geo
Tu pourrais aussi limiter l'exploration à la zone utilisée For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Autant que je me souvienne le for each est très gourmand. Pour une zone simple, ici une portion de colonne, il vaut mieux calculer les bornes, puis faire un for i = ... to ...
Tu pourrais aussi limiter l'exploration à la zone utilisée
For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Autant que je me souvienne le for each est très gourmand.
Pour une zone simple, ici une portion de colonne, il vaut mieux
calculer les bornes,
puis faire un for i = ... to ...
Tu pourrais aussi limiter l'exploration à la zone utilisée For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Autant que je me souvienne le for each est très gourmand. Pour une zone simple, ici une portion de colonne, il vaut mieux calculer les bornes, puis faire un for i = ... to ...
patrice.blasquez
Le lundi 17 février 2020 13:30:11 UTC+1, Geo a écrit :
Tu pourrais aussi limiter l'exploration à la zone utilisée For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Autant que je me souvienne le for each est très gourmand. Pour une zone simple, ici une portion de colonne, il vaut mieux calculer les bornes, puis faire un for i = ... to ...
For Each Cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells est moins gourmand que For iÞb to fin Il ne faut que 4 octets pour Cell (type Range) et Feuil42 existe en natif. Il faut 4+4+4 = 12 octets pour i + deb + fin (type Long)! Mais il y a maintenant plusieurs décennies qu'on ne se préoccupe plus de ces quelques octets de différence.
Le lundi 17 février 2020 13:30:11 UTC+1, Geo a écrit :
> Tu pourrais aussi limiter l'exploration à la zone utilisée
> For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Autant que je me souvienne le for each est très gourmand.
Pour une zone simple, ici une portion de colonne, il vaut mieux
calculer les bornes,
puis faire un for i = ... to ...
For Each Cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
est moins gourmand que
For i=deb to fin
Il ne faut que 4 octets pour Cell (type Range) et Feuil42 existe en natif.
Il faut 4+4+4 = 12 octets pour i + deb + fin (type Long)!
Mais il y a maintenant plusieurs décennies qu'on ne se préoccupe plus de ces quelques octets de différence.
Le lundi 17 février 2020 13:30:11 UTC+1, Geo a écrit :
Tu pourrais aussi limiter l'exploration à la zone utilisée For Each cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells
Autant que je me souvienne le for each est très gourmand. Pour une zone simple, ici une portion de colonne, il vaut mieux calculer les bornes, puis faire un for i = ... to ...
For Each Cell In Feuil42.Range("CN_RegulFilterRow2").UsedRange.Cells est moins gourmand que For iÞb to fin Il ne faut que 4 octets pour Cell (type Range) et Feuil42 existe en natif. Il faut 4+4+4 = 12 octets pour i + deb + fin (type Long)! Mais il y a maintenant plusieurs décennies qu'on ne se préoccupe plus de ces quelques octets de différence.
Geo
Bonjour
Mais il y a maintenant plusieurs décennies qu'on ne se préoccupe plus de ces quelques octets de différence.
Il me semble qu'on parlait surtout de vitesse d'exécution. Or, justement, il vaut mieux travailler en type long qu'en integer car le processeur travaille en type long, contrairement à autrefois.
Bonjour
Mais il y a maintenant plusieurs décennies qu'on ne se préoccupe plus de ces
quelques octets de différence.
Il me semble qu'on parlait surtout de vitesse d'exécution.
Or, justement, il vaut mieux travailler en type long qu'en integer car
le processeur travaille en type long, contrairement à autrefois.
Mais il y a maintenant plusieurs décennies qu'on ne se préoccupe plus de ces quelques octets de différence.
Il me semble qu'on parlait surtout de vitesse d'exécution. Or, justement, il vaut mieux travailler en type long qu'en integer car le processeur travaille en type long, contrairement à autrefois.