Jeux d'icone pour afficher des jalons

fabi1joret

XLDnaute Junior
Bonjour le forum,

Je recherche un peu d'aide pour la mise en place d'un planning d'affectation de tache.
Je voudrais affecter par le biais d'une mise en forme conditionnelle des jeux d'icones qui me servirais de jalons de tache par rapport à des dates définis dans une colonne adjacente au planning.
En gros, je voudrais qu'un icone s'affiche dans chaque cellule correspondante aux dates définies dans les colonnes jalons.
J'ai déjà contourné le problème en affectant un format personnalisé avec un caractère spéciale mais cela m'oblige à avoir un 0 ou autre dans chaque cellule du planning ce qui m’alourdis considérablement le fichier (2000 lignes sur un intervalle d'un an et déjà plusieurs mise en forme conditionnelle avec formules pour les différentes taches à appliquer).
Je commence à douter que cela soit possible mais si quelqu'un à même un début de piste je suis preneur.
 

Pièces jointes

  • Jalon.xlsx
    10.1 KB · Affichages: 105
  • Jalon.xlsx
    10.1 KB · Affichages: 118
  • Jalon.xlsx
    10.1 KB · Affichages: 137

JCGL

XLDnaute Barbatruc
Re : Jeux d'icone pour afficher des jalons

Bonjour à tous,

Pas certain d'avoir compris la demande...

Un remplissage de deux couleurs : une pour les "Affectations" et une pour les "Jalons".

Formules :

Pour le Vert :
=SOMMEPROD((E$4>=$A5)*(E$4<=$B5))+SOMMEPROD((E$4>=$C5)*(E$4<=$D5))=2
Pour le Brun
=SOMMEPROD((E$4>=$A5)*(E$4<=$B5))+SOMMEPROD((E$4>=$C5)*(E$4<=$D5))=1



Capture 1.png

A+ à tous
 

Pièces jointes

  • Capture 1.png
    Capture 1.png
    11.2 KB · Affichages: 192
  • Capture 1.png
    Capture 1.png
    11.2 KB · Affichages: 188
  • JC Jalon.xlsx
    17.1 KB · Affichages: 87

chris

XLDnaute Barbatruc
Re : Jeux d'icone pour afficher des jalons

Bonjour
Bise à JCGL;)

Le problème des icônes est qu'on ne peut utiliser de formule avec des adresses relatives : cela oblige à une MFC par ligne ce qui est lourd ou bien à une valeur dans la cellule ce qui est gênant puisque tu valorise avec les affectations...
 

fabi1joret

XLDnaute Junior
Re : Jeux d'icone pour afficher des jalons

Bonsoir le forum.

Il est vrai que ma demande n'est pas des plus claire.
J'avais déjà proposé au patron un remplissage par motif (rayure ou autre) sur les jalons pour différencier des tâche par couleur mais sa demande est vraiment spécifique. Il veut à tous pris un jalon représenté par un symbole de la même façon qu'on peut les trouver sur MS Project (si c'est plus parlant...).
Donc pour contourner ce problème j'ai utilisé la mise en forme conditionnelle pour affecter le symbole "◊" (de la même manière que l'on pourrais placer € ou %) qui se place devant ou derrière le chiffre contenu dans la cellule suivant si c'est un début ou fin de jalon. Cela m'oblige à placer un 0 dans toutes les cellule qui ne contiennent pas d'affectation de personnel et rendre ce 0 invisible en appliquant le format ";;;". Sur le nombre de cellule cela rend le fichier très lourd à gérer (la macro toute bête que j'ai fait pour placer un 0 dans toutes les cellules nécessaires à tourné pratiquement 10mn...).
Je me suis donc tourné sur la mise en forme conditionnelle par icones quand j'ai vu que l'on pouvais utiliser des formules mais je n'est rien trouvé de probant quant à l'utilisation de cette option. (j'ai pensé à la fonction Indirect mais ne la maîtrise pas ou très peu)
J'espère avoir été plus clair. Si ce n'est pas le cas je ferai un fichier exemple de ce que j'ai fait mais pas ce soir. je me lève dans 5h pour aller au taf donc il est temps d'aller au dodo...

[Edit]

Pour JCGL,

J'ai regardé l'utilisation de sommeprod mais je ne comprend pas l’intérêt de passer par cette fonction. N'est-il pas plus simple et moins lourd à gerer d'utiliser
Code:
=OU(E$4=$C5;E$4=$D5)
pour les jalons et
Code:
=ET(E$4>=$A5;E$4<=$B5)
pour les tâches en faisant attention à leur ordres dans la liste des mise en forme? (voir fichier joins)
 

Pièces jointes

  • Jalon.xlsx
    10.2 KB · Affichages: 73
  • Jalon.xlsx
    10.2 KB · Affichages: 83
  • Jalon.xlsx
    10.2 KB · Affichages: 107
Dernière édition:

chris

XLDnaute Barbatruc
Re : Jeux d'icone pour afficher des jalons

Bonjour

On peut effectivement dynamiser un peu les icônes par INDIRECT mais cela suppose néanmoins que la cellule contienne quelque chose car on ne peut que comparer sa valeur a quelque chose, obtenu de plusieurs manières.

A mon avis la solution réside plus en VBA : placer un symbole et pas de MFC. Une procédure événementielle lors du changement de date d'un jalon...
 

chris

XLDnaute Barbatruc
Re : Jeux d'icone pour afficher des jalons

Bonjour
Coucou Tatiak ;) Beau diagramme

Je suis resté sur l'idée de départ.

Voici le code à placer dans le module de la feuille (aspect des formes à adapter. Forme de fin éventuellement plus à droite si 2 jalons possibles par date...)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cas As Byte, Existe As Boolean, x As Double, y As Double, Z As Single

    If Target.Column <> 3 And Target.Column <> 4 Then Exit Sub
    Cas = IIf(Target.Column = 3, 0, 1)
    Cible = Application.WorksheetFunction.NetworkDays(Cells(4, 5).Value, Target.Value) + 2 - Cas
    With Target.Offset(0, Cible)
        x = .Left + 5
        y = .Top
        Z = (.Height - 7) / 2
    End With
    'Verif forme existante
    Existe = 0
    For Each jalon In ActiveSheet.Shapes
        If jalon.Top > Target.Top And jalon.Top < Target.Offset(1, 0).Top Then
            If (jalon.AutoShapeType = msoShapeOval And Cas = 0) Or (jalon.AutoShapeType = msoShapeDiamond And Cas = 1) Then
                jalon.Left = x
                Existe = 1
                Exit For
            End If
        End If
    Next jalon
    
    'Création
    If Existe = 0 Then
        If Cas = 0 Then
            ActiveSheet.Shapes.AddShape(msoShapeOval, x, y + Z, 7, 7).Select
            Selection.ShapeRange.ShapeStyle = msoShapeStylePreset39
        Else
            ActiveSheet.Shapes.AddShape(msoShapeDiamond, x, y + Z, 7, 7).Select
            Selection.ShapeRange.ShapeStyle = msoShapeStylePreset41
        End If
        Target.Select
    End If
End Sub

A noter qu'un contrôle sur les dates de jalons pour interdire le week end serait un plus soit en validation soit en VBA.
 

fabi1joret

XLDnaute Junior
Re : Jeux d'icone pour afficher des jalons

Re, tatiak, chris.

Tatiak,
J'admire le travail et merci pour l'effort mais malheureusement ce type de diagramme est trop différent des attentes. Mais avec ton accord je le garde sous le coude puisque l'idée me plait...

Chris,
L'idée me convient parfaitement. Tu as été 10 fois trop rapide pour moi. N'espérant pas nécessairement une réponse j'avais commencé à essayer de mon coté mais je n'est pas eu le temps d'arriver jusque là. Je laisse quand même le fichier que j'ai commencé pour montrer vers quoi je partais. Du coup je vais essayer de suivre ta macro et l'adapter à ce que je recherche. c'est à dire un seul type de symbole à placer en début ou fin de cellule suivant si c'est un début ou fin de jalon.
Juste à titre d'info j'ai testé la macro et elle beug lorsqu'on supprime un jalon. Il faudrait ajouter une gestion d'erreur (peut-être?)

En tous cas merci pour ces pistes qui vont me permettent de gagner 2/3 jours
 

Pièces jointes

  • TestJalon.xlsm
    15.2 KB · Affichages: 115

chris

XLDnaute Barbatruc
Re : Jeux d'icone pour afficher des jalons

Re

Arf, voici le code corrigé.

Je conseillerai d'avoir 2 types de jalon même très similaires (on peut jouer sur la couleur) car pour repérer celui à déplacer ou supprimer je ne vois pas d'autre repère, la position à gauche ou à droite étant un peu plus difficile à tester car on n'est pas à l'abri d'un petit décalage du à un coup de souris malencontreux...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Cas As Byte, Existe As Boolean, x As Double, y As Double, Z As Single, Cellule As Range

'Contrôle de saisie sur une colonne unique
    If Target.Column <> 3 And Target.Column <> 4 Then Exit Sub
    If Target.Columns.Count > 1 Then
        MsgBox "Vous ne pouvez saisir dans 2 colonnes"
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
        Exit Sub
    End If
    Cas = IIf(Target.Column = 3, 0, 1)
    'Traitement de chaque cellule modifiée
    For Each Cellule In Target
    If Cellule.Value <> 0 Then
        Cible = Application.WorksheetFunction.NetworkDays(Cells(4, 5).Value, Cellule.Value) + 2 - Cas
        With Cellule.Offset(0, Cible)
            x = IIf(Cas = 0, .Left + 5, .Left + .Width - 12)
            y = .Top
            Z = (.Height - 7) / 2
        End With
    End If
    'Verif forme existante
    Existe = 0
    For Each jalon In ActiveSheet.Shapes
        If jalon.Top > Cellule.Top And jalon.Top < Cellule.Offset(1, 0).Top Then
            If (jalon.ShapeStyle = msoShapeStylePreset39 And Cas = 0) Or (jalon.ShapeStyle = msoShapeStylePreset41 And Cas = 1) Then
                If Cellule.Value = "" Then
                    jalon.Delete
                Else
                    jalon.Left = x
                End If
                Existe = 1
                Exit For
            End If
        End If
    Next jalon
    
    'Création
    If Existe = 0 And Cellule.Value <> "" Then
        If Cas = 0 Then
            ActiveSheet.Shapes.AddShape(msoShapeDiamond, x, y + Z, 7, 7).Select
            Selection.ShapeRange.ShapeStyle = msoShapeStylePreset39
        Else
            ActiveSheet.Shapes.AddShape(msoShapeDiamond, x, y + Z, 7, 7).Select
            Selection.ShapeRange.ShapeStyle = msoShapeStylePreset41
        End If
        Target.Select
    End If
    Next Cellule
End Sub

Edit : code modifié again pour gérer la multi saisie : on n'accepte pas de saisie ou copie sur les 2 colonnes début et fin mais on peut saisir ou effacer dans plusieurs cellules de la même colonne.
 
Dernière édition:

fabi1joret

XLDnaute Junior
Re : Jeux d'icone pour afficher des jalons

C'est vrai que deux formes différentes sont plus lisibles. J'ai quand même gardé la même couleur (noir suivant demande du patron).
J'ai ajouter tes lignes pour la suppression de jalon et j'ai juste ajouté la gestion de la largeur des cellules (si c'est ce que tu entend par coup de souris malencontreux).
Ca donne ça :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cas As Byte, Existe As Boolean, x As Double, y As Double, Z As Single, w As Double, D As Double

    If Target.Column <> 3 And Target.Column <> 4 Then Exit Sub
    Cas = IIf(Target.Column = 3, 0, 1)
    If Target.Value <> 0 Then
    Cible = Application.WorksheetFunction.NetworkDays(Cells(4, 5).Value, Target.Value) + 2 - Cas
    With Target.Offset(0, Cible)
        x = .Left
        y = .Top
        w = .Width
        D = 7
        Z = (.Height - D) / 2
    End With
    End If
    'Verif forme existante
    Existe = 0
    For Each jalon In ActiveSheet.Shapes
        If jalon.Top > Target.Top And jalon.Top < Target.Offset(1, 0).Top Then
            If (jalon.AutoShapeType = msoShapeChevron And Cas = 0) Or (jalon.AutoShapeType = msoShapeDiamond And Cas = 1) Then
                If Target.Value = "" Then
                jalon.Delete
                Else
                jalon.Left = x
                End If
                Existe = 1
                Exit For
            End If
        End If
    Next jalon
   
    'Création
    If Existe = 0 Then
        If Cas = 0 Then
            ActiveSheet.Shapes.AddShape(msoShapeChevron, x, y + Z, D, D).Select
            Selection.ShapeRange.ShapeStyle = msoShapeStylePreset8
        Else
            ActiveSheet.Shapes.AddShape(msoShapeDiamond, x + (w - D / 2), y + Z, D, D).Select
            Selection.ShapeRange.ShapeStyle = msoShapeStylePreset8
        End If
        Target.Select
    End If
End Sub

Je pense qu'avec ça je suis bon.
Il n'y a plus qu'à l'adapter au fichier de base de la plannification, voir si ça se gère bien, et normalement tout roule.
et encore merci pour l'aide apporté.
 

chris

XLDnaute Barbatruc
Re : Jeux d'icone pour afficher des jalons

Re,

Pour le coup de souris je voulais dire que si les deux jalons avaient même forme et même couleur, ne restait que la position qui pouvait être difficile à gérer.

Mon code gère aussi la largeur mais j'avais mis une petite marge à gauche et à droite.

J'avais aussi ajouté, après coup, la gestion multi saisie : si on copie ou efface un jalon sur plusieurs lignes...

Je pense qu'on a fait le tour mais sait-on jamais...
 

Discussions similaires

Réponses
2
Affichages
806

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 867
dernier inscrit
XFPRO