Aide pour un Gantt sous Excel

Résolu/Fermé
Samanosuke - Modifié par Samanosuke le 6/07/2012 à 14:16
 Samanosuke - 30 juil. 2012 à 16:50
Bonjour,



je souhaiterai créer un gantt sous excel, que je devrai automatiser en vba (mais plus tard !). LA MFC n est pas mon fort sous excel...
Je vous explique , j aimerai en gardant la forme ci jointe dans le fichier , que les 3 differents types de vacances apparaissent sur le Gantt + les week ends


Ci quelqu un pouvait m aider !
Merci par avance.

Ben



http://cjoint.com/?BGgokfhIMSb


A voir également:

13 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
6 juil. 2012 à 22:25
bonjour,

Pourrais-tu préciser ta question car je ne vois pas bien ce que tu veux faire.
1
C'est bon Raymond a régé le probleme! Merci quand même .
0
Raymond PENTIER Messages postés 58395 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 096
7 juil. 2012 à 14:57
Bonjour Ben.

Ta grille de planning étant vierge (ni données, ni couleurs de remplissage), tu procèdes ainsi :
1) Avec la touche [ctrl] maintenue enfoncée, tu sélectionnes les cellules E7 à K7, J10 à K10, J13 à L13 ; tu relâches [ctrl].
2) Tu tapes "A", tu appuies sur [ctrl] et [enter] : tes 12 cellules affichent A.
3) Tu fais de même pour B et C (tes cellules actuellement violettes et orange).
4) Tu utilises la Mise en forme conditionnelle pour colorer les cellules non-vides :
-a- Sélectionner la feuille, ou la plage A5:AF32.
-b- Activer Mise en forme conditionnelle. Dans Nouvelle règle choisir la deuxième règle "Appliquer une MF uniquement aux cellules qui contiennent" ; conserver l'option Valeur de la cellule mais remplacer comprise entre par égale à et saisir "A" dans la troisième case.
-c- Cliquer sur Format/Remplissage, sélectionner le bleu, faire deux fois "OK".
-d- Recommencer les instructions b et c avec "B" et la couleur violette
-e- Recommencer les instructions b et c avec "C" et la couleur orange.

C'est tout ; tu peux cliquer n'importe où pour enlever la surbrillance de sélection.
Chaque fois que tu taperas A dans une cellule, elle passera au bleu ; ou B, elle deviendra violette ; et C, elle sera orange -> https://www.cjoint.com/?BGho4imkagQ

Cordialement.
1
Raymond PENTIER Messages postés 58395 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 096
7 juil. 2012 à 15:16
Je te signale que dans la plage B22:C32 tu as un mélange de textes (B22) qui sont alignés à gauche et de nombres (B24) qui sont alignés à droite.
Cela te posera problème quand tu voudras utiliser ces dates pour automatiser ton planning !
0
Merci beaucoup Raymond !
J'y jette un coup d'oeil tout de suite .
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
23 juil. 2012 à 16:37
Bonjour,
Excusez l'intrusion (salutations Raymond), est-ce que votre procédure est utilisable sur votre fichier exemple (https://www.cjoint.com/?BGxknr4wraz du poste 11 .... ?
1
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
23 juil. 2012 à 23:05
Bonjour,
Ne pouvant strictement rien faire avec votre code, voici ma proposition : https://www.cjoint.com/?3GxxeKBYbR8
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
24 juil. 2012 à 16:37
Bonjour,
Je viens d'étudier votre procédure [Sub macrotest()] et je constate que vous avez inséré mon code sans tenir compte qu'il traite les données d'une personne en un seul bloc et pas morceau par morceau. Dans votre cas par exemple le premier est [Perso A / Y. (Yousaf) / ] sans les dates dans ce cas mon code tourne dans le vide sans provoquer d'erreur puisque les la base est vide.
J'attends vos corrections des dates pour continuer.
Note, il faut traiter les données de la feuille [DATAS] d'un seul coup et non pas déplacer des données d'une feuille à l'autre ce qui est inutile.
1
Je ne comprends pas que les dates n'aient pas étés corrigées dans la feuille "DATAS"... On parle bien de la meme chose (Format cellule/type/date) ?
Je l'ai deja changé 2 fois(manuellement), et sur mon fichier toutes les dates sont en format date (Erreur de convertion excel version anglaise-francaise ?)
J utilise le copier coller de feuille pour garder le format de la feuille et surtout garder toutes ses propriétés (etiquettes, MFC, etc), j'ai essayé bien sur sans copier coller, mais je perdais des informations importantes.
Je ne comprends pas pourquoi le code tourne dans le vide, puisqu il est intégré dans la boucle SI,'au niveau de la sortie, et que normalement la "base" s'est remplie quelques lignes plus haut ...
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
25 juil. 2012 à 11:12
Bonjour,
Bravo.
En marge j'ai créé une autre version de mon crû : https://www.cjoint.com/?3GzlkjRb7Aq
La commande se trouve sur la feuille [Format].
1
Je dirai meme que ton script s execute encore plus rapidement que le mien !
Bravo.
0
Salut la compagnie!

Bon grace a la MFC et et quelque ligne de code j'arrive à ce resultat ...
Mais maintenant j aimerai que les dates contenues entre E23 et F39 dans cet exemple, soient reconnues par le planning, et s affichent dedans ....
Est ce possible ?


http://cjoint.com/?BGkq7inPATF
0
Raymond PENTIER Messages postés 58395 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 096
10 juil. 2012 à 23:57
Bonjour.
Ton fichier ayant été créé avec une version anglaise d'excel, cela complique les opérations ...
0
Je suis actuellement aux Pays-Bas ...
Mais si tu peux m expliquer le principe ou alors me montrer un Tuto (introuvable je pense) , je traduirai !
Merci d avance !
0
Personne pour m aider pour la suite ?
il faudrait juste automatiser le planning !
0
Raymond PENTIER Messages postés 58395 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 096
13 juil. 2012 à 13:44
Juste ? Ce n'est pas le plus simple !
Surtout que tu n'as même pas préparé ton fichier correctement, puisque ma recommandation du 7 juil. 2012 à 15:16 est restée lettre morte ...
De plus ton mélange d'anglais et de français ne facilite pas les choses ...
On ne sait pas à quoi servent les nombres en H23:I39.
Enfin je n'ai pas bien compris ce que tu veux obtenir concrètement quand tu écris "Mais maintenant j aimerai que les dates contenues entre E23 et F39 dans cet exemple, soient reconnues par le planning, et s affichent dedans" : donne un exemple précis, en précisant ce qui doit être affiché dans chacune des cellules G5, V5, V6, E7, E16, N16.
0
Bonjour Raymond,

Desolé de te repondre si tard mais l'entreprise etait fermée pour une semaine.
Concernant tes recommendations , elles avaient été prises en compte dans mon fichier de travail, mais absentes dans le fichier exemple que je t avais fournis (désolé)
Pour l anglais francais, je n'y peux pas grand chose, toutes les données sont en hollandais, j'ai essayé de traduire un maximum pour l equipe (on travaile en anglais) et ne pas trop utiliser de francais...
Pour les infos presentes dans le document, eles sont confidentielles, mais je peux essayer de t expliquer un peu plus en details :

a partir de la ligne 21;
col B et C : nom de la personne
col D : type de vacance (RTT, congé, etc )
Col E et F: debut et fin du congé
col G(heure) et H(minutes): le nombre d heure si g=2 et h=0, lire 2h

En somme j'aimerai que dans le planning, apparaisse avec la couleur appropriée , le type de vacance . Exemple, pour la ligne 23: Verlof, le 20 janvier, en violet (a noter que le nombre d heure n a pas besoin d apparaitre sur le planning)

Merci encore pour ton aide qui m a été precieuse depuis le début !

ps: le nombre de jour de congés change d un employé à un autre, est ce que ce change quelque chose pour cette MFC ?

Par avance merci !

http://cjoint.com/?BGxknr4wraz
0
Raymond PENTIER Messages postés 58395 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 096
23 juil. 2012 à 14:26
Ce n'est toujours pas la bonne version de fichier, semble-t-il : Tu as toujours les colonnes 1, 2, 3 au lieu de A, B, C ; tu as toujours le mélange de dates au format Nombre/Date (cellules L25C5:L26C6) et sous forme de texte (cellules L23C5:L24C6).
Tu as fait des modifications bizarres : ta colonne 4 n'a plus les codes de type de vacances A, B et C ; tes dates de vacances ne sont plus celles de ton exemple initial ; en colonne 8 tu as mis des minutes sous forme de centièmes d'heure (100 mn dans une heure).

Quand tu demandes "En somme j'aimerai que dans le planning, apparaisse avec la couleur appropriée , le type de vacance", il faudrait que quelqu'un t'écrive une macro !
En effet je peux résoudre ce problème pour une seule plage de couleur par ligne (une seule période de congé par mois) avec des formules excel standard, mais pas avec plusieurs tranches ...
0
Salut Raymond,

Je travaille avec colonne 1,2,3 justement parcque je code pas mal de macro (menu excel=>option=> formules=>R1C1 style)
Est ce que tu peux me resoudre ce probleme pour une seule plage de couleur par ligne , et j essayerais d adapter ma macro (qui tourne en arriere plan), à ta MFC, peux etre qu avec un peu de bidouillage je pourrais m en sortir ... Car pour le moment je ne peux plus avancer sans cette MFC et je suis nul dans ce domaine !

je te met la plus grosse partie de mon code, si jamais cela peut t aider dans ta MFC (le code n est pas adaptable a l exemple que je t ai donné car je ne peux pas rendre annonyme toutes les infos dans l exemple)

Option Explicit

Sub Make_extract()
'
Dim Fichier As String
Dim Ligne As String
Dim Tableau() As String
Dim i As Long
Dim j As Integer, x As Integer, y As Integer, z As Integer
Dim Vsum As Variant

Dim sep As Integer
Dim sh As Worksheet

Application.DisplayAlerts = False
Application.Calculation = xlManual
Application.ScreenUpdating = False

Set sh = Sheet1

sh.Cells.Clear
Sheet2.Cells.Clear
    
'ouverture du fichier

    Fichier = Application.GetOpenFilename("text files (*.csv), *.csv")
    Open Fichier For Input As #1
    Do While Not EOF(1)
        Line Input #1, Ligne
        'Séparation des colonnes avec séparateur (,)
        Tableau = Split(Ligne, ",")
        i = i + 1
        'Ajout des données ligne dans la feuille
            y = 0
            For j = 0 To UBound(Tableau)
                y = y + 1
                sh.Cells(i, y).Value = Replace(Tableau(j), """", "")
                If j = 4 Then
                    If InStr(sh.Cells(i, y).Value, "-") > 0 Then
                       'sh.Cells(i, j + 1).Value = Replace(sh.Cells(i, j + 1).Value, " - ", ",")
                       sep = InStr(sh.Cells(i, y).Value, " - ")
                       sh.Cells(i, y).Value = Left(Tableau(j), sep)
                       sh.Cells(i, y + 1).Value = Right(Tableau(j), Len(Tableau(j)) - (sep + 1))
                       y = y + 1
                    End If
                End If
            Next j
        Loop
    Close #1
    
'mise en place infos
    Application.Calculation = xlCalculationAutomatic
     'creation colonne total
    Sheet1.Cells(1, 15).Value = "total"
    'Sheet1.Cells(2, 15).Formula = "=INT(M2)&"",""&INT(N2)"
    Sheet1.Cells(2, 15).Formula = "=INT(RC[-4])&"",""&INT(RC[-3])"
    Sheet1.Select
    Range("O2").Select
    Selection.AutoFill Destination:=Range("O2:O10000"), Type:=xlFillDefault
    
    
    Sheet2.Cells(1, 3).Value = "Carrier ADV"
    Sheet2.Cells(1, 4).Value = "Carrier Verlof"
    Sheet2.Cells(1, 5).Value = "TVT"
    
    
'traitement des données

x = 2
y = 2
While Sheet1.Cells(x, 7).Value <> ""
    If Sheet1.Cells(x, 7).Value <> Sheet1.Cells(x + 1, 7).Value Then
       Sheet2.Cells(y, 2).Value = Sheet1.Cells(x, 7).Value
       Sheet2.Cells(y, 1).Value = Sheet1.Cells(x, 6).Value
       y = y + 1
    End If
    x = x + 1
Wend
    
'boucle pour remplir adv
    'boucle pour remplir adv
 Vsum = 0
 x = 2

    While Sheet2.Cells(x, 1).Value <> ""
    y = 2
        Vsum = 0
            While Sheet1.Cells(y, 7).Value <> ""
                If Sheet2.Cells(x, 2).Value = Sheet1.Cells(y, 7).Value And Sheet1.Cells(y, 8).Value = "Carrier ADV" Then
                    Vsum = Sheet1.Cells(y, 15) + Vsum
                    Sheet2.Cells(x, 3).Value = Vsum
                End If
            y = y + 1
        Wend
        x = x + 1
    Wend

    'boucle pour remplir verlof
Vsum = 0
 x = 2

    While Sheet2.Cells(x, 1).Value <> ""
    y = 2
       Vsum = 0
            While Sheet1.Cells(y, 7).Value <> ""
                If Sheet2.Cells(x, 2).Value = Sheet1.Cells(y, 7).Value And Sheet1.Cells(y, 8).Value = "Carrier Verlof" Then
                    Vsum = Sheet1.Cells(y, 15) + Vsum
                    Sheet2.Cells(x, 4).Value = Vsum
                End If
            y = y + 1
        Wend
        x = x + 1
    Wend


            'boucle pour remplir TVT
Vsum = 0
 x = 2
    While Sheet2.Cells(x, 1).Value <> ""
        y = 2
        Vsum = 0
            While Sheet1.Cells(y, 7).Value <> ""
                If Sheet2.Cells(x, 2).Value = Sheet1.Cells(y, 7).Value And Left(Sheet1.Cells(y, 8).Value, 3) = "TVT" Then
                    Vsum = Sheet1.Cells(y, 15) + Vsum
                    Sheet2.Cells(x, 5).Value = Vsum
                End If
            y = y + 1
        Wend
        x = x + 1
    Wend

'on remplace case vide par des 0
x = 2
While Sheet2.Cells(x, 1).Value <> ""
    If Sheet2.Cells(x, 3).Value = "" Then
        Sheet2.Cells(x, 3).Value = "0"
    End If
     If Sheet2.Cells(x, 4).Value = "" Then
        Sheet2.Cells(x, 4).Value = "0"
    End If
     If Sheet2.Cells(x, 5).Value = "" Then
        Sheet2.Cells(x, 5).Value = "0"
    End If
    
x = x + 1
Wend

    
MsgBox ("done")
    
Application.DisplayAlerts = True
Application.ScreenUpdating = True


End Sub

0
Raymond PENTIER Messages postés 58395 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 096
24 juil. 2012 à 00:21
Pour une seule plage de cellules, voici le tuto :
https://www.commentcamarche.net/applis-sites/bureautique/1517-faire-rapidement-un-planning-avec-excel/
Mais il sera difficile à transcrire en macro pour tes plages multiples ...
0
Bonjour le Pinguin,

C'est exactement ce que je veux !Je vais essayer tout de suite l adaptation à mon fichier employés !
Je vous mettrai le fichier complet une fois terminé
0
Salut !

Bon j'ái passé la matinée á modifier ma macro, je pense que je ne suis pas loin, mais cela ne fonctionne toujours pas ...
Je pense que les variables datedebut et datefin ne s incrementent pas et je n arrive pas a savoir pourquoi ,
Il se peut que se soit aussi une histoire de date, pourtant es formats semblent respctés ...

Je vous ai fait un fichier exemple, avec le module TEST incluant les boucles de Le Pinguin ... Le module HR Extract est une etape intermediaire qui n interfere pas avec le module test (ne pas y toucher svp !).
Pour supprimer les feuilles, utiliser le module de Suppression

Le but est en gros de faire une macro qui attribue une feuille a chacun, tout en mettant á jour le planning...
J espere que vous pourrez m aider et que je ne suis pas parti dans tous les sens !

Merci . Samanosuke

http://cjoint.com/?BGylHUFvgpH
0
Il se peut aussi que cela vienne des "etiquettes" : par exemple il y a autant d etiquettes " type vac" que de personnes (nombre de copie du fichier format). C'est peut etre une piste
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
24 juil. 2012 à 14:15
Bonjour,
Dans un premier temps, en parcourant votre feuille [DATAS] je constate que les remarques de Raymond (Salutations et merci pour le tuto) concernant le format des dates [Einddatum] et [OpgenomenOpname] ne sont en tout cas pas prisent en compte.
Je pense que vous allez corriger les formats de date et ensuite je regarderai votre problème.
En plus, je vous demande de respect mon pseudo qui est Le Pingou (non pas : le Pinguin).
0
Je m'excuse pour l'erraflure, correction automatique sur ordinateur néerlandais avec clavier QWERTY .
Pour infos les remarques avaient bien étés prises en compte , mais la faille provient plutot d'un logiciel de gestion RH tres bancal qui peine à exporter sous excel, et qui parfois, me traduit des dates en textes .
Voici le fichier modifié, avec les dates correctes ( meme si l affichage n'est pas le meme).

Bonne fin de journée

http://cjoint.com/?BGyqeYLzcNA
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
24 juil. 2012 à 17:22
Bonjour,
Je suppose qu'il s'agit de la procédure [Sub macrotest()], pouvez-vous précisé depuis quelle feuille elle est activée... ?
0
Bonjour,

Je ne lui ait pas assigné de bonton, je l execute depuis l editeur vba . Cependant les premieres lignes de codes s executent sur la sheet1 (DATAS) : Boucle principale
While Sheet1.Cells(x, 6).Value <> ""
0
Cela fonctionne !!!
apres avoir relu votre commentaire une enieme fois, et suivis un peu mon instinc, j'ai modifié legerement le code, en supprimant le sous macro "Nettoyer" (en effet, elle supprimait les données que je venait d actualiser dans la boucle Do...Loop Until)...
Apparement tout fonctionne sous le fichier exemple, je vais l adapter a mon fichier réel.

J'ai encore quelaues probleme de convertion de date (Les hollandais sont basés sur un systeme jjmmAAAA mais les pc sont configurés sur du mmddYYYY comme aux US)

Je vous laisse le fichier exemple, si cela peut servir pour un autre...

Merci emcore pour votre implication et votre reactivité !

Samanosuke

http://cjoint.com/?BGzj0zcCcaF
0
Petite correction de code :

Loop Until Sheet1.Cells(z, 6).Value <> Sheet1.Cells(z + 1, 6).Value
0
Le script final, incluant le module de Le Pingou

Sub macrotest()

Application.DisplayAlerts = False
Application.Calculation = xlManual
Application.ScreenUpdating = False



Dim myName As String, myName2 As String, Mynaam As String
Dim x As Integer, Y As Integer, z As Integer


x = 2


While Sheet1.Cells(x, 6).Value <> ""
myName = Left(Sheet1.Cells(x, 6), 25) & Left(Sheet1.Cells(x, 5), 3)
myName2 = Sheet1.Cells(x, 5)
Mynaam = Left(Sheet1.Cells(x + 1, 6), 25) & Left(Sheet1.Cells(x + 1, 5), 3)
 Y = 22
    If myName <> Mynaam Then
            
            Sheets("Format").Select
            Sheets("Format").Copy Before:=Sheets(1)
            ActiveSheet.Name = myName
            Application.CutCopyMode = False
            ActiveWindow.DisplayGridlines = False
            
            Sheets(myName).Cells(2, 2).Value = myName2
            
            z = x
            Do
            Sheets(myName).Cells(Y, 2).Value = Sheet1.Cells(z, 5).Value
            Sheets(myName).Cells(Y, 3).Value = Sheet1.Cells(z, 6).Value
            Sheets(myName).Cells(Y, 4).Value = Sheet1.Cells(z, 8).Value
            Sheets(myName).Cells(Y, 5).Value = Sheet1.Cells(z, 9).Value
            Sheets(myName).Cells(Y, 6).Value = Sheet1.Cells(z, 10).Value
            Sheets(myName).Cells(Y, 7).Value = Sheet1.Cells(z, 11).Value
            Sheets(myName).Cells(Y, 8).Value = Sheet1.Cells(z, 12).Value
             Y = Y + 1
             z = z - 1

                           
            Loop Until Sheet1.Cells(z, 6).Value <> Sheet1.Cells(z + 1, 6).Value
                
'------------------- On rempli le planning



                 Dim anact As Integer, nude As Integer, c As Integer, D As Integer
                            Dim ligde As Integer, liorg As Integer, colde As Integer, coorg As Integer
                            Dim val As Variant
                            Dim datedebut As Date, datefin As Date
                            Sheets(myName).Activate
                            Application.ScreenUpdating = False
                            ' nettoyer la plage
                            'nettoyer
                            anact = Cells(4, 1).Value
                            liorg = 4: coorg = 1
                            'debutannee = #1/1/2009#
                            ' boucle sur type vac
                            For Each val In Range("typvac")
                               datedebut = val.Offset(0, 1): datefin = val.Offset(0, 2)
                            ' position départ sur planing et numéro mois départ
                               ligde = Month(datedebut) + liorg
                               colde = Day(datedebut) + coorg
                               nude = Month(datedebut)
                               For c = 0 To (datefin - datedebut)
                            '       MsgBox "la date du: " & datedebut + c  ' contrôle passage
                                   If nude = Month(datedebut + c) Then
                                       Cells(ligde, colde + D) = val.Value
                                       D = D + 1
                                   Else
                                       nude = Month(datedebut + c)
                                       ligde = ligde + 1: colde = 2: D = 0
                                       Cells(ligde, colde + D) = val.Value
                                       D = D + 1
                                   End If
                               
                               Next c
                               D = 0
                            Next val
                            Application.ScreenUpdating = True
                            'Repositionnement début planning
                            Range("A4").Select
                
    End If
        
x = x + 1
Wend
    

Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

0