XL 2016 Manque de connaissances: les Macros à la rescousses?

CoRTeK

XLDnaute Nouveau
Bonjour à tous et à toutes :)

Dans le but de réaliser un outil d'aide à la planification de projet, j'ai réalisé le fichier ci joint;
Cependant je pêche pour deux choses à automatiser et pour lesquelles il semblerait que seuls les Macros pourrait faire le travail...
Ne connaissant donc rien là dedans, je viens voir si quelqu'un pourrait m'aider ou m'expliquer pas à pas comment réaliser ce que je souhaite.

Pour faire simple, sur la première feuille: je souhaiterais pouvoir Transposer automatiquement et respectivement les Colonnes allant de P3 : P28; Q3 : Q28; R3 : R28; etc...; AO3 : AO28 dans les Lignes allant de K3 : O3; K4 : O4; K5 : O5; etc...; K28 : O28.
Par la suite, j'aurais souhaité que les données de K3 : O28 soient automatiquement transférées sur la deuxième feuille dans la partie A3 : G28 et soient classées Haut/Bas et Z-A par les Tâches pour que puissent se faire les calculs de la feuille dans les Colonnes H3 : H28 et I3 : I28 et que ces dernières soient transférées à nouveau vers la feuille PERT, Colonne J3 : J28.

Actuellement, j'ai rentré les données nécessaires manuellement dans le sens souhaité afin d'observer les calculs et résultats tels qu'ils devraient apparaître avec les données déjà entrées.

J'espère ne pas avoir été trop évasif ni trop lourd-dingue dans mes explications :)

Je reste disponible pour toutes explication supplémentaires et nécessaires;
En vous remerciant de m'avoir lu et dans l'espoir que l'on puisse m'aider;
Amicalement,
CoRTeK :)
 

Pièces jointes

  • Outil Matrice PERT.xlsx
    65.4 KB · Affichages: 40

Robert

XLDnaute Barbatruc
Repose en paix
- Transposer automatiquement les valeurs qu'on peut lire verticalement dans le tableau "tache (ant)" P3:AO28, directement dans celui des "postériorités" K3:O28, horizontalement sans cellules vides.
Fait par cette partie du code :
VB:
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 'de;clare la variable K (incrément)

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
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

- Envoyer ces mêmes valeurs dans le tableau de la "feuil1" A3:E28
Fait par cette partie du code :
VB:
'tri de TT
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
        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

Le reste : avec Taches (H) et durées (G) attenantes classées de Z en haut vers A en bas.
Désolé je ne sais pas faire... Laisse tomber les schémas et les méthodes je ne les comprends pas ou ne veux pas les comprendre...

Après, quand tu me dis qu'il se ne passe rien je reste coi...




 

CoRTeK

XLDnaute Nouveau
Ah ben mince, j'ai du mal m'y prendre car la j'ai quelque chose... Bizarre... peut être le pc du taf...
Effectivement, ça c'est bien rangé :)
Une fois dans le tableau de la feuil1 je me rends compte que c'est bien inversé, penses tu possible de les associées aux taches, si je dis au hazard cellule H14 et que j'y rentre un A manuellement, que les taches posterieures B C et E s'y mettent d'elles même? en tout cas c'est déjà cool :) merci
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Essaie ça :

VB:
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
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 134
Messages
2 116 613
Membres
112 811
dernier inscrit
shade1452