Optimisation

  • Initiateur de la discussion VINCE
  • Date de début
V

VINCE

Guest
Voici ma procédure :

Sub Cumul()
For i = 1 To 20000
' On copie les données
Worksheets("NATOP051").Select
Range(Cells(i, 4), Cells(i, 26)).Copy
Worksheets("Cumul").Select
' On les colle dans "Cumul"
Range(Cells(i, 2), Cells(i, 24)).PasteSpecial _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Le problème est que je voudrais éliminer l'instruction "Worksheets("NATOP051").Select" pour accélérer le traitement.
Je voudrai utiliser une instruction du genre :
Worksheets("NATOP051").Range(Cells(i, 4), Cells(i, 26)).Copy
Mais celle-ci ne fonctionne pas !! Donc si vous avez des idées pour cette optimisation elles seront les bienvenu.

MERCI
 
S

Sylvain

Guest
bonjour,
il doit y avoir mieux, mais on doit pouvoir créer une variable texte :

plage="NATOPO51!D"+i+":Z"+i
il doit y avoir une fontion pour la concaténation de i qui n'est pas une variable texte (du style ctxt).

range(plage).copy

A+
 
B

BERINGUE

Guest
Comment faire en sorte qu'une feuille excel se cale sur la dernière cellule logiquement enregistrée et non sur une "loufoque" qui peut se situer à la 65 000ème ligne.

Les solution consistant à effacer ou à supprimer lignes et colonnes inutiles ne marchent pas toujours, loin s'en faut.

Merci d'avance.
 
S

STéphane

Guest
utiliser ma deuxième solution serait déjà mieux

Sub Cumul()
t1 = Time
For i = 1 To 20000
' On copie les données
With ActiveWorkbook
.Sheets("feuil1").Select: Range(Cells(i, 4), Cells(i, 26)).Copy
.Sheets("feuil2").Select: Range(Cells(i, 2), Cells(i, 24)).Select: Selection.PasteSpecial _
Operation:=xlPasteSpecialOperationAdd
End With
Next
MsgBox (Time - t1)
End Sub

Sub test()
Application.ScreenUpdating = False
With ActiveWorkbook
.Sheets("feuil1").Select: Range(Cells(1, 4), Cells(2000, 26)).Copy
.Sheets("feuil2").Select: Range(Cells(1, 2), Cells(2000, 24)).PasteSpecial _
Operation:=xlPasteSpecialOperationAdd
.Sheets("feuil2").Range("A1").Activate
End With
End Sub

hth

bye
stephane
 
V

VINCE

Guest
Sub Cumul()
t1 = Time
For i = 1 To 20000
' On copie les données
With ActiveWorkbook
.Sheets("feuil1").Select: Range(Cells(i, 4), Cells(i, 26)).Copy
.Sheets("feuil2").Select: Range(Cells(i, 2), Cells(i, 24)).Select: Selection.PasteSpecial _
Operation:=xlPasteSpecialOperationAdd
End With
Next
MsgBox (Time - t1)
End Sub

En fait j'aurai du mttre ca :
.Sheets("feuil2").Select: Range(Cells(j, 2), Cells(j, 24)).Select:
sachant que j est calculé dans une autre boucle...
 

Discussions similaires

Réponses
3
Affichages
567
Réponses
7
Affichages
419

Statistiques des forums

Discussions
312 080
Messages
2 085 152
Membres
102 794
dernier inscrit
espinata