Bonjour à tous,

Dans le cadre du travail je dois réaliser le transfert de données depuis un fichier Excel vers une base Access. Avant de faire cela, il faut donc mettre en forme mes données.

Etat initial
1 2 3 a b
4 5 6 d e

Etat Final
1 2 3 a
1 2 3 b
4 5 6 d
4 5 6 e

pour cela j'ai réalisé une macro simple qui fonctionne plutôt bien qui sert à passe de l'état initial à l'état final (voir ci dessus) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
k = 2
i = 0
j = 0
 
For j = 28 To 172
    For i = 17 To 232
 
         Sheets("Feuil1").Cells(k, 1).Value = Sheets("2017Original_V1").Cells(i, 1).Value
         Sheets("Feuil1").Cells(k, 2).Value = Sheets("2017Original_V1").Cells(i, 2).Value
         Sheets("Feuil1").Cells(k, 3).Value = Sheets("2017Original_V1").Cells(i, 3).Value
         Sheets("Feuil1").Cells(k, 4).Value = Sheets("2017Original_V1").Cells(i, 4).Value
         Sheets("Feuil1").Cells(k, 5).Value = Sheets("2017Original_V1").Cells(i, 5).Value
         Sheets("Feuil1").Cells(k, 6).Value = Sheets("2017Original_V1").Cells(i, 6).Value
         Sheets("Feuil1").Cells(k, 7).Value = Sheets("2017Original_V1").Cells(i, 7).Value
         Sheets("Feuil1").Cells(k, 8).Value = Sheets("2017Original_V1").Cells(i, 8).Value
         Sheets("Feuil1").Cells(k, 9).Value = Sheets("2017Original_V1").Cells(i, 9).Value
         Sheets("Feuil1").Cells(k, 10).Value = Sheets("2017Original_V1").Cells(i, 10).Value
         Sheets("Feuil1").Cells(k, 11).Value = Sheets("2017Original_V1").Cells(i, 11).Value
         Sheets("Feuil1").Cells(k, 12).Value = Sheets("2017Original_V1").Cells(i, 12).Value
         Sheets("Feuil1").Cells(k, 13).Value = Sheets("2017Original_V1").Cells(i, 13).Value
         Sheets("Feuil1").Cells(k, 14).Value = Sheets("2017Original_V1").Cells(i, 14).Value
         Sheets("Feuil1").Cells(k, 15).Value = Sheets("2017Original_V1").Cells(i, 15).Value
         Sheets("Feuil1").Cells(k, 16).Value = Sheets("2017Original_V1").Cells(i, 16).Value
         Sheets("Feuil1").Cells(k, 17).Value = Sheets("2017Original_V1").Cells(i, 17).Value
         Sheets("Feuil1").Cells(k, 18).Value = Sheets("2017Original_V1").Cells(i, 18).Value
         Sheets("Feuil1").Cells(k, 19).Value = Sheets("2017Original_V1").Cells(i, 19).Value
         Sheets("Feuil1").Cells(k, 20).Value = Sheets("2017Original_V1").Cells(i, 20).Value
         Sheets("Feuil1").Cells(k, 21).Value = Sheets("2017Original_V1").Cells(i, 21).Value
         Sheets("Feuil1").Cells(k, 22).Value = Sheets("2017Original_V1").Cells(i, 22).Value
         Sheets("Feuil1").Cells(k, 23).Value = Sheets("2017Original_V1").Cells(i, 23).Value
         Sheets("Feuil1").Cells(k, 24).Value = Sheets("2017Original_V1").Cells(i, 24).Value
         Sheets("Feuil1").Cells(k, 25).Value = Sheets("2017Original_V1").Cells(i, 25).Value
         Sheets("Feuil1").Cells(k, 26).Value = Sheets("2017Original_V1").Cells(i, 26).Value
         Sheets("Feuil1").Cells(k, 27).Value = Sheets("2017Original_V1").Cells(i, 27).Value
 
         Sheets("Feuil1").Cells(k, 28).Value = Sheets("2017Original_V1").Cells(15, j).Value 'programmes
 
         Sheets("Feuil1").Cells(k, 29).Value = Sheets("2017Original_V1").Cells(i, j).Value 'couts
 
            k = k + 1
  Next i
Next j
Cependant vous pouvez voir qu'il y à 27 colonnes à reporter (144*215) 30960 fois ( soit 30960 lignes).
J'ai fait tourné le code de 17h le soir à 9h le matin pour au final n'avoir que 10 000 lignes transposées.

Comment faire pour optimiser la rapidité de mon code ? Ou quelle méthode alternative utiliser ?

En vous remerciant d'avance,
TartesAuxPommes