Diagramme de gantt via MFC

Bonjour à toutes et à tous,

Je suis entrain de créer une application excel pour planifier la production pour cela un diagramme de Gantt et nécessaire, la méthode que j'ai suivi et de faire une MFC pour colorier les barres.

Problématique:

le problèmes que j'ai rencontré

1 les barres n'apparaissent pas pour toutes les tâches comme vous voyez sur le fichier ci-joint (exemple lignes 6 jusqu'à 11).

2 souvent, si là tâche commence avant minuit et fini après minuit je n'aurais pas la barre (et ce comportement et aléatoire càd des fois ça marche des fois ça ne marche pas).

3 je veux afficher le nom de la phase de production (colonne A) et le nom de l'opérateur (colonne B) sur la barre mais je ne sais pas comment faire.

J'ai tout essayer pour résoudre ce problème mais ça dépasse mon niveau d'excel je pense, donc à vous les spécialistes de m'aider.

Si vous avez d'autres astuces hors la MFC je serai preneur si vous m'expliquez un peu la démarche (avec un exemple car je sais comment adapter des exemples de VBA).

Merci d'avance

158gantt-2.xlsx (23.59 Ko)

Bonjour,

Ce problème est complexe et lié au format des dates.

Je ne sais pas si je pourrai t'emmener bien loin sur ce sujet mais je vais essayer de te faire toucher du doigt la complexité.

Pour cela je vais utiliser un néologisme ou un barbarisme je ne sais pas...) :

J'appelle "journalisation" des heures le fait que quand tu utilises des heures à cheval sur 2 jours certaines font référence au jour J et d'autres au jour J+1. Mais tu n'écris jamais "aujourd'hui 10:00 h" "demain 9:00" en particulier dans les colonnes H et I

Par suite quand le chiffre de la colonne I est plus petit que celui de la colonne H tu crois avoir trouvé un subterfuge avec ta MFC et ça marche de temps en temps parce que (entre autre) tes périodes de process son courtes.

Mais ce n'est qu'une construction bancale : D'ailleurs si on regarde ce qui se passe Ligne 1 (Colonne J à V)

21:00... 23:45 : si tu regardes dans la barre de formule tu vois 21:00... 23:45. Là tu te frottes les mains !

Et patatras... si tu regardes en W1, comme tu as utilisé la recopie incrémenté Excel à compris que dans ces colonnes on parle du lendemain... Il est passé du jour zéro à 23:45 au jour 1 (pour lui le 1er janvier 1900 à 00:00

En résumé ta formule de MFC est juste dans les seul cas ou tu n'as pas besoin d'utiliser la journalisation ou/et quand Excel fait une déduction juste.

Mais sans autre précision Excel ne peux pas "deviner" que ton 16:00 -- 18:00 ligne 3 est sur la journée du lendemain.

Dans le doute il le situe aujourd'hui, c'est à dire hors diagramme.

Une bonne manière de procéder serait de "journaliser" tes données horaires (et ta ligne 1)

La formule en K1 pourrait être alors :

="9/4/2018"+"21:00"

en L1 :

="9/4/2018"+"21:15"

On prend ces 2 cellules et on fait un copier/Collage spécial valeur...

Et on incrémente TOUSSA vers la droitte

Puis en H19 :

="10/4/2018"+"8:00" (on peut faire un collage spécial valeur)

Le résultat est immédiat (ligne 20 et 10 également...)

Pour H19 j'ai pris la formule "à la barbare" (on peu ensuite faire uncopier/collage spécial valeur) : Pour les autres cellules qui n'ont pas de phase antérieure H7, H19...je me suis contenté de faire un copier / Collage spécial valeur à partir de la ligne 1... C'est bien sur plus cool mais il faut être éventuellement capable de repartir de "rien"...

C'est clair ? Ou je recommence ?

Pièce jointe non vérifié...

Nota : Je n'ai pas touché à la MFC, mais du coup on peu simplifier. Avec la journalisation les comparaisons sont forcément exacte...

A+

120gantt-vg.xlsx (24.60 Ko)

Bonjour @galopin01 ,

J'ai compris ce que vous voulez dire et je suis tout a fait d'accord avec ce raisonnement, le seul souci ce que les superviseurs qui vont utiliser l'application cherchent une application légère à gérer ils ne maîtrise pas trop EXCEL déjà l'histoire de prédécesseurs leurs cause problème en plus la planification change tous les jours !

la solution et bonne mais pour moi pas pour eux.

Si c'est nécessaire j'accepte un passage par VBA pour faire le gantt le plus automatiser possible.

Bonjour,

n'y a t il pas un problème de nombre de colonne également ?

Chaque colonne vaut 15 minutes hors pour une durée de 2 heures il y a 9 colonnes de colorées... soit une durée de 2h15...

Il faut je pense enlever une condition "=" à l'une des deux butées de la MFC.

@ bientôt

LouReeD

Bonjour M Loureed,

effectivement il faut que j'enlève un = mais celà n'est pas vraiment le problème. j'ai vu votre application mais j'arrive pas à l'adapter selon mon besoin elle est un peu complexe pour moi.

pouvez vous faire une simple VBA pour ce cas là !

je vous donne un exemple que je trouve bon mais j'ai pas compris toutes les fonction pour pouvoir l'adapter.

Moi je travail en heurs minutes et lui en jours si vous pouvez adapter ce qu'il à fait sur mon modèle ça serait génial.

97gantt-super.xlsm (19.17 Ko)

Bonjour,

Vous ne pouvez pas travailler uniquement avec des heures/minutes si vous travaillez à cheval sur plusieurs jours : Vous êtes obligé de "journaliser" la saisie des heures initiales (sans antécédents) Avec ou sans macros ce sera le même problème...

Faire ça avec des macros sera à coup sur moins fiable et désespérant pour les utilisateurs.

Ce n'est pas bien sorcier pour l'utilisateur de copier/Coller l'heure de début de traitement à partir de la ligne 1.

Après c'est la MFC qui fait le reste.

A+

OK je vais essayer de leurs faire comprendre que c'est facile

reste à afficher le nom de l'opérateur et de la tâche (phase) centrés sur la barre. j'ai essayé avec la fonction SI qui sera mise sur toutes les cellules du diagramme mais les cellules sont trop petites pour afficher le nom (je ne peu pas agrandir les cellules si non ça sera pas imprimable sur un A3).

A+

Centré sur la barre je ne pense pas que ce soit faisable, mais je crois savoir qu'une MFC peut le faire sur la cellule de début.

Comment ? Je ne me rappelle plus mais je pense que quelqu'un va nous retrouver ça rapido.

Comme c'est du texte ça débordera sans problème sur la cellule d'à coté.

Et si c'est possible pour l'opérateur on doit pouvoir concaténer avec la phase.

YAPUKA attendre le formuleux qui va nous rappeler la bonne méthode...

Voici un fichier proposé par pierrep56 :

C'est un Gantt par VBA où il y a le nom de l'opération sur la barre, reste à voir (avec lui) l'adaptation du fichier pour travailler en heure...

@ bientôt

LouReeD

Bonjour à tous,

Voici un Gantt en heures sur 24 heures avec les data du fichier initial.

Est-ce que c'est l'objectif recherché?

Pierre

Bonjour et merci pierrep56 !

Je vais m'amuser à regarder cela de plus près !

@ bientôt

LouReeD

Hello LouReed, Bonsoir aux autres,

Pour le fun voici une autre version avec en plus :

* La possibilité d'indiquer des horaires intermédiaires entre les quarts d'heures (3h35 par exemple)

* La possibilité de dessiner plusieurs histogrammes par ligne d'opérateur (je suppose que le gars qui finit une tâche donnée en reprend une autre après)

Pierre

@galopin01

vous pouvez vusualisez la formule sur toutes les cellules de la mfc.

L'incrémentation de la formule ne permet pas au texte d'aller sur la cellule d'à coté.

56mfc.xlsm (41.37 Ko)

Bonjour PierrEp56, re LouReed,

Merci pour ce magnifique planning un forma très pro.

Je demande si possible de me faire des commentaires explicatifs sur le code parce que je dois l'appliquer sur mon vrais fichier de (1500 lignes et 24 colonnes ) .

ce que je pense à faire c'est d

Enlever le message qui s'affiche en cliquant sur la barre pour alléger le fichier

Créer 5 feuils de planification pour planifier sur 5 jours c'est juste les horaires l'ordre de tâche et les opérateurs qui change.

Afficher le planning à coté des données (mon responsable m'a demandé d'afficher les données + le planning sur la même feuil )

Le fonctionnement sur 15 min suffit largement parce que on est pas trop précis dans la production.

je croix qu'il me faut une explication du code en commentaire parce que mon nom d'opérateur n'est pas dans la colonne B comme dans l'exemple pareil pour la tâche.

une question : moi pour faire un Gantt automatiser je déclare les données en tableau et j'utilise les fonction index equiv pour calculer les dates de débuts est ce que le fait de déclarer un tableau nécessite une modification sur le code !

pierrep56, cela se rapproche d'un planning personnel !!!

J'aime l'idée, il me reste plus qu'à mélanger les deux : un planning journalier avec la possibilité de mettre plusieurs rectangle à coin arrondis sur une même ligne... Quand je dis plusieurs c'est à dire plusieurs...

Merci @ vous, et sachez que je n'hésite pas à vous mettre en référence pour aider des "demandeurs" !

@ bientôt

LouReeD

Bonjour à tous,

Pour essayer de répondre à la demande, voici quelques explications :

* Tout d'abord, une précision sur la présentation sur 2 feuilles : j'ai remarqué qu'en fonction des besoins, les utilisateurs créent un nombre variable de colonnes pour les données (par exemple ici 'retard/avance' ne sera pas utile pour un autre utilisateur). Donc pour faire une proposition la plus modulable, les 2 feuilles permettent de créer autant de colonnes de données qu'on veut.

Ceci dit, si on veut tout mettre sur une seule feuille, il suffit de modifier les lignes Whith Sheets("Machin") et d'indiquer la première colonne du graphe dans le code.

* Pour alléger le fichier : il suffit de sélectionner la première colonne vide à droite, puis Maj+Ctrl+Fleche droite et supprimer, puis sélectionner la première ligne vide en bas et Maj+Ctrl+Fleche bas et supprimer. On fait cette manip dans toutes les feuilles et ça réduit le fichier à 75ko environ. (ci-joint fichier allégé, sans pesticide, sans paraben, ni phtalates)

* Pour supprimer le message au clic sur un histogramme : dans le module 'Accueil', on efface les lignes de la procédure Fiche (en laissant les 2 lignes : Sub Fiche et End sub)

(mais ce n'est pas ça qui va alléger beaucoup)

Pour le code en lui-même, voici la séquence :

* Les données sont placées dans une variable tableau Tdata (procédure Init_T). Pour la suite quand on boucle sur cette variable (for i= 2 to ...), les données de la colonne 2 sont récupérées par un truc genre Tdata(i,2). Ainsi avec les données de l'exemple l'heure de début est en colonne H (colonne 8) pour y faire référence ce sera Tdata(i,8).

A noter : cette donnée est au format variant, il faudra donc éventuellement la re-typer (implicitement ou explicitement) pour l'utiliser.

Par exemple l'instruction : TData(i, 9) - TData(i, 8) est un re-typage implicite en valeur numérique, CStr(TData(i, 1)) est un re-typage explicite en texte

* Le graphique se base sur :

1/ la première heure de l'échelle en "D2" => si on met tout sur une seule feuille, il faudra alors modifier D2 par la nouvelle référence

2/ la première ligne du graphique, ici 3 : valeur composée dans lg = Idx_T2D(TGr, TData(i, 2), 2) + 1 (l'index de la première donnée étant =2 , l'entête étant en première ligne du tableau Tdata).

* On boucle donc sur les lignes du tableau Tdata, et pour chaque ligne on calcule les 4 valeurs de l'histogramme : left, top, width et height :

- Top : le haut, variable T est simplement le haut de la ligne du graphique plus 2 pour centrer verticalement l'histogramme

- Height : la hauteur, variable H est simplement la hauteur de la ligne du graphique moins 2 en haut et moins 2 en bas (pour le centrage vertical)

- Left : la limite gauche, variable L : on calcule d'abord la différence entre l'heure du début du graphe et l'heure du début de la tâche:

TData(i, 8) - CDbl(Deb)

à cette valeur on ajoute éventuellement 1 (soit 24h) si l'heure du début de la tâche est le lendemain de l'heure de début du graphe

+ IIf(TData(i, 8) > CDbl(Deb), 0, 1)

Cette valeur est multipliée par 24 pour transformer l'heure en dixième (par ex 2:30 est transformée en 2,5), puis par 4 puisque le graphique est prévu tous les 1/4 d'heures.

La variable Lcl représente donc le nombre de colonnes entre le début du graphe et le début de la tâche. Il suffit alors de multiplier ce Lcl par la largeur type des colonnes du graphe, d'y ajouter le left de la première colonne du graphe pour obtenir le Left de l'histogramme. (Le plus 2 correspond à un décalage 'pour faire joli')

- Width : la largeur, variable W : principe similaire, entre l'heure de début et l'heure de fin. Calcul du nb de colonnes qu'on multiplie par la largeur type des colonnes.

Une fois ces 4 valeurs calculées, il suffit de dessiner un shape rectangle dont la couleur reprend celle de la colonne A : couleur = .Range("A" & lg).Interior.Color

En résumé ça reste assez classique.

Est-ce que ça répond à la demande?

@LouReed : comme planning personnel, je me suis fait un agenda que je poste ici si ça peut donner des idées.

73agenda-v2-4b.zip (317.93 Ko)

Pierre

Bonjours messieurs,

Merci PierreP56 pour les explication ça commence à être claire pour moi mais ça reste un peu compliqué vu mon niveau en VBA j'avoue.

Le mieux pour moi c'est de commencer par le modèle que je trouve un peu simple ci-joint car j'ai compris comment est il fait et une fois je trouve le temps je perfectionne mon planning en utilisant le votre.

Donc Messieurs, si quelqu'un pourra me faire des modifications sur le fichiers ci-joint pour qu'il soit adapter à mon besoin, pour cela je cherche à avoir:

1/ un planning type 24h qui commence à 21h et fini à 20h qui fonctionne en 15 min ET qui sera affiché à coté du tableau de données (de préférence toujours décalé par rapport à la dernière colonne du tableau d'une colonne mais c'est pas trop important car mes tableau sont de tailles fixes).

2/ un astuce pour que si je veux pas faire une tâche (la tâche 5 dans l'exemple) le logiciel m'affiche rien sur ça ligne, car dans mon planning j'ai des tâches qui sont pas à faire tous les jours et cela est trop important ! par exemple dire en VBA que si la cellule de la colonne "N de tâche" et vide ==> n'affiche rien sur le planning.

3/ je veux appliqué la même chose sur plusieurs feuils (normalement 5)

Merci messieurs de m'aider à cette réalisation parce que sans ça tout ce que j'ai fais durant mon stage n'a aucun intérêt !

132gantt-super.xlsm (20.21 Ko)
Rechercher des sujets similaires à "diagramme gantt via mfc"