OVH Cloud OVH Cloud

Pourquoi le Set ralentit le code ?

3 réponses
Avatar
Ghislain Benrais
Bonjour les champions,
La seule différence entre les 2 procédures est l'emploi du set.
Quelqu'un peut il m'expliquer précisément ce que fait le set ?
Merci,
Sub Fast()

Sheets("1 - v1").Activate
Application.StatusBar = "Process"
lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
lastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
Set rngValues = ActiveSheet.UsedRange
For I = 1 To lastRow
For J = 1 To lastCol
strValue = rngValues(I, J)
Next J
Next I
Application.StatusBar = ""
End Sub
Sub Slow()

Sheets("1 - v1").Activate
Application.StatusBar = "Process"
lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
lastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
rngValues = ActiveSheet.UsedRange
For I = 1 To lastRow
For J = 1 To lastCol
strValue = rngValues(I, J)
Next J
Next I
Application.StatusBar = ""
End Sub

3 réponses

Avatar
Ghislain Benrais
Oooops! On l'aura remarqué, les noms des procédures sont inversées, le vrai
code :
Sub Slow()

Sheets("1 - v1").Activate
Application.StatusBar = "Process"
lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
lastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
Set rngValues = ActiveSheet.UsedRange
For I = 1 To lastRow
For J = 1 To lastCol
strValue = rngValues(I, J)
Next J
Next I
Application.StatusBar = ""
End Sub
Sub Fast()

Sheets("1 - v1").Activate
Application.StatusBar = "Process"
lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
lastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
rngValues = ActiveSheet.UsedRange
For I = 1 To lastRow
For J = 1 To lastCol
strValue = rngValues(I, J)
Next J
Next I
Application.StatusBar = ""
End Sub
Avatar
docm
Bonjour Ghislain Benrais.

rngValues = ActiveSheet.UsedRange
crée un tableau de type VARIANT contenant seulement les valeurs.

Set rngValues = ActiveSheet.UsedRange
crée un objet qui est une copie conforme de ActiveSheet.UsedRange avec
toutes ses multiples propriétés.

L'objet rngValues occupe un espace mémoire beaucoup plus considérable que le
tableau rngValues et donc, rechercher un élément de l'objet rngValues prend
plus de temps que de chercher un élément du tableau rngValues.

Amicalement
docm


"Ghislain Benrais" wrote in message
news:e5k771$t5h$
Oooops! On l'aura remarqué, les noms des procédures sont inversées, le
vrai

code :
Sub Slow()

Sheets("1 - v1").Activate
Application.StatusBar = "Process"
lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
lastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
Set rngValues = ActiveSheet.UsedRange
For I = 1 To lastRow
For J = 1 To lastCol
strValue = rngValues(I, J)
Next J
Next I
Application.StatusBar = ""
End Sub
Sub Fast()

Sheets("1 - v1").Activate
Application.StatusBar = "Process"
lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
lastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
rngValues = ActiveSheet.UsedRange
For I = 1 To lastRow
For J = 1 To lastCol
strValue = rngValues(I, J)
Next J
Next I
Application.StatusBar = ""
End Sub




Avatar
Ghislain Benrais