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
Bonjour CoRTeK, bonjour le forum,

Une partie du code car après c'est trop confus pour moi. Tu veux renvoyer les données dans K3:O28 dans A3:G28 alors que pour moi ce serait de K3:028 vers A3:E28. Puis pourquoi les données triées commencent-elles à la ligne 4 et non pas 3 ? Bref, le code du début, après tu expliques...


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)

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("P3:AO28").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
F.Range("A3").Resize(26, 5).Value = TT 'renvoie le tableau TT dans la cellule A3 redimensionnée de l'onglet F
Application.ScreenUpdating = True 'permetles rafraîchissement d'écran
Application.Calculation = xlCalculationAutomatic 'permet les calculs automatiques
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Avec le tri. J'ai laissé commenté deux lignes car doute... Mais on devrait n'être plus très loin du résultat escompté...

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
'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
'P.Range("J3:J28").Value = F.Range("I3:I28") 'ça va supprimer les formules !
Application.ScreenUpdating = True 'permetles rafraîchissement d'écran
Application.Calculation = xlCalculationAutomatic 'permet les calculs automatiques
End Sub
 

CoRTeK

XLDnaute Nouveau
Bonjour Robert :)
Merci beaucoup pour ton aide.
Je viens de tester la macro que tu as réalisé et je ne vois pas ce que ca fait, peut être que je me suis mal pris pour l'intégrer.
En ce qui concerne les données dans K3:O28 de la feuille PERT c'est bien vers A3:E28 de la Feuil1.
Les données triées commencent bienà la ligne 3 :)

Pour peut être mieux cerner le tableur:
Il faudrait en premier lieu que les taches situées dans la feuille PERT Taches (ANT)

s'intègrent en horizontal sans cellule vide dans Postériorité à la tache équivalente.

Puis que l'ensemble, soit copié vers la colonne équivalente de la Feuil1
et trié de Z en haut vers A en bas (lignes entières impactées)

et pour finir que les valeurs au + tard

Soient transférée a nouveau vers les tâches équivalent sur la feuille PERT

Merci encore pour ton travail :)
 

CoRTeK

XLDnaute Nouveau
Il semblerait que sur la Feuil1 il y ai un décallage entre la tache A et ses antériorité (BCE devrait etre une ligne plus bas) et en remontant on devrait voir respectivement: G, DF, G, H, I, I, J, J, K.

Mon soucis c'est que quand j'appuis sur F8, y a rien qui bouge... ma connaissance d'excel est très limite quand on sort des lignes et cellules; tout juste bon a faire la bataille navale ^^
 

Robert

XLDnaute Barbatruc
Repose en paix
Fait [Alt]+[F8] pour ouvrir la boîte de dialogue Macro, sélectionne la macro puis clique sur le bouton Pas à pas détaillé. F8 pour avancer d'une ligne. Tu peux passer au fichier excel pour voir l'avancement. Tu peux lire le commentaire pour comprendre...
 

CoRTeK

XLDnaute Nouveau
J'ai vidé les cellule du tableau Posteriorité afin de me rendre compte du fonctionnement, puis j'ai suivi tes indications afin de voir comment ca réagit; je lis bien les commentaires que tu as ajouté, qui sont précis et compréhensibles, mais rien ne se passe sur la feuille de calcul malgré la flèche jaune qui descend et représente l'avancement du programme dans la fenêtre de Macro.
 

CoRTeK

XLDnaute Nouveau
Voici le fichier sans résultat final et avec juste les données entrées soit dit en passant les Taches (de A a Z) leurs antériorités et durées.


Ci-dessous une explication de l'outil/méthode PERT:


Le but final de l'outil est de définir un chemin critique entre les tâches en calculant les temps au plus tôt puis au plus tard.
Pour cela on définit chaque étape et quelles sont celles qui lui sont obligatoirement antérieures.

Par exemple, ici, la tâche B ne peut pas s'exécuter si la Tâche A n'est pas terminée. etc...

Grâce au tableau dessiné, on arrive à trouver divers niveaux (1,2, etc...) me permettant de dessiner ceci:

Avec cela je peux débuter à calculer mes tâches au plus tôt étant une simple somme des durées attenantes à chaque tâche. Lorsque plusieurs tâches se regroupe, je conserve la plus grande valeur.

Puis je fais la meme chose en sens inverse et en soustrayant les mêmes durées pour les dates au plus tard. je conserve par contre les plus petites valeurs. (ps: je me suis rendu compte avoir oublié la valeur de D mais cela n'a eu aucun impact...)

Enfin, j'observe le Chemin Critique, c'est à dire celui ou je n'ai aucune marge possible en matière de temps pour réaliser mon projet.
"]​

Je reprends donc pas à pas ce qu'il faudrait, si cela est possible:

- 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.
- Envoyer ces mêmes valeurs dans le tableau de la "feuil1" A3:E28 avec Taches (H) et durées (G) attenantes classées de Z en haut vers A en bas.
- renvoyer les valeurs calculées de chaque tache "feuil1" vers "PERT" dans la colonne "+Tard" (J)

Après, si mes explications sont assez claires et que tu vois plus simple en réalisation, je suis preneur :)
Merci pour ton temps donné à un casse pied :)
 

Pièces jointes

  • Outil Matrice PERTDE.xlsx
    61.6 KB · Affichages: 27

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 344
Membres
102 865
dernier inscrit
FreyaSalander