Microsoft 365 Limiter les valeurs à saisir dans une cellule en fonction de la date

charlydem

XLDnaute Nouveau
Bonjour a tous

Je suis en train de faire une outil de planification de l'activité de mes équipes pour les aider à mieux planifier leur activité. En gros, je leur demande chaque semaine de prévoir les taches qu'ils vont faire la semaine suivante en les mettant en statut "planifiée". Si au cours de la semaine ils ont des urgences à gérer ils peuvent ajouter des taches en "non planifiées". Cependant certains "petits malins" ne jouent pas le jeu et ajoutent des taches "planifiées" lors de la semaine en cours.

En résumé, j'aimerai que lorsque la date qui est en colonne D est située entre la date B2 et la date B3, seule la saisie de "non planifiée" soit autorisée en colonne G.

Ils pourraient toujours changer la date avant et après pour tricher mais je ne vois pas comment les en empecher...

J'ai pensé avoir trouvé la réponse ici https://www.excel-downloads.com/thr...de-cellules-a-partir-dune-date-butoir.165086/ mais ce n'était pas tout à fait ce que je cherchais...

Est ce que quelqu'un a une idée?

Merci beaucoup!

Charly
 

Pièces jointes

  • Planning.xlsx
    18.7 KB · Affichages: 15
Solution
bonjour
on peut coder cela plus simplement me semble t il ;)
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("g2:g100")) Is Nothing Then
        With Target.Validation
            .Delete
            If Date >= [b2] And Date <= [B3] Then
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                     xlBetween, Formula1:="=Listes!$A$2"
            Else
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                     xlBetween, Formula1:="=Listes!$A$2:$A$3"
            End If

        End With
        Exit Sub
    End If
End Sub
;)

charlydem

XLDnaute Nouveau
Bonjour et merci @MP59 pour votre réponse si rapide! J'ai rapidement jeté un oeil et ça me semble excellent. Je vais regarder plus à fond cet après midi.
Juste une question : je vois que vous avez mis une liste de choix sur toutes les cellules du tableau (yc la date) ça ne change rien si je limite la liste à la colonne qui m'intéresse n'est ce pas?
 

patricktoulon

XLDnaute Barbatruc
bonjour
on peut coder cela plus simplement me semble t il ;)
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("g2:g100")) Is Nothing Then
        With Target.Validation
            .Delete
            If Date >= [b2] And Date <= [B3] Then
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                     xlBetween, Formula1:="=Listes!$A$2"
            Else
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                     xlBetween, Formula1:="=Listes!$A$2:$A$3"
            End If

        End With
        Exit Sub
    End If
End Sub
;)
 

job75

XLDnaute Barbatruc
Bonjour charlydem, MP59, patricktoulon,

Voyez le fichier joint et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target.EntireRow, [D:I], UsedRange)
If Date < Range("B2") Or Target Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'sécurité
For Each Target In Intersect(Target, [D:D])
    If Target >= Range("B2") And Target <= Range("B3") Then
        If Target(1, 4) = "Planifiée" Then
            Application.Undo 'annule la modification
            If Target(1, 4) <> "Planifiée" Then Exit For
            Application.Undo 'rétablit la modification
        End If
    End If
Next
Application.EnableEvents = True 'réactive les évènements
End Sub
Comme vous le dites l'utilisateur peut toujours tricher en entrant une date d'une autre semaine.

A+
 

Pièces jointes

  • Planning(1).xlsm
    20.6 KB · Affichages: 5

MP59

XLDnaute Occasionnel
Bonjour Job75,
juste une précision pour Charlydem :
ton code suppose donc de laisser la validation avec seulement 2 choix.
Sinon si quelqu'un écrit planifié ou planifiee ou encore avec un espace avant ou après..... cela n'est pas corrigé.
 

patricktoulon

XLDnaute Barbatruc
re
re bonjour a tous

j'ai cru comprendre à l'énoncé et sauf erreur de ma part qu'il était hors de question de pouvoir modifier des taches ayant été programmées en temps et en heure a savoir avant la date1

hors @job75 avec ton modèle on peu transformer "planifié" en "non planifié"

et même si c'est un tout petit exercice je dirais qu'il y a des lacunes dans le concept du demandeur

il est donc impératif de tout simplement éjecter l’utilisateur si il sélectionne une ligne déjà rempli

de plus :
vu que plusieurs programmations de tache peuvent être d'une même journée c'est donc un tableau qui est amené a être variable en terme de nombre de lignes

il faut donc ajouter a cet "interface un bouton ou menu d'ajout de ligne dans le tableau

voila un bel exemple de chose simple qui quand c'est mal pensé devient une torture a gérer

pour ma part je maintient que
pour les lignes vides ou nouvelles c'est les dates en b2 et b3 qui doivent être comparées avec DATE
éjection de l'utilisateur sur sélection de lignes existantes
vu que les choix de worktype et type de planification
j'aurais fait ça avec un popup ou combobox qui déclenche le remplissage complet de la ligne sauf le client bien sur


A méditer ;)
 

charlydem

XLDnaute Nouveau
re
re bonjour a tous

j'ai cru comprendre à l'énoncé et sauf erreur de ma part qu'il était hors de question de pouvoir modifier des taches ayant été programmées en temps et en heure a savoir avant la date1

hors @job75 avec ton modèle on peu transformer "planifié" en "non planifié"

et même si c'est un tout petit exercice je dirais qu'il y a des lacunes dans le concept du demandeur

il est donc impératif de tout simplement éjecter l’utilisateur si il sélectionne une ligne déjà rempli

de plus :
vu que plusieurs programmations de tache peuvent être d'une même journée c'est donc un tableau qui est amené a être variable en terme de nombre de lignes

il faut donc ajouter a cet "interface un bouton ou menu d'ajout de ligne dans le tableau

voila un bel exemple de chose simple qui quand c'est mal pensé devient une torture a gérer

pour ma part je maintient que
pour les lignes vides ou nouvelles c'est les dates en b2 et b3 qui doivent être comparées avec DATE
éjection de l'utilisateur sur sélection de lignes existantes
vu que les choix de worktype et type de planification
j'aurais fait ça avec un popup ou combobox qui déclenche le remplissage complet de la ligne sauf le client bien sur


A méditer ;)
Merci à tous pour vos réponse. Je dois en effet voir ce qui est le plus efficace pour mon besoin. En fait je ne vous ai envoyé qu'une partie de mon fichier pour éviter d'envoyer trop de données. par Contre il ne faut pas que j'éjecte les utilisateurs sur la sélection de lignes existantes car ils y a d'autres colonnes sur lesquelles ils sont amenés à indiquer le statut de leur ordre de travail selon des concepts de planification. Je vais voir regarder ça demain et l'intégrer au reste de ma macro avant de cloturer le fil!
 

charlydem

XLDnaute Nouveau
Bonjour à tous,
je n'ai mis la liste de choix que sur la plage g2:g100.
Sur la première ligne c'est un filtre ;).
PS : le module ne sert à rien, la macro est dans la feuille planning.
Bonjour,
En fait ce n'est pas un probleme de filtre. j'ai bien un truc super bizarre qui se passe sur les différentes macros que j'ai testé. Dès que j'ajoute une ligne la liste de choix se met sur tous les champs et remplace les listes existantes sur l'ensemble de mon tableau... Je n'ai jamais vu ça ailleurs
 

Pièces jointes

  • Capture RCP.PNG
    Capture RCP.PNG
    16 KB · Affichages: 13

Discussions similaires