Sub Macro1()
Dim P As Worksheet 'déclare la variable P (onglet PERT)
Dim F As Worksheet 'déclare la variable F (onglet Feuil1)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TT(1 To 26, 1 To 5) As Variant 'déclare la variable TT (Tableau Trasposé)
Dim L As Byte 'déclare la variable L (Ligne)
Dim C As Byte 'déclare la variable C (Colonne)
Dim I As Byte 'déclare la variable J (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim TP(1 To 5) 'déclare la variable TP (Tableau Temporaire)
Dim K As Byte 'délare la variable K (incrément)
Dim TDT(1 To 26, 1 To 2) As Variant 'déclare la varaible TDT (Tableau Date Tâche)
Dim TMP1 As Variant 'déclare la variable TMP1 (TeMPoraire1)
Dim TMP2 As Variant 'déclare la variable TMP2 (TeMPoraire2)
Application.ScreenUpdating = False 'empêche les rafraîchissement d'écran
Application.Calculation = xlCalculationManual 'empêche les calculs automatiques
Set P = Worksheets("PERT") 'définit l'onglet P
Set F = Worksheets("Feuil1") 'définit l'onglet F
P.Range("K3:O28").ClearContents 'efface d'éventuelles anciennes données
P.Range("J3:J28").ClearContents 'efface d'éventuelles anciennes données
F.Range("A3:E28").ClearContents 'efface d'éventuelles anciennes données
F.Range("F3:G28").ClearContents 'efface d'éventuelles anciennes données
TV = P.Range("P3:AO28") 'définit le tableau des valeurs TV
L = 1 'initialise la ligne L
For J = 1 To 26 'boucle 1 : sur les 26 colonnes de TV
C = 1 'initialise la colonne C
For I = 1 To 26 'boucle 2 : sur les 26 lignes de TV
If TV(I, J) <> "" Then 'condition : si la donnée ligne I colonne J de TV n'est pas vide
TT(L, C) = TV(I, J): C = C + 1 'récupère la donnée dans la ligne L colonne C de TT, incrémente la colonne C
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
L = L + 1 'incrémente la ligne L
Next J 'prochaine colonne de la boucle 1
P.Range("K3").Resize(26, 5).Value = TT 'renvoie le tableau TT dans la cellule K3 redimensionnée de l'onglet P
For I = 1 To UBound(TT, 1) 'boucle sur toutes les lignes I du tableau TT
'si la donnée en colonne 1 n'est pas vide, récupère la tâche et la durée dans les colonnes 1 et 2, respectivement, de TDT
If TT(I, 1) <> "" Then TDT(I, 1) = P.Cells(I + 2, "H"): TDT(I, 2) = P.Cells(I + 2, "G")
Next I 'prochaine ligne de la boucle
'tri de TT et de DTD
For I = 1 To 26
For J = 1 To 26
If TT(I, 1) > TT(J, 1) And I <> J Then
For K = 1 To 5
TP(K) = TT(I, K): TT(I, K) = TT(J, K): TT(J, K) = TP(K)
Next K
TMP1 = TDT(I, 1): TDT(I, 1) = TDT(J, 1): TDT(J, 1) = TMP1
TMP2 = TDT(I, 2): TDT(I, 2) = TDT(J, 2): TDT(J, 2) = TMP2
End If
Next J
Next I
F.Range("A3").Resize(26, 5).Value = TT 'renvoie le tableau TT dans la cellule A3 redimensionnée de l'onglet F
F.Range("F3").Resize(26, 2).Value = TDT 'renvoie le tableau TDT dans la cellule F3 redimensionnée de l'onglet F
P.Range("J3:J28").Value = F.Range("G3:G28").Value 'renvoie la duré dans "Au + tard"
Application.ScreenUpdating = True 'permetles rafraîchissement d'écran
Application.Calculation = xlCalculationAutomatic 'permet les calculs automatiques
End Sub