VBA optimiser code

narfazel

XLDnaute Nouveau
Bonjour,

A l'aide de différentes aides j'ai fait une macro pour copier/réorganiser/coller un tableau de valeurs en utilisant l’équivalent de la fonction "Transposer". Seulement j'ai beaucoup de lignes à faire et je pense qu'il est possible d'optimiser le code pour que cela aille plus vite... Pourriez-vous m'aidez?

Voici une des quatre macros que je dois utiliser. Je joins le fichier complet.

Sub trivent()

Dim i As Integer
Dim j As Integer

For i = 4 To 11
Sheets("Donnees").Select
Range(Cells(i, 2), Cells(i, 9)).Select
Selection.Copy
Sheets("Tri").Select
Cells(Rows.Count, 3).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Next

End Sub


Merci d'avance
 

Pièces jointes

  • essai.xlsm
    21.4 KB · Affichages: 41
  • essai.xlsm
    21.4 KB · Affichages: 44
  • essai.xlsm
    21.4 KB · Affichages: 44

CHALET53

XLDnaute Barbatruc
Re : VBA optimiser code

Essaie ce programme dans un module

Sub essai()
Application.ScreenUpdating = False
Sheets("tri").Range("A:D").ClearContents
Sheets("Donnees").Activate
ligne = 1
With Sheets("tri")
For i = 4 To 11
For j = 2 To 9
ligne = ligne + 1
.Range("A" & ligne) = Range("A" & i)
.Range("B" & ligne) = Cells(3, j)
Next j
Next i
ligne = 1
For i = 4 To 11
For j = 2 To 9
ligne = ligne + 1

.Range("C" & ligne) = Cells(i, j)
Next j
Next i

ligne = 1
For i = 4 To 11
For j = 10 To 17
ligne = ligne + 1

.Range("D" & ligne) = Cells(i, j)
Next j
Next i
End With


End Sub

lire : A suivi de 2 points suivi de D
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA optimiser code

Bonjour Narfazel, Chalet, bonjour le forum,

une autre poposition :
Code:
Sub Macro1()
Dim D As Object 'déclare la variable D (onglet Donnees)
Dim T As Object 'déclare la variable T (onglet Tri)
Dim I As Byte 'déclare la variable I
Dim J As Byte 'déclare la variable J

Set D = Sheets("Donnees") 'définit l'onglet D
Set T = Sheets("TRI") 'définit l'onglet T
For I = 4 To 11 'boucle 1 : des lignes 4 à 11
    D.Range(Cells(I, 2), Cells(I, 9)).Copy 'copie les cellules des colonnes B à I de la ligne I
    'colle les données dans la première ligne vide de la colonne 3 (=C) de l'onglet Tri
    T.Cells(Rows.Count, 3).End(xlUp)(2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
      False, Transpose:=True
    D.Range(Cells(I, 10), Cells(I, 17)).Copy 'copie les cellules des colonnes J à Q de la ligne I
    'colle les données dans la première ligne vide de la colonne 4 (=D) de l'onglet Tri
    T.Cells(Rows.Count, 4).End(xlUp)(2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True
    D.Range(Cells(3, 2), Cells(3, 9)).Copy 'copie les cellules des colonnes B à I de la ligne 3
    'colle les données dans la première ligne vide de la colonne 2 (=B) de l'onglet Tri
    T.Cells(Rows.Count, 2).End(xlUp)(2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True
    For J = 1 To 8 'boucle 2 : de 1 à 8 (= 8 fois)
        'copie la cellule ligne I, colonne 1 et la colle dans la première ligne vide de la colonne 1 (=A)
        D.Cells(I, 1).Copy T.Cells(Rows.Count, 1).End(xlUp)(2)
    Next J 'prichaine fois de la boucle 2
Next I 'prochaine colonne de la boucle 1
End Sub
 

Discussions similaires

Réponses
2
Affichages
177

Statistiques des forums

Discussions
312 745
Messages
2 091 581
Membres
105 003
dernier inscrit
Aurore.B