Création d'une plage horaire de travail pour un GANTT

Bonjour,

J'ai besoin de créer un GANTT pour réaliser le suivi de temps d'opérations en entreprise. Chaque opération a une durée donnée en heure, et on connait la date et l'heure de début des opérations. Le but serait d'estimer l'heure de changement entre chaque opération (passage de l'op 1 à 2, puis de l'op 2 à 3 : elles sont toutes dépendantes les unes des autres), en prenant également en compte la date de changement. Il faudrait également estimer la date et l'heure de fin de toutes les opérations.

Or, pour ce suivi de temps, je dois créer une plage horaire correspondant aux heures de travail des employés (7h - 17h par exemple). De cette façon, les durées des opérations s'incrémenteraient à partir de l'heure de début des opérations, et lorsque l'on dépasse la plage de travail des employés (après 17h), on continue de compter le lendemain pour 7h. Dans l'idéal, il faudrait compter les heures de pause dans cette plage horaire pour avoir quelque chose le plus précis possible.

Exemple :

- date et heure de début des opérations : 14/05/2021 à 15h

- durée des opérations : 1 - 3h, 2 - 1h30, 3 - 3h, 4 - 4h30, 5 - 1h

- horaires de travail des employés (plage horaire) : 7h - 17h

- GANTT
-> op 1 commence à 15h le 14/05/2021 et fini à 8h le 15/05/2021
-> op 2 commence à 8h le 15/05/2021 et fini à 9h30 le 15/05/2021
-> op 3 (...)

- Temps total entre début op1 et op 5 (avec et sans plage horaire) : 41h

Auriez-vous des pistes pour commencer à réaliser cela ? Je n'arrive pas à savoir quels types de fonctions je pourrais utiliser pour faire ce que je souhaite.
Je vous remercie par avance !

Rebonjour !

Je me suis débrouillé pour trouver un semblant de solution. Néanmoins, je n'arrive pas à trouver l'information suivante : est-il possible de composer un ensemble date + heure ?

Je voudrais incrémenter la date séparément de l'heure, puis les mettre ensemble dans une cellule à l'aide de code VBA. Je ne sais pas si cela est possible, ni comment je pourrais le faire si c'était faisable.

Bonjour,

Dans la logique il suffit de les sommer. En effet une date est la date à minuit au format dd/jj/aaaa hh:hh. Donc si en A1 j'ai 15/01/2021 et en B1 02:03 alors :

Sub HEURE()
MsgBox [A1] + [B1]
End Sub

Cdlt,

Bonsoir,

Merci pour la technique, elle m'a en effet été utile car je ne connaissais pas l'utilisation des crochets !

Néanmoins, je souhaite désormais créer une plage qui me permettra ensuite de colorer les cellules pour donner forme à mon gantt. Pour cela, je compte définir une plage pour chaque phase.

image image

La première plage commence en B1 et va jusqu'en G1 pour cette configuration. Or, le décalage des colonnes peut varier selon les paramètres du document. Le décalage des colonnes de la phase 10 est défini par la variable h.

La seconde plage irait de la colonne h à i

Si vous m'avez compris, je souhaite faire des plages variables qui dépendent de paramètres définis tantôt comme Integer.

J'ai réalisé ce type de code, mais cela n'a pas fonctionné. Pourtant, la formule me semble "logique" étant donné que j'utilise Cells(ligne, colonne) où la colonne serait la variable définie précédemment. Pourriez-vous m'éclairer ?

Sub gant()

Dim colorph0 As Range, colorph10 As Range, colorph20 As Range, colorph30 As Range, colorph40 As Range

colorph0 = Sheets("feuil3").Range(Cells(1, 1), Cells(1, h))
colorph10 = Sheets("feuil3").Range(Cells(1, h), Cells(1, i))

Sheets("Feuil3").Range(colorph0).Interior.ColorIndex = 3
Sheets("Feuil3").Range(colorph10).Interior.ColorIndex = 3

End Sub

Bonjour,

Les arguments de l'objet cells sont des formats numériques, que ce soit les lignes ou les colonnes donc :

Sub gant()
With Worksheets("feuil3")
    .Range(.Cells(1, 1), .Cells(1, 8)).Interior.ColorIndex = 3 'Plage de A1 a H1
    .Range(.Cells(1, 9), .Cells(1, 11)).Interior.ColorIndex = 3 'Plage de I1 à K1
End With
End Sub

Je vous laisse adapter pour la suite de votre code.

Cdlt,

PS : Il y a déjà multitude de Gantt déjà élaborés sous VBA, ici ou ailleurs, je vous déconseille de réinventer la roue sous peine de perdre votre temps. Mieux vaut étudier le code et l'adapter à votre besoin.

Donc si je résume, pas possible de faire des plages variables ? Je ne veux pas mettre de colonne fixe, donc pas de constante sur la deuxième virgule. Enfin, je ne veux pas à condition que ce soit possible.

J'ai défini i et h comme Integer, donc des formats numériques. Si l'objet de Cells doit être un numérique et que i et h sont des entiers logiquement ça devrait passer ?

J'ai pu consulter les gantt que j'ai trouvé sur le forum, ils sont tous bien plus compliqué que ce dont j'ai besoin. Je perdrais plus de temps à trouver les parties de code qui m'aideront malheureusement :/

Merci pour votre réponse en tout cas !

Bonjour,

Au vu de votre exemple je suppose que vous voulez colorer les plages de cellules où la phase 0 s'étend de 0 à 180, la phase 10 de 180 à 300, etc etc ...

Dans ce cas :

Sub GANTT()
Dim L%, TROUVE_I$, TROUVE_F As Range
With Worksheets("Feuil1")
    TROUVE_I = .[B1].Address
    For L = 2 To WorksheetFunction.CountA(.Rows(1)) - 1
        Set TROUVE_F = .Rows(1).Find("*", Range(TROUVE_I))
        .Range(.Cells(L, .Range(TROUVE_I).Column), .Cells(L, TROUVE_F.Column)).Interior.ColorIndex = 3
        TROUVE_I = .Cells(1, TROUVE_F.Column).Address
    Next L
End With
End Sub

Par contre, ceci implique pas de parallélisme des phases, pas de jalonnement avec retour en arrière, le plus basique des GANTT en soit.

Je vous laisse l'étudier et éventuellement l'adapter en fonction de vos besoins.

Cdlt,

47classeur2.xlsm (14.69 Ko)

Ça m'a l'air d'être fortement ressemblant à ce que je souhaite, à première vue. Je vous confirme cela d'ici demain

Bonsoir,

J'ai bel et bien réussi à adapter votre code à mes besoins et c'était xe qu'il me fallait ! Merci beaucoup 🙌

Bonsoir,

Merci du retour et heureux que vous aillez pu l'adapter à votre besoin ! Merci de passer votre sujet en résolu afin d'améliorer la lisibilité du forum.

Cdlt,

Rechercher des sujets similaires à "creation plage horaire travail gantt"