Graphique croisé dynamique

Re,

Encore une petite modification de post ahah !

Le problème est que je ne peux pas modifier le fichier original car je n'ai pas les "droits" pour le faire. Je peux juste le copié coller et apporter des modifications dessus.

Re,

Ah...

Dans ce cas... Je pense qu'il faudra que tu copies manuellement les informations du fichier original pour mettre à jour l'autre fichier

Re,

Ah... mince bon tant pis merci tout de même Ausecour

Bonjour Ausecour,

J'ai une petite question...

J'ai rajouter les colonnes (équipement et AR) dans le tableau, mais du coup le "gantt" ne fonctionne plus. Je vous met le fichier en PJ.

Ou est-ce-que je dois modifier la valeur des colonnes dans le programme afin que le "gantt" se remette à fonctionner?

Merci

Bonjour

Etant donné que tu as modifié la zone de travail, il faut modifier plusieurs choses:

  • initialisation du tableau de travail:

    Maintenant il faut mettre av et non plus ao en colonne de fin, ce qui donne:
    tableau = .Range("a14", "av" & der_lig)
  • le tableau des colonnes: comme on a déplacé la zone, les colonnes de travail ne sont plus les mêmes

    devient alors:

    Comme tu as rajouté 6 colonnes, il faut tout décaler de 6

En faisant ces modifications, tout semble fonctionner correctement

Je t'envoie le fichier avec modification, j'ai changé une autre chose car j'avais mis la constante 21, qui fait référence au deuxième élément du tableau colonne, j'ai donc remplacé 21 par colonne(1):

Re,

Merci pour tes explications et ton aide ! Si j'en ai d'autres à rajouter je serais faire maintenant !

Et, y'a t-il quelque chose à changer dans le programme aussi si je veux rajouter des chantiers (par exemple ligne 126 ou entre deux chantiers) colonne A et qu'ils se mettent directement dans le "gant" à la bonne place (celle correspondante aux chantiers rentrés dans la "Feuille1"?

Petite modification du poste précédent.

Re

Non, il n'y aura rien à changer, il faudra juste resélectionner le code de l'ouvrier pour mettre à jour le Gantt.

Re,

Ok merci pour les infos précieuses

Re,

Je me demandais, est-il possible d'ajouter une maccro permettant de mettre en surbrillance (rouge) les cases 'AR' (colonnes K,M) des "équipements tps réels" lorsque celles-ci sont supérieures à celles des "équipements temps théoriques" (colonnes G,I). Exemple mettre en surbrillance colonne K,M si colonnes G,I < colonnes K,N.

Exemple si dans colonne G on a "S25" & dans colonne I on a "S30" alors si colonne K > colonne G (S25) et N > colonne I (S30) alors mettre en surbrillance colonne K et N. Est-il possible de le faire même si on rentre un nouveau chantier ou faut-il rentré manuellement la subrillance à chaque nouveau chantier?

Re

C'est possible de faire ça via une mise en forme conditionnelle oui, tu peux facilement mettre en forme des cellules d'après des tests, il faut juste voir ce que tu veux vraiment, par contre, comme tes tableaux ne sont pas déclarés dans le gestionnaire de noms, la mis en forme ne suivra pas si tu ajoutes des lignes, sauf si tu mets la mise en forme sur toutes les colonnes, ou que tu ajoutes une ligne en l'insérant entre deux lignes déjà existantes du tableau.

Voilà

Bonjour Ausecour,

Juste pour te tenir au courant, le programme et le gantt fonctionne à merveille, je suis ravis ! Encore merci !

Petite question que j'avais déjà du te poser, en fait j'ai fichier tableau final que tu m'as envoyé (qui comprend : ""gantt", "feuille1", "liste" et "BDD retard") et j'en ai un autre sans le programme et avec quelques différences (qui comprends : réception matériel", "matériels livrés" et "planning PROD").

Comment faire pour remplacer dans le fichier de base la feuille "planning prod" par le fichier avec le tableau final sans qu'il y est un impact sur les autres feuilles (réception matériel, matériels livrés)?

Merci par avance

Bonjour,

Si je comprends bien, tu as juste des feuilles en plus, il faut juste changer les noms des feuilles auquel le programme fait référence, en clair, regarder si tu as "Feuil1", que ce soit toujours la bonne feuille, et que ça ne soit pas "Feuil2", sinon il faudra faire le changement dans le programme.

Bonjour,

En fait j'ai le même fichier avec des feuilles à peux prêt similaires, mais je n'ai pas la modification qu'on a apporté sur celui-ci (programme, gantt, etc..).

Lorsque j'essaye de copié les 4 feuilles du fichier modifié (celui avec le programme) et que je les colles dans le fichier de base (celui sans modifications) cela me met un message d'erreur (image ci-joint).

Je ne comprends pas pourquoi car je colle également le programme avec les 4 feuilles.

message erreur

Bonjour,

Copier les feuilles ne suffit pas, il faut également copier le code du module qui est dans le fichier, comme tu ne l'as pas fait, la sub gantt n'existe pas dans ton second fichier, si tu copies colle le code dans un module, ça pourra ainsi appeler le programme

Re,

Question susurrement bête, mais je n'arrive pas a trouver le code du module...

Est-ce ceci? Si non, où est-ce-que je peux le trouver?

message erreur2

Re,

Ce n'est pas un code se trouvant dans une feuille, mais dans un module, tu peux le trouver dans "Module1" :

Sub gantt()
Application.ScreenUpdating = False

'Initialisations
ouvrier = Range("b1")
larg_defaut = 7
If ouvrier = "" Then Exit Sub
Dim TabChantier As Variant, TabSemaines As Variant, TabHeures As Variant, TabRetards As Variant
Dim CollecSem As New Collection, CollecSomme As New Collection, CollecRetard As New Collection, CollecRetardInduit As New Collection
Dim forme As Shape
Dim cel As Range

Columns("B:BA").ColumnWidth = larg_defaut
larg_cel_defaut = Range("b1").Width
colonnes = Array(16, 27, 32, 35, 40, 45, 48)
With Feuil1
    der_lig = .Range("a" & Rows.Count).End(xlUp).Row
    tableau = .Range("a14", "av" & der_lig)
End With
ReDim TabChantier(LBound(tableau, 1) To UBound(tableau, 1), 1 To 3) 'semaine, heures,nom chantier

'Enregistrement dans TabChantier des heures et des semaines
For i = LBound(tableau, 1) To UBound(tableau, 1)
    If tableau(i, colonnes(1)) <> "" Then
        TabChantier(i, 3) = tableau(i, 1) & " " & tableau(i, 2)
        For j = LBound(colonnes, 1) To UBound(colonnes, 1) - 1
            col_dep = colonnes(j)
            col_fin = colonnes(j + 1) - 1
            If tableau(i, col_dep) = ouvrier Then
                For k = col_dep + 1 To col_fin Step 2
                    semaine = tableau(i, k)
                    heures = tableau(i, k + 1)

                    If semaine <> "" And heures <> "" Then
                        TabChantier(i, 1) = TabChantier(i, 1) & IIf(TabChantier(i, 1) = "", "", ",") & semaine
                        TabChantier(i, 2) = TabChantier(i, 2) & IIf(TabChantier(i, 2) = "", "", ",") & heures
                    End If
                Next k
            End If
        Next j
    End If
Next i

'Tri du tableau TabChantier par semaines
For i = LBound(TabChantier, 1) To UBound(TabChantier, 1)
    TabSemaines = Split(TabChantier(i, 1), ",")
    TabHeures = Split(TabChantier(i, 2), ",")
    If UBound(TabSemaines, 1) > LBound(TabSemaines, 1) Then
        lig = LBound(TabSemaines, 1)
        Do
            Min = CDbl(TabSemaines(lig))
            For h = lig + 1 To UBound(TabSemaines, 1)
                If CDbl(TabSemaines(h)) < Min Then
                    memoire = TabSemaines(lig)
                    TabSemaines(lig) = TabSemaines(h)
                    TabSemaines(h) = memoire
                    memoire = TabHeures(lig)
                    TabHeures(lig) = TabHeures(h)
                    TabHeures(h) = memoire
                End If
            Next h
            lig = lig + 1
        Loop While lig < UBound(TabSemaines, 1)
        txtsem = ""
        txth = ""
        For h = LBound(TabSemaines, 1) To UBound(TabSemaines, 1)
            txtsem = txtsem & IIf(txtsem = "", "", ",") & TabSemaines(h)
            txth = txth & IIf(txth = "", "", ",") & TabHeures(h)
        Next h
        TabChantier(i, 1) = txtsem
        TabChantier(i, 2) = txth
    End If
Next i

'Enregistrement des retards dans la collection
TabRetards = Range("retards[#All]")
For i = LBound(TabRetards, 1) + 1 To UBound(TabRetards, 1)
    CollecRetard.Add TabRetards(i, 4), TabRetards(i, 1) & TabRetards(i, 2) & TabRetards(i, 3)
Next i

'suppression des formes
For Each forme In Feuil2.Shapes
    If Right(forme.Name, 5) = "gantt" Then
        forme.Delete
    End If
Next forme

der_lig = 4 + UBound(TabChantier, 1) - 1
Range("a4", "a" & der_lig) = ""
On Error Resume Next
'Parcours du tableau des chantiers
For i = LBound(TabChantier, 1) To UBound(TabChantier, 1)
    lig = 4 + i - 1
    Range("a" & lig) = TabChantier(i, 3)
    If Not TabChantier(i, 1) = "" Then
        TabSemaines = Split(TabChantier(i, 1), ",")
        TabHeures = Split(TabChantier(i, 2), ",")

        'ajout forme
        For h = LBound(TabSemaines, 1) To UBound(TabSemaines, 1)
            'initialisations
            nsem = CStr(TabSemaines(h))
            clé = TabChantier(i, 3) & ouvrier & nsem
            valretard = 0
            valretard = CollecRetard(clé)
            retardinduit = 0
            retardinduit = CollecRetardInduit(nsem)
            retard = False
            heures = CDbl(TabHeures(h))

            Do
                'calcul des valeurs de variables
                somme = 0
                somme = CollecSomme(nsem)
                dec_gauche = 0
                dec_gauche = CollecSem(nsem)
                col = Range("b3", "ba3").Find(CDbl(nsem), lookat:=xlWhole).Column
                Set cel = Cells(lig, col)
                pos_gauche = cel.Left + dec_gauche
                pos_haut = cel.Top
                hauteur = cel.Height

                If Not retard Then
                    If somme + heures - retardinduit <= 39 Then
                        couleur = RGB(125, 125, 255)
                        largeur = cel.Width * WorksheetFunction.Min(39 - somme, heures) / 39
                        valretard = valretard + (heures - WorksheetFunction.Min(39 - somme, heures))
                    Else
                        couleur = RGB(255, 50, 50)
                        cel.ColumnWidth = larg_defaut * ((somme + heures - retardinduit) / 39)
                        largeur = cel.Width - dec_gauche
                        valretard = valretard + retardinduit
                    End If
                Else
                    couleur = RGB(0, 0, 0)
                    heures = WorksheetFunction.Min(IIf(somme >= 39, 0, 39 - somme), valretard)
                    valretard = valretard - heures
                    largeur = cel.Width * (heures / 39)
                End If

                'gestion de la forme
                Set forme = Feuil2.Shapes.AddShape(msoShapeRectangle, pos_gauche, pos_haut, largeur, hauteur)
                forme.Line.Visible = msoFalse
                forme.Name = forme.Name & "gantt"
                forme.Fill.ForeColor.RGB = couleur
                forme.Placement = xlMove
                Set forme = Nothing

                If Not retard Then
                    'ajout de la barre si besoin
                    If somme + heures - retardinduit > 39 Then
                        Xdep = cel.Left + larg_cel_defaut
                        Ydep = cel.Top
                        Xfin = Xdep
                        Yfin = Ydep + cel.Height - 1
                        'prévoir l'ajout de la barre pour indiquer les 39h ici

                        Set forme = Feuil2.Shapes.AddConnector(msoConnectorStraight, Xdep, Ydep, Xfin, Yfin)
                        With forme.Line
                            .Visible = msoTrue
                            .ForeColor.RGB = RGB(0, 0, 0)
                            .ForeColor.TintAndShade = 0
                            .ForeColor.Brightness = 0
                            .Transparency = 0
                            .DashStyle = msoLineSysDash
                        End With
                        With forme.Line
                            .Visible = msoTrue
                            .Weight = 1
                        End With
                        forme.Name = forme.Name & "gantt"
                        forme.Placement = xlMove
                        Set forme = Nothing
                    End If
                End If

                'gestion des collections
                CollecSem.Remove (nsem)
                CollecSem.Add dec_gauche + largeur, nsem
                CollecSomme.Remove (nsem)
                CollecSomme.Add somme + heures, nsem

                If retard Then
                    If valretard > 0 Then
                        retardinduit = valretard
                        nsem = CStr(nsem + 1)
                        CollecRetardInduit.Remove nsem
                        CollecRetardInduit.Add retardinduit, nsem
                        clé = TabChantier(i, 3) & ouvrier & nsem
                    End If
                End If
                Set cel = Nothing
                retard = True

            Loop While valretard > 0
        Next h
    End If
Next i

'Mise en forme
Columns("A:A").EntireColumn.AutoFit

der_lig = Range("a" & Rows.Count).End(xlUp).Row
der_col = Cells(3, Columns.Count).End(xlToLeft).Column
Set plage = Range("B4", Cells(der_lig, der_col))

plage.Borders(xlDiagonalDown).LineStyle = xlNone
plage.Borders(xlDiagonalUp).LineStyle = xlNone
plage.Borders(xlInsideHorizontal).LineStyle = xlNone
With plage.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With plage.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With plage.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With plage.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With plage.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlHairline
End With

Application.ScreenUpdating = True
End Sub

Re,

Oui, mais je n'arrive pas à le copier dans mon nouveau classeur, cela me met toujours un message d'erreur...

Je te détail ce que je fais :

1) Copie des feuilles "gantt", " Feuille1", "Liste" dans un nouveau classeur :

1

2) J'essaye de changer d'ouvrier pour voir si cela fonctionne, cela me met un message d'erreur :

2

3) Je remplace ce message par le code module1 dans le nouveau classeur :

3

4) Lorsque je change d'ouvrier avec le bouton, plus rien ne ce passe ...

J'ai vraiment du mal à comprendre la démarche à réaliser..

Re, c'est parce que tu copies le code du Module 1 dans la feuille gantt, ce qu'il ne faut pas faire, la feuille gantt garde son code qui appelle le programme "gantt", le code que je t'ai donné, il faut créer un module dans ton fichier pour le coller dedans, ce code n'est pas à mettre dans une feuille. Pour créer un module, tu fais un clic droit et ça te proposera d'ajouter un module, tu le fais, et tu colles le code dedans

Re,

D'accord j'ai compris merci, mais je ne trouve pas la fonction pour créer un module en faisant clique droit.. (je doit être aveugle et pas très "fut fut")

4
Rechercher des sujets similaires à "graphique croise dynamique"