OVH Cloud OVH Cloud

Dégradation de la vitesse de PasteSpecial sur une grande plage

4 réponses
Avatar
xlb
Bonjour

Avec Excel 2002, j'ai une macro VBA :

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

MaPlage.Copy
MaPlage.PasteSpecial(xlValues)


Je suis très surpris par l'augmentation non proportionnelle de la durée avec
la taille de la plage.
Exemple d'augmentation en largeur
1000 x 50 : 2"
1000 x 100 : 9"
1000 x 200 : 40"

Exemple d'augmentation en hauteur
1000 x 20 : 1"
2000 x 20 : 13"
3000 x 20 : 29"
4000 x 20 : 45"

Exemple pour 100.000 cellules :
1000 x 100 : 9"
2000 x 50 : 28"
4000 x 25 : 57"
10000 x 10 : 79"
et aussi
400 x 250 : 35"

Ce problème est-il connu ?
Existe-t-il une solution : changer de méthode de collage ? découper en
plusieurs zones ?

Merci de vos lumières exceliennes !

Xavier

4 réponses

Avatar
MichDenis
Bonjour Xlb,

Si tu utilises ceci :

'--------------------------------------
Sub Copier()

Dim MaPlage As Range
Dim Dest As Range

Set MaPlage = ThisWorkbook.Worksheets("Feuil1").Range("A1:G50")
Set Dest = Workbooks("AutreClasseur.xls").Worksheets("Feuil1").Range("A1")

MaPlage.Copy Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count)

Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value = _
Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value

Set MaPlage = Nothing: Set Dest = Nothing

End Sub
'--------------------------------------


Salutations!



"xlb" a écrit dans le message de news: 421713a3$0$29167$
Bonjour

Avec Excel 2002, j'ai une macro VBA :

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

MaPlage.Copy
MaPlage.PasteSpecial(xlValues)


Je suis très surpris par l'augmentation non proportionnelle de la durée avec
la taille de la plage.
Exemple d'augmentation en largeur
1000 x 50 : 2"
1000 x 100 : 9"
1000 x 200 : 40"

Exemple d'augmentation en hauteur
1000 x 20 : 1"
2000 x 20 : 13"
3000 x 20 : 29"
4000 x 20 : 45"

Exemple pour 100.000 cellules :
1000 x 100 : 9"
2000 x 50 : 28"
4000 x 25 : 57"
10000 x 10 : 79"
et aussi
400 x 250 : 35"

Ce problème est-il connu ?
Existe-t-il une solution : changer de méthode de collage ? découper en
plusieurs zones ?

Merci de vos lumières exceliennes !

Xavier
Avatar
xlb
Merci pour la réponse, mais il doit manquer quelque chose : il faut recopier
Dest vers MaPlage ?

Sinon, je ne comprends pas la logique de passer par un autre classeur

Xavier


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

Bonjour Xlb,

Si tu utilises ceci :

'--------------------------------------
Sub Copier()

Dim MaPlage As Range
Dim Dest As Range

Set MaPlage = ThisWorkbook.Worksheets("Feuil1").Range("A1:G50")
Set Dest = Workbooks("AutreClasseur.xls").Worksheets("Feuil1").Range("A1")

MaPlage.Copy Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count)

Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value = _
Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value

Set MaPlage = Nothing: Set Dest = Nothing

End Sub
'--------------------------------------


Salutations!



"xlb" a écrit dans le message de news:
421713a3$0$29167$
Bonjour

Avec Excel 2002, j'ai une macro VBA :

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

MaPlage.Copy
MaPlage.PasteSpecial(xlValues)


Je suis très surpris par l'augmentation non proportionnelle de la durée
avec
la taille de la plage.
Exemple d'augmentation en largeur
1000 x 50 : 2"
1000 x 100 : 9"
1000 x 200 : 40"

Exemple d'augmentation en hauteur
1000 x 20 : 1"
2000 x 20 : 13"
3000 x 20 : 29"
4000 x 20 : 45"

Exemple pour 100.000 cellules :
1000 x 100 : 9"
2000 x 50 : 28"
4000 x 25 : 57"
10000 x 10 : 79"
et aussi
400 x 250 : 35"

Ce problème est-il connu ?
Existe-t-il une solution : changer de méthode de collage ? découper en
plusieurs zones ?

Merci de vos lumières exceliennes !

Xavier





Avatar
MichDenis
"de passer par un autre classeur"


Dest = représente l'endroit où doivent être copiées les données.... à toi d'inscrire le chemin qui convient

Le nom des feuilles et des plages de cellules doivent être adoptées

'---------------------------
Sub Copier()

Dim MaPlage As Range
Dim Dest As Range

'Plage source qui doit être copié
Set MaPlage = ThisWorkbook.Worksheets("Feuil1").Range("A1:G50") 'à déterminer

'PLage où seront copiées les données
Set Dest = ThisWorkbook.Worksheets("Feuil2").Range("A1") 'à déterminer

MaPlage.Copy Dest

Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value = _
Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value

Set MaPlage = Nothing: Set Dest = Nothing

End Sub
'---------------------------


Salutations!



"xlb" a écrit dans le message de news: 42178f71$0$20427$
Merci pour la réponse, mais il doit manquer quelque chose : il faut recopier
Dest vers MaPlage ?

Sinon, je ne comprends pas la logique de passer par un autre classeur

Xavier


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

Bonjour Xlb,

Si tu utilises ceci :

'--------------------------------------
Sub Copier()

Dim MaPlage As Range
Dim Dest As Range

Set MaPlage = ThisWorkbook.Worksheets("Feuil1").Range("A1:G50")
Set Dest = Workbooks("AutreClasseur.xls").Worksheets("Feuil1").Range("A1")

MaPlage.Copy Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count)

Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value = _
Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value

Set MaPlage = Nothing: Set Dest = Nothing

End Sub
'--------------------------------------


Salutations!



"xlb" a écrit dans le message de news:
421713a3$0$29167$
Bonjour

Avec Excel 2002, j'ai une macro VBA :

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

MaPlage.Copy
MaPlage.PasteSpecial(xlValues)


Je suis très surpris par l'augmentation non proportionnelle de la durée
avec
la taille de la plage.
Exemple d'augmentation en largeur
1000 x 50 : 2"
1000 x 100 : 9"
1000 x 200 : 40"

Exemple d'augmentation en hauteur
1000 x 20 : 1"
2000 x 20 : 13"
3000 x 20 : 29"
4000 x 20 : 45"

Exemple pour 100.000 cellules :
1000 x 100 : 9"
2000 x 50 : 28"
4000 x 25 : 57"
10000 x 10 : 79"
et aussi
400 x 250 : 35"

Ce problème est-il connu ?
Existe-t-il une solution : changer de méthode de collage ? découper en
plusieurs zones ?

Merci de vos lumières exceliennes !

Xavier





Avatar
xlb
Michel,

Je veux faire un copier coller valeurs au même endroit :

MaPlage.Copy
MaPlage.PasteSpecial xlPasteValues

ou

MaPlage.Value = MaPlage.Value

donnent le même résultat et la même durée.
La deuxième est sans doute meilleure car elle évite le presse-papiers.

Ce matin, la durée est divisée par deux.
Ces variations sont étranges.
(Je suis sur un ordinateur déconnecté d'internet)

Xavier


"MichDenis" a écrit dans le message de news:
Oc%
"de passer par un autre classeur"


Dest = représente l'endroit où doivent être copiées les données.... à toi
d'inscrire le chemin qui convient

Le nom des feuilles et des plages de cellules doivent être adoptées

'---------------------------
Sub Copier()

Dim MaPlage As Range
Dim Dest As Range

'Plage source qui doit être copié
Set MaPlage = ThisWorkbook.Worksheets("Feuil1").Range("A1:G50") 'à
déterminer

'PLage où seront copiées les données
Set Dest = ThisWorkbook.Worksheets("Feuil2").Range("A1") 'à déterminer

MaPlage.Copy Dest

Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value = _
Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value

Set MaPlage = Nothing: Set Dest = Nothing

End Sub
'---------------------------


Salutations!



"xlb" a écrit dans le message de news:
42178f71$0$20427$
Merci pour la réponse, mais il doit manquer quelque chose : il faut
recopier
Dest vers MaPlage ?

Sinon, je ne comprends pas la logique de passer par un autre classeur

Xavier


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

Bonjour Xlb,

Si tu utilises ceci :

'--------------------------------------
Sub Copier()

Dim MaPlage As Range
Dim Dest As Range

Set MaPlage = ThisWorkbook.Worksheets("Feuil1").Range("A1:G50")
Set Dest =
Workbooks("AutreClasseur.xls").Worksheets("Feuil1").Range("A1")

MaPlage.Copy Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count)

Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value = _
Dest.Resize(MaPlage.Rows.Count, MaPlage.Columns.Count).Value

Set MaPlage = Nothing: Set Dest = Nothing

End Sub
'--------------------------------------


Salutations!



"xlb" a écrit dans le message de news:
421713a3$0$29167$
Bonjour

Avec Excel 2002, j'ai une macro VBA :

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

MaPlage.Copy
MaPlage.PasteSpecial(xlValues)


Je suis très surpris par l'augmentation non proportionnelle de la durée
avec
la taille de la plage.
Exemple d'augmentation en largeur
1000 x 50 : 2"
1000 x 100 : 9"
1000 x 200 : 40"

Exemple d'augmentation en hauteur
1000 x 20 : 1"
2000 x 20 : 13"
3000 x 20 : 29"
4000 x 20 : 45"

Exemple pour 100.000 cellules :
1000 x 100 : 9"
2000 x 50 : 28"
4000 x 25 : 57"
10000 x 10 : 79"
et aussi
400 x 250 : 35"

Ce problème est-il connu ?
Existe-t-il une solution : changer de méthode de collage ? découper en
plusieurs zones ?

Merci de vos lumières exceliennes !

Xavier