Bonjour tout le monde !

Je souhaiterai votre avis sur une macro que j'ai faite. Je suis convaincu qu'elle n'est absolument pas optimisée et d'ailleurs elle met environ 2 minutes pour s'executer. Bon après celle-ci doit traiter un tableau d'environ 100 colonnes sur 60000 lignes...(petit fichier de 35 Mo)

Je suis ouvert à toute critique qui pourrait me permettre de m'améliorer et d'améliorer ma macro

Je vous remercie par avance si vous jetez un coup d'oeil à la macro et que vous pouvez m'apporter votre contribution !

Bonne journée à vous la communauté

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
Sub Donnees()
 
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
 
Dim Source As String
Dim Cible As String
Dim Col As Long 'col pour la commune
Dim Col2 As Long 'col pour la superficie des constructions
Dim Col3 As Long 'col pour le type en habitation
Dim Col4 As Long 'col pour le type de construction (maison ou appartement)
Dim Col5 As Long 'col pour le nombre de nouvelles contructions
Dim Col6 As Long 'col pour l'année de construction
Dim Col7 As Long 'col pour le nombre de nouvelles maisons
Dim Col8 As Long 'col pour le nombre de nouveaux appartements
Dim Ligne As Long
Dim Ligne2 As Long
Dim DernLigne As Long
Dim DernLigne2 As Long
Dim DernCol As Long
 
Dim SomSup As String
Dim SomNewConsM As String
Dim SomNewConsA As String
Dim SomNewConsMi As String
Dim SomNewConsDep As String
Dim SomNewConsAct As String
Dim SomSupNewCons As String
 
Source = "source"
Cible = "tableau"
DernLigne = Sheets(Source).Range("A" & Rows.Count).End(xlUp).Row
DernLigne2 = Sheets(Cible).Range("A" & Rows.Count).End(xlUp).Row
DernCol = Sheets(Source).Cells(1, Columns.Count).End(xlToLeft).Column
Ligne2 = 3
 
 
For Col = 1 To DernCol
    If Sheets(Source).Cells(1, Col).Value = "idcomtxt" Then Exit For 'trouve la colonne de la commune
Next
 
For Col2 = 1 To DernCol
    If Sheets(Source).Cells(1, Col2).Value = "dcntpa" Then Exit For 'trouve la colonne de la superficie
Next
 
For Col3 = 1 To DernCol
    If Sheets(Source).Cells(1, Col3).Value = "tpevdom_s" Then Exit For 'trouve le type de construction en habitation
Next
 
For Col4 = 1 To DernCol
    If Sheets(Source).Cells(1, Col4).Value = "tlocdomin" Then Exit For 'trouve la colonne du type de construction en appart ou maison ou mixte ou dépendance ou activité
Next
 
For Col5 = 1 To DernCol
    If Sheets(Source).Cells(1, Col5).Value = "nlochabit" Then Exit For 'trouve la colonne nombre de construction nouvelles
Next
 
For Col6 = 1 To DernCol
    If Sheets(Source).Cells(1, Col6).Value = "jannatmin" Then Exit For 'trouve la colonne de la date de construction
Next
 
For Col7 = 1 To DernCol
    If Sheets(Source).Cells(1, Col7).Value = "nlocmaison" Then Exit For 'trouve la colonne de nombre de maisons nouvelles
Next
 
For Col8 = 1 To DernCol
    If Sheets(Source).Cells(1, Col8).Value = "nlocappt" Then Exit For 'trouve la colonne de nombre d'appartements nouveaux
Next
 
'MsgBox ("Col1 " & Col & " ; Col2 " & Col2 & " ; Col3 " & Col3 & " ; Col4 " & Col4 & " ; Col5 " & Col5 & " ; Col6 " & Col6)
 
For Ligne2 = 3 To DernLigne2
    SomSup = 0
    SomNewConsM = 0
    SomNewConsA = 0
    SomNewConsMi = 0
    SomNewConsDep = 0
    SomNewConsAct = 0
    SomSupNewCons = 0
 
    For Ligne = 2 To DernLigne
        If Sheets(Cible).Cells(Ligne2, 1) = Sheets(Source).Cells(Ligne, Col) Then 'correspondance des communes
 
            If Sheets(Source).Cells(Ligne, Col5) = "" Then      'on calcule nlochabit en faisant la somme de nlocmaison + nlocappt
                Sheets(Source).Cells(Ligne, Col5) = Sheets(Source).Cells(Ligne, Col7).Value + Sheets(Source).Cells(Ligne, Col8).Value
            End If
 
            If Sheets(Source).Cells(Ligne, Col5) > 0 Then                           'calcul du SomSup
                If Sheets(Source).Cells(Ligne, Col3) = "HABITATION" Then
                    If Sheets(Source).Cells(Ligne, Col2) < 10000 Then
                        SomSup = SomSup + Sheets(Source).Cells(Ligne, Col2).Value
                    End If
                End If
            End If
 
 
            If Sheets(Source).Cells(Ligne, Col6) >= 1999 Then                   'calcul des somnewcons
                If Sheets(Source).Cells(Ligne, Col3) = "HABITATION" Then
 
                    If Sheets(Source).Cells(Ligne, Col4) = "MAISON" Then
                        SomNewConsM = SomNewConsM + 1
                        SomSupNewCons = SomSupNewCons + Sheets(Source).Cells(Ligne, Col2).Value
                    End If
                    If Sheets(Source).Cells(Ligne, Col4) = "APPARTEMENT" Then
                        SomNewConsA = SomNewConsA + 1
                        SomSupNewCons = SomSupNewCons + Sheets(Source).Cells(Ligne, Col2).Value
                    End If
                    If Sheets(Source).Cells(Ligne, Col4) = "MIXTE" Then
                        SomNewConsMi = SomNewConsMi + 1
                        SomSupNewCons = SomSupNewCons + Sheets(Source).Cells(Ligne, Col2).Value
                    End If
                    If Sheets(Source).Cells(Ligne, Col4) = "DEPENDANCE" Then
                        SomNewConsDep = SomNewConsDep + 1
                        SomSupNewCons = SomSupNewCons + Sheets(Source).Cells(Ligne, Col2).Value
                    End If
                    If Sheets(Source).Cells(Ligne, Col4) = "ACTIVITE" Then
                        SomNewConsAct = SomNewConsAct + 1
                        SomSupNewCons = SomSupNewCons + Sheets(Source).Cells(Ligne, Col2).Value
                    End If
                End If
            End If
 
        End If
    Next
    Sheets(Cible).Cells(Ligne2, 2) = SomSup                                         'place les valeurs calculées dans le tableau
    Sheets(Cible).Cells(Ligne2, 3) = SomNewConsM
    Sheets(Cible).Cells(Ligne2, 4) = SomNewConsA
    Sheets(Cible).Cells(Ligne2, 5) = SomNewConsMi
    Sheets(Cible).Cells(Ligne2, 6) = SomNewConsDep
    Sheets(Cible).Cells(Ligne2, 7) = SomNewConsAct
    Sheets(Cible).Cells(Ligne2, 8) = SomSupNewCons
Next
 
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
PS : je viens de recréer ce post ici, car je ne sais pas si le premier post (identique en tous points) était dans la bonne section du forum.. Désolé pour le doublon