Mise en forme conditionnel sur un planing

Bonjour a tous;

Je dois mettre en place le planning des congés 2014.

En récupérant une base existante j'ai presque réussi a faire ce que je voulais.

Mais comme d'hab y'a un hic.

Dans l'onglet calendrier je souhaiterais que les coordinateurs de service aient une alerte lorsqu'ils posent un congé ou un rtt en même temps que leur backup (remplaçant). Et bien évidement que ça marche dans les deux sens c'est a dire que le backup ait une alerte si il pose un jour en même temps que le coordinateur qu'il doit remplacer.

Le mieux serait une alerte bien visuel. Que le fond de la cellule qui correspond au jour de congé sur le calendrier passe au rouge ou la police ou encore le contour de la cellule.

-Laure Farei, Cecile Falles et Mohamed Sghiri ne peuvent pas être en congé en même temps au moins 1 des trois doit être présent.

-Jean Ribezzi, Pierre alexendre Klien et Bruno Wostel ne peuvent pas être en congé en même temps au moins 1 des trois doit être présent.

-Benjamin Persicot, Nordine Boukherrouba et Martial Valtat ne peuvent pas être en congé en même temps au moins un des trois doit être présent.

-Martial Valtat et Nordine Boukerruba ne peuvent pas être en congé en même temps.

-Mohamed Kaoucha et Clement Duhem ne peuvent pas être en congé en même temps.

Ça fait un paquet de condition et je ne vois même pas comment les mettre en place.

Alors si il y a un âme charitable je suis preneur.

Merci

Bonjour

Rendez-vous ligne 1255...

Sur la ligne 1255, tu entres les différentes équipes Ex: Laure Farei, Cecile Falles et Mohamed Sghiri ont pour chiffre 1, Jean Ribezzi, Pierre alexendre Klien et Bruno Wostel ont pour chiffre 2, etc

Cette plage C1255:AY255 est de la même largeur que ton tableau (Doit-être )

Quand tu saisis un x de trop sur une ligne, un MsgBox t'annonce l'impossibilité et efface ton entrée.

Merci à Banzai qui a permis d'écrire la fonction Sommeprod correctement.

Code de Feuille

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C158:AY1253")) Is Nothing And Target.Count = 1 Then
Dim i As Byte, j As Byte, k As Byte
Application.ScreenUpdating = False
i = Target.Offset(1255 - Target.Row).Value
Range("C" & Target.Row, Range("AY" & Target.Row)).Select
ActiveWorkbook.Names.Add Name:="Jour", RefersTo:=Selection
j = Evaluate("SUMPRODUCT((jour=""x"")*(classes= " & i & "))")
k = Evaluate("SUMPRODUCT(N(classes= " & i & "))")
If j >= k Then
MsgBox "Impossible!! " & j - 1 & " sur " & k & " sont déjà en congés à cette date!"
Target.ClearContents
End If
End If
Target.Select
End Sub

Cordialement

Bonjour,

Beau boulot Amadéus

Clemdub, je suis moi même avec des questions analogues de gestion de RH... Je trouves la solution d'affichage des situations de chacun dans la vignette commentaire NICKEL !

Par contre je ne vois pas comment tu mets çà en place avec le fichier que tu as poster ? Peut-être manque-t'il l'onglet solde ?

Est ce que tu peux m'en dire un peu plus sur : Comment as tu mis en place l'affichage des situations en commentaire ?

Cordialement,

Leakim

Salut;

Effectivement je n'ai pas pus mettre tous le fichier parce qu’il était trop gros.

J'ai deux onglet supplémentairement avec le paramétrage des soldes et un au autre avec le calcul des etp.

Passe moi ton adresse en mp si tu veux que je te file le fichier complet.

Après pour la solution je vais regarder si j'arrive a le refaire sur le fichier d'origine. Merci je voyais vraiment pas comment faire..

Salut;

Je viens de regarder le fichier et ça fonctionne super surtout avec la fenêtre qui s'ouvre quand c'est pas possible c'est génial.

Par-contre le seul hic c'est que j'utilise pas des X pour indiquer un congé mais je fait un copier/collé des cellules en haut a gauche.

Ca permet de différencier les rtt des maladie et des cp et en plus on voit aussi les demis journées.

Alors quesqu'il faudrait que je modifie dans le code pour que ça marche en utilisant les cellules et pas des X.

Et pour ceux que ça intéresse je met le lien vers le fichier d’origine qui est vraiment très bien fait.

https://www.excel-pratique.com/fr/telechargements/gestion-du-personnel/tableau-de-suivi-de-conges-no85.php

Cordialement.

Resalut;

Bon je suis pas très doué mais j'arrive pas a faire fonctionner le code sur le fichier d'origine.

Quel est la marche a suivre pour rentre ce code correctement et l’exécuter.

Pour le moment j'ai un message d'erreur qui me dit end sub attendu.

Merci de votre aide.

Bonjour

Si tu as copié-collé le code, il est probable que tu as oublié la dernière ligne.

Il te suffit de la rajouter

à la fin

End Sub

Cordialement

En fait je m'y prenais mal pour rentrer le code.

Maintenant je l'ai mis au bon endroit mais apparemment il y a un problème sur cette ligne:

j = Evaluate("SUMPRODUCT((jour=""x"")*(classes= " & i & "))")

Ça me met la ligne en jaune et ça dit erreur 13 incompatibilité de type.

Je me doute bien que c'est moi qui fait mal mais je début juste avec les codes et les macro et je suis un peux paumé.

En tout cas encore merci.

Bonjour

Dans le fichier envoyé, la plage contenant les Nos des équipes

=CALENDRIER!$C$1255:$AY$1255

est nommée classes

Si sur ton fichier, cette ligne est différente, tu dois nommer la plage en question.

Cordialement

Impeccable ça fonctionne.

J'avais pas compris qu'il fallait nommer une plage. Désolé.

Du coup je reviens sur la question que j'avais posé plus haut.

Sur la ligne ci dessous j'ai remplacé le X par CP et ça fonctionne.

j = Evaluate("SUMPRODUCT((jour=""X"")*(classes= " & i & "))")
j = Evaluate("SUMPRODUCT((jour=""CP"")*(classes= " & i & "))")

Mais quel syntaxe je dois utiliser pour mettre plusieurs mot. J'ais essayé avec des "" ou des ;; mais ça n'a pas l'aire de fonctionner.

j = Evaluate("SUMPRODUCT((jour=""CP" "1/2 CP" "Maladie" "1/2 Maladie" "RTT" "1/2 RTT"")*(classes= " & i & "))")
j = Evaluate("SUMPRODUCT((jour=""CP;1/2 CP;Maladie;1/2 Maladie;RTT;1/2 RTT"")*(classes= " & i & "))")

Merci.

Bonjour

j = Evaluate("SUMPRODUCT((jour={""CP"";""Maladie"";""RTT"";""1/2 RTT""})*(classes= " & i & "))")

Cordialement

C'est génial ça marche impeccable.

Merci beaucoup d'avoir pris le temps de répondre a mes questions de débutant je n'y serais pas arrivé tout seul.

Je suis toujours aussi impressionné par les gens qui éditent ces codes. J’espère qu'un jour j'arriverais a en faire de même.

Mais c'est pas gagné.

Au plaisir de vous lire.

Salut;

Je reviens a nouveau avec mon planning.

Grace au code fourni par amadeus et banzai. (encore merci) je peux constituer des binôme qui ne peuvent pas se mettre en congé en même temps.

Maintenant je souhaiterais faire la même chose mais par service et que cette fois la condition serait que l'effectif de l’équipe ne descende pas en dessous de 50%.

Je pense pouvoir adapter le code sans trop de soucis mais par contre je ne vois pas comment mettre la condition de ne pas pouvoir descendre en dessous de 50% de l'effectif.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C158:AY1253")) Is Nothing And Target.Count = 1 Then
Dim i As Byte, j As Byte, k As Byte
Application.ScreenUpdating = False
i = Target.Offset(1255 - Target.Row).Value
Range("C" & Target.Row, Range("AY" & Target.Row)).Select
ActiveWorkbook.Names.Add Name:="Jour", RefersTo:=Selection
j = Evaluate("SUMPRODUCT((jour={""CP"";""1/2 CP"";""Maladie"";""1/2 Maladie"";""RTT"";""1/2 RTT""})*(classes= " & i & "))")
k = Evaluate("SUMPRODUCT(N(classes= " & i & "))")
If j >= k Then
MsgBox "Impossible!! " & j - 1 & " sur " & k & " sont déjà en congés à cette date!"
Target.ClearContents
Target.Select
End If
End If
Target.Select
End Sub

Je pense que ça ce joue sur la ligne que j'ai surlignée mais je vois pas trop comment l’écrire.

Si vous avez une idée...

Merci

Je met le fichier avec la ligne 1257 que j'ai rajouté et que j'ai nommée équipe.

Salut;

Bon ben en fait j'arrive absolument pas a modifier ce code. LOL. Prévisible.....

Personne aurait une idée pour mon soucis.

Cordialement

Salut;

Apres de nombreuse heure de travail j'ai enfin réussi a adapter ce code.

Je le met pour ceux que ça pourrait intéresser.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C158:AY1253")) Is Nothing And Target.Count = 1 Then
Dim i As Byte, j As Byte, k As Byte, l As Byte, m As Byte, n As Byte

Application.ScreenUpdating = False
i = Target.Offset(1255 - Target.Row).Value
n = Target.Offset(1257 - Target.Row).Value

Range("C" & Target.Row, Range("AY" & Target.Row)).Select
ActiveWorkbook.Names.Add Name:="Jour", RefersTo:=Selection
m = Evaluate("SUMPRODUCT((jour={""CP"";""1/2 CP"";""Maladie"";""1/2 Maladie"";""RTT"";""1/2 RTT""})*(service= " & n & "))")
l = Evaluate("SUMPRODUCT(N(service= " & n & "))")
j = Evaluate("SUMPRODUCT((jour={""CP"";""1/2 CP"";""Maladie"";""1/2 Maladie"";""RTT"";""1/2 RTT""})*(classes= " & i & "))")
k = Evaluate("SUMPRODUCT(N(classes= " & i & "))")
If m > l / 2 Then
MsgBox "Impossible!! 50% de l'effectif CDI est atteint "
Target.ClearContents
Target.Select
End If
If j >= k Then
MsgBox "Impossible!! " & j - 1 & " sur " & k & " sont déjà en congés à cette date!"
Target.ClearContents
Target.Select
End If
End If
Target.Select
End Sub

Cordialement

Rechercher des sujets similaires à "mise forme conditionnel planing"