Mise en forme conditionnelle

Bonjour,

C'est une suite à mon précédent post.

Je cherche à faire un calendrier automatique.

L'idée c'est que quand je change une date, les cellules de mon tableau excel se colorent en fonction de la formation que j'ai sélectionnée.

tout se passe donc très bien jusque là. Mon problème est que pour une date, il peut-y avoir plusieurs formations et donc plusieurs couleurs (2 max).

J'ai donc eu l'idée de créer une deuxième ligne qui devrait se colorer, mais je n'arrive pas à trouver la formule et surtout comment la faire appliquer.

Je ne suis peut-être pas très claire mais la pièce jointe devrait vous aider..

Help!!! ;-)

Je vous remercie d'avance!...

Bonjour

J'ai donc eu l'idée de créer une deuxième ligne qui devrait se colorer, mais je n'arrive pas à trouver la formule et surtout comment la faire appliquer.

Pourriez-vous donner un exemple concret à reproduire sur le fichier posté ?

Cordialement

Salut Sabbryna,
Salut Dan,

premier jet avant peaufinage.

Un double-clic en [F5:AJ28] démarre la macro.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim dDate As Date
'
If Not Intersect(Target, Range("F5:AJ28")) Is Nothing Then
    Cancel = True
    Application.ScreenUpdating = False
    '
    Range("F5:AJ28").Interior.Color = RGB(0, 0, 0)
    For x = 7 To Range("B" & Rows.Count).End(xlUp).Row
        For y = 0 To DateDiff("d", Cells(x, 2), Cells(x, 3))
            dDate = DateAdd("d", y, Cells(x, 2))
            Range("E3").Offset(Month(dDate) * 2 + _
                IIf(Range("E3").Offset(Month(dDate) * 2, Day(dDate)).Interior.Color = RGB(0, 0, 0), 0, 1), Day(dDate)).Interior.Color = _
                Cells(x, 4).Interior.Color
        Next
    Next
    '
    Application.ScreenUpdating = True
End If
'
End Sub


A+

3sabbryna.xlsm (32.62 Ko)

Salut Sabbryna,
Salut Dan,

petites améliorations...

- Tu avais sans doute remarqué en colonne [BB] la liste des formations.
Tu peux maintenant la compléter (pas encore modifier les intitulés et couleurs existants) en choisissant la couleur de fond puis l'intitulé lequel provoque le tri alphabétique de la-dite liste.

- Tu peux maintenant créer directement dans ton tableau [F5:AJ28] les nouvelles périodes de formation.
. la sélection doit se faire sur la ligne contenant les dates voire englober les lignes contenant ces dates (voir ci-dessous) ;
. d'un clic DROIT pour une seule journée ;
. en sélectionnant du bouton gauche plusieurs cellules sur une même ligne pour une période plus longue dans le même mois ;

If Not Intersect(Target, Range("F5:AJ28")) Is Nothing And Target.Count > 1 And Target.Row Mod 2 = 1 Then
    If Target.Rows.Count > 1 And Target.Rows.Count Mod 2 <> 1 Then iOK = 1
    If iOK = 0 Then
        dDate1 = IIf(Target.Rows.Count = 1, CDate(Selection.Cells(1, 1)), CDate(Selection.Cells(1, Selection.Columns.Count)))
        dDate2 = IIf(Target.Rows.Count = 1, CDate(Selection.Cells(1, Selection.Columns.Count)), CDate(Selection.Cells(Selection.Rows.Count, 1)))
        iRow = Range("B" & Rows.Count).End(xlUp).Row + 1
        Range("B" & iRow).Resize(1, 2).Value = Array(dDate1, dDate2)
        Range("B" & iRow).Resize(1, 2).Interior.Color = Range("B7").Interior.Color
        Range("D" & iRow).Select
    End If
End If

. en sélectionnant du bouton gauche plusieurs cellules sur 3 lignes (donc sur deux mois) pour une période plus longue encore.
La période de formation peut chevaucher deux mois si elle ne dépasse pas un mois plein : pour ce faire et ne pas t'y perdre, sélectionne d'abord la date de FIN puis la date de DÉBUT en prenant soin d'étendre la sélection sur les 3 lignes qui contiennent les dates des deux mois concernés.
La date de début sera calculée sur la cellule en haut à droite de la sélection, la date de fin sur la cellule en bas à gauche de la sélection : tu comprends mieux pourquoi la période doit rester inférieure à un mois plein.
Dans le cas où la formation dure plus d'un mois plein, et si tu veux créer cette période avec la souris, il faudra alors créer cette période de formation en deux fois, une par mois ou... tu peux toujours le faire en tapant les dates à la main.
La sélection crée les dates de début et de fin, crée une nouvelle ligne de dates en [B:C] et une liste de validation en [C:C] pour choisir la formation correspondante

If Not Intersect(Target, Range("D7:D" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then _
    Rows(Target.Row).RowHeight = 30: _
    Rows(Target.Row).HorizontalAlignment = xlHAlignCenter: _
    Rows(Target.Row).VerticalAlignment = xlVAlignCenter:
    Range("B" & Target.Row).Resize(1, 2).NumberFormat = Range("B7").NumberFormat: _
    Cells.Validation.Delete: _
    Range("D" & Target.Row).Validation.Add Type:=xlValidateList, Formula1:="=BB1:BB" & Range("BB" & Rows.Count).End(xlUp).Row

La sélection d'une formation en colonne [D:D] provoque le tri alphabétique du tableau des colonnes [B:D] selon la formation et les dates.
La sélection d'une formation en colonne [D:D] ou un double-clic en [F5:AJ28] provoque d'office le recalcul du tableau.

If Not Intersect(Target, Range("D7:D" & Range("D" & Rows.Count).End(xlUp).Row)) Is Nothing Then _
    Target.Interior.Color = Range("BB:BB").Find(what:=Target, lookat:=xlWhole, LookIn:=xlValues).Interior.Color: _
    Range("B7:D" & Range("D" & Rows.Count).End(xlUp).Row).Sort _
        key1:=Range("D7"), order1:=xlAscending, key2:=Range("B7"), order2:=xlAscending, Orientation:=xlTopToBottom: _
    Call Scanner

Il y a sans doute encore des choses à faire mais teste déjà tout ça!


A+

6sabbryna.xlsm (39.04 Ko)

Bonjour,

Merci pour votre aide ... et ce travail!

Je pensais échapper aux macros.. car je ne comprends rien! .. Mais je vais essayer de décoder tout ça!^^

Salut Sabbryna,

dernières améliorations en date...

Modifications de formations existantes
En sélectionnant les cellules-dates [B:C] d'une formation, la macro repère (CASE 2 dans le code ci-dessous) la période correspondante dans le tableau [F5/AJ28]. Il te suffit de redessiner la correction là où c'est nécessaire.
- un clic droit pour un jour ;
- une multi-sélection avec le bouton gauche.

! ATTENTION de ne pas utiliser le carret de redimensionnement ni de vouloir déplacer la sélection !
Les nouvelles dates se renseigneront à la place des anciennes.

If Not Intersect(Target, Range("B7:B" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    Select Case Selection.Columns.Count
        Case 2
            If Selection.Rows.Count = 1 Then _
                [BA1] = Selection.Row: _
                iMonth1 = Month(Selection.Cells(Selection.Rows.Count, 1)): _
                iMonth2 = Month(Selection.Cells(1, Selection.Columns.Count)): _
                iDay1 = Day(Selection.Cells(Selection.Rows.Count, 1)): _
                iDay2 = Day(Selection.Cells(1, Selection.Columns.Count)): _
                Range("E3").Offset(iMonth1 * 2, WorksheetFunction.Min(iDay1, iDay2)).Resize(IIf(iMonth2 - iMonth1 = 0, 1, 3), Abs(iDay1 - iDay2) + 1).Select
        Case 3
            If MsgBox("Confirmez-vous la suppression de " & IIf(Selection.Rows.Count = 1, "cette formation ?", "ces formations ?"), vbCritical + vbYesNo + vbDefaultButton2, "FORMATIONS") = 6 Then _
                Selection.Delete shift:=xlUp: _
                Call Scanner(1): _
                [B1].Select: _
                Application.EnableEvents = True: _
                Exit Sub
    End Select
End If

Effacement d'une formation
Cette fonction est activée en sélectionnant les trois cellules-dates et intitulé en [B-C-D] de la formation ciblée.
Un message te demande une confirmation avant l'effacement (CASE 3 dans le code ci-dessus).

Repérage précis d'un type de formation
Dans la palette de couleurs, difficile parfois de repérer les différentes formations d'un même type!
Pour n'afficher qu'un type de formation, il suffit d'un double-clic sur son intitulé dans la colonne [D:D].

If Not Intersect(Target, Range("D7:D" & Range("D" & Rows.Count).End(xlUp).Row)) Is Nothing Then _
    Cancel = True: _
    Call Scanner(Target.Row): _
    [E5].Select

L'affichage global est récupéré, comme d'hab' via un double-clic dans le tableau [F5:AJ28].

Modification d'un intitulé ou des couleurs d'une formation
J'ai choisi une méthode simplissime demandant un rien de logique de ta part.
Tu peux modifier l'intitulé ou les couleurs (INTERIOR et/ou FONT)... séparément! En effet, la macro doit retrouver un élément commun entre l'ancienne et la nouvelle version d'une étiquette-formation.
Tu exécutes tes changements dans la liste en colonne [BB:BB] et tu les valides de deux manières.
- un double-clic sur l'étiquette opère la transformation mais reste sur la colonne [BB:BB], prêt pour une nouvelle modification ;
- un clic-droit opère le changement mais bascule l'affichage sur le tableau de travail.

If Not Intersect(Target, Range("BB1:BB" & Range("BB" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    Cancel = True
    For x = 7 To Range("D" & Rows.Count).End(xlUp).Row
        If Cells(x, 4).Interior.Color = Target.Interior.Color Or Cells(x, 4) = Target.Value Then Target.Copy Destination:=Cells(x, 4)
    Next
    Call Scanner(1)
    ActiveWindow.ScrollColumn = 1
End If

Changement d'année
Pour faciliter une nouvelle année de formation,
- D'ABORD enregistrer le fichier en cours sous un nom correspondant à cette nouvelle année ;
- ENSUITE seulement, dans ce fichier rebaptisé, encoder l'année en [B1] et tout le calendrier se nettoie dans anciennes données et se met à jour.

If Not Intersect(Target, Range("B1")) Is Nothing Then
    Range("F5:AJ28").Interior.Color = RGB(0, 0, 0)
    With Range("B7:D" & WorksheetFunction.Max(7, Range("B" & Rows.Count).End(xlUp).Row))
        .Font.Color = RGB(0, 0, 0)
        .Interior.Color = xlNone
        .Value = ""
    End With
End If

Petit plus, j'ai créé une MFC pour signaler les samedis et dimanches en BLANC GRAS.

Á côté de cela, j'ai éliminé une ribambelle de MFC dont je ne voyais pas l'utilité ainsi que les formules en colonne [A:A] !! Euh, fallait pas ?

Voilà, si tu as d'autres idées, besoins ou demandes, ne te gêne pas!

Bon travail!


A+

Génial! Je n'arrive pas à joindre le fichier...

14sabbryna.xlsm (45.73 Ko)

Voilà le fichier...


A+

Bonjour Curulis57,

Rho la la.. J'ai même pas de mots! C'est vraiment magique! ^^

Je peux faire absolument tout ce que je veux et même plus encore!

J'ai juste une petite demande.. tant qu'à faire...

Si je veux changer la couleur de mes cellules vides ou la couleur des cellules du tableau [F5/AJ28], je fais comment?

Salut Sabbryna,

tu veux dire pouvoir appliquer des skin à ton tableau ?
Pas exigeante, toi, hein, non ?

Je te prépare quelque chose, sans doute pas pour tout de suite...


A+

Salut curulis57!

Tu as déjà fait un travail fabuleux qui va me permettre de demander une augmentation!!! Maintenant il faut aller au bout!^^

Je plaisante bien sûr (sauf sur le fait que tu as vraiment compris ce dont j'avais besoin et que je t'en suis très reconnaissante!)

Donc si tu trouve comment appliquer des skins, tant mieux mais c'est pas ce qui va m’empêcher d'utiliser le tableau!

Merci encore!!

Bonjour Sabbryna,

l'affaire des skins avance bien. Je tâtonne surtout sur des procédés d'exécution pour conserver une cohérence d'action avec le calendrier.

Pour le reste, j'ai pensé à un autre truc.
J'imagine que tu as une BDD annexe où tu répertories des noms de prof, de lieux de formations (implantations, locaux) et autres précisions en rapport avec le type de formation, d'époque de l'année, et que sais-je d'autre encore, dont les infos te sont utiles à connaître et consulter pendant ton travail sur le calendrier.

Donc, SI ET SEULEMENT SI tu trouves cette démarche aussi utile et pertinente que mes délires précédents, dresse un audit complet et précis de tes besoins d'action, création, modification, consultation ou affichage des infos de cette BDD annexe en combinaison automatique avec ton travail sur le calendrier.

D'ici là, je termine les skins et je reviens dès que possible.


A+

Bonjour Curulis57!

Mais je rêve ou tu en re-demandes?

Pour tout te dire, je travaille actuellement sur un autre tableau (qui ressemble davantage à un tableau de bord) qui est plus accès sur les effectifs de mes formations, avec un certain nombre d'informations liées à l'identité du stagiaire, ses heures de formations prévues et celles réalisées ...

Donc j'avance un peu sur le contenu et je reviens vers toi!

A+

Bonjour Sabbryna,

le projet Skin est quasi terminé : je me donne encore ce WE pour tester tout ça voire ajouter l'une ou l'autre fonctionnalité annexe qui me trotte en tête.
De ton côté, as-tu réfléchi à l'étape suivante... s'il y en a une, bien sûr ?


A+

Salut Sabbryna,

à force de chercher à améliorer et fouiller toutes sortes de choses, je n'ai pas terminé mes tests et essais divers.

Voici un survol des nouveautés:

- les périodes se dessinent à plat, sans escalier ;

- un clic sur une date en [B:B] repère la période sur le Calendrier ;

- un clic sur une cellule-période sur le Calendrier repère la période dans l'Agenda [B:C] ;

- en ligne 6, certaines options permettront :

* d'ajouter une période directement dans une formation prédéfinie ;

* de changer une date de formation avec ou sans confirmation ;

* de supprimer une date de formation avec ou sans confirmation.

image

Côté SKIN, tu pourras créer, modifier autant de skins que tu souhaites avec quelques diktats (actuellement) de ma part que je t'expliquerai plus tard.
Je cherche encore le meilleur moyen de combiner tout ça.

image

Bref, je ne t'oublie pas mais je commence à me prendre très (trop ?) à mon propre jeu...
Je m'amuse comme un gamin!

De ton côté, ton devoir avance-t-il aussi ?


A+

Salut Sabbryna,

désolé du temps qui passe...
Je peux maintenant m'autoriser à te fournir un fichier, je crois, fiable.
Je vais te faire ça en deux posts : un pour les fonctions opérationnelles et l'autre pour les skins.

Nomenclature pour parler de la même chose

- l'Agenda est l'ensemble des colonnes [B-C-D] contenant la liste triée des différentes formations encodées ;
- le Calendrier est le tableau [G7:AK30]

Fonctions opérationnelles

Amélioration notable : les périodes de formation sont maintenant dessinées de façon linéaire dans le Calendrier : plus d'escalier ! Si plusieurs dates se chevauchent, les formations correspondantes se partagent alors les deux lignes d'affichage sans s'emberlificoter les pinceaux !
Autre petite chose : tu peux identifier une formation en cliquant sur UNE cellule colorée de cette période dans le Calendrier. Les dates et son intitulé s'affichent en info juste au-dessus du Calendrier et un petit marqueur coloré se place en regard dans la colonne [A:A] de l'Agenda.

Rien de vraiment nouveau sur le fond : encodage, modification et suppression. C'est surtout l'enrobage qui est amélioré avec ce petit ruban qui ne demande qu'à grandir, ces boutons étant simplement cliquables gauche ou droit, selon le cas.

image

- Á droite, les boutons d'accès aux fonctions (clic gauche)
* le triangle rouge = fonctions de travail accessibles ;

image

* un cercle rouge : accès interdit. Là, j'ai un peu déliré car pour réactiver les fonctions, il te faudra, avant de cliquer sur ce bouton, "dessiner" le mot de passe en double-cliquant, dans l'ordre, [B4-D4-D5-B5]. Petite blague à supprimer, sûrement !

* La loupe attend encore tes indications pour tout travail de recherche d'infos à partir du Calendrier. Un clic sur ce bouton désactive les fonctions d'encodage, à gauche ;
* un clic sur le crayon active les fonctions d'encodage, les seules codées pour l'instant.

ENCODAGE des formations
1. Tout à gauche, la fonction "Nouvelle Formation" avec son petit bouton de commande :

image

La sélection d'une nouvelle période de Formation se fait de 2 manières :
a) d'un clic DROIT pour UN jour ;
b) une sélection multiple pour une Formation de plusieurs jours, soit dans le même mois, soit à cheval sur deux mois.
Attention : cette sélection doit, pour être acceptée, être ciblée sur des jours libres et non plus, comme dans la première version, sur les lignes de dates.
Ne pas oublier, pour une période chevauchant deux mois, de cibler le premier et le dernier jour dans une même sélection sur 3 lignes !
Une macro vérifiera quand même la validité de ta sélection.

: grisé = pas d'encodage autorisé ;
: vert = encodage autorisé sur autorisation : une confirmation est exigée ;
: rouge = encodage immédiat (en règle générale, le rouge est synonyme de "Danger ! Attention à ce que tu fais !" ;
Les modes Vert et Rouge passeront par l'étape du choix du type de formation via une liste de validation dans l'Agenda en colonne [D:D]
Détail : si la ligne d'encodage de cette nouvelle formation, tout en bas de l'Agenda, est hors-écran, la macro scrolle automatiquement jusque là pour toi.
Mode d'encodage automatique
En cliquant le petit bouton, tu ouvres une liste de validation comprenant l'ensemble des formations : fais ton choix. Le symbole devient plein, prend la couleur de cette formation et le bouton se colore de rouge.
La sélection de cellules libres dans le Calendrier provoquera dès lors l'encodage immédiat de cette période sous la couleur de la formation ciblée.
Tu peux changer cette programmation en cliquant autant de fois que nécessaire sur le bouton de commande.

Pour annuler cette programmation automatique, un clic DROIT suffit à revenir aux modes VERT et ROUGE avec un symbole creux.
Pour annuler même ce dernier mode, un autre clic DROIT grise le symbole : aucun encodage ne sera plus possible avant une réactivation par un clic sur le symbole.

2. Modification des dates d'une formation

image

Tu as deux modes : Vert et Rouge.
Même principe que ci-dessus : le mode Vert te demandera une confirmation tandis que le rouge exécutera le changement directement.
Un clic DROIT grise le symbole et empêchera toute modification ultérieure sauf réactivation d'un autre clic GAUCHE.

D'abord, il faut identifier la période à modifier que tu peux sélectionner de 2 façons :
* soit en sélectionnant les 2 cellules-dates correspondantes dans l'Agenda en colonnes [B:C] ;
* soit en cliquant sur UNE cellule colorée de cette période dans le Calendrier

Si la fonction "Modification" est bien activée, un signe "<" s'affichera en regard de la ligne du Calendrier en colonne [E:E]

Ensuite :
* soit tu peux annuler la procédure en cliquant hors du Calendrier ou sur une cellule libre du Calendrier ;
* soit cibler la nouvelle période en sélectionnant celle-ci sur des cellules libres (clic DROIT pour UN jour ou une multi-sélection classique).

3. Effacement d'une période de formation

image

Tu as deux modes : Vert et Rouge.
Même principe que ci-dessus : le mode Vert te demandera une confirmation tandis que le rouge effacera la ligne de l'Agenda directement.
Un clic DROIT grise le symbole et empêchera tout effacement avant réactivation.

Pour ce faire, il faut sélectionner les 3 cellules correspondantes dans l'Agenda en colonnes [B-C-D].

Voilà pour cette première partie que j'espère sans défaut, les tests ayant apporté leur lot de petits bugs idiots, corrigés dans le fichier joint.
Mais, nul n'étant parfait...

Á digérer avant de continuer!


A+

54sabbryna-skin-v15.zip (530.06 Ko)

Salut Curulis57!

Je vois que tu t'amuses comme un fou! ^^ Je t'avoue que je ne pensais même pas que l'on pouvait avoir autant de gadgets avec un doc excel!^^

De mon coté, je crée un doc google sheets (afin que toute l'équipe, ou qu'elle se trouve puisse venir agrémenter la liste) qui va venir alimenter la première page du doc en pièce jointe. Ce dossier va nous permettre de suivre qui est inscrit sur chacune des formations, avec les dates de formation, le formateur et puis plein de petites choses qui nous sont utiles!..

Je n'ai pas de demandes particulières, mais je sais que tu as souvent des idées de génie!

Bon maintenant, il me tarde de voir comment utiliser les skills! Mais ne te met pas la pression, je suis en congés pendant 3 semaines!!

Rechercher des sujets similaires à "mise forme conditionnelle"