Lier une liste déroulante si valeur spécifique

Bonjour à tous,

J'aimerais savoir, après de longues heures de recherche, s'il est possible de lier une liste déroulante en fonction d'une valeur de cellule sur la colonne précédente.

Pour être plus claire, j'aimerais :

  • Afficher 100% dans colonne L si statut "Terminé" en colonne K
  • Afficher 0% dans colonne L si statut "Pas commencé" en colonne K
  • Afficher une liste déroulante dans colonne L avec 3 choix (25%, 50% et 75%) si "En cours" en colonne K

À savoir que les valeurs "Terminé", "Pas commencé" et "En cours" de ma colonne K s'affichent elles-mêmes selon certains critères (formule) et ne sont pas choisies dans une liste déroulante par l'utilisateur.

J'aimerais donc que si le statut "En cours" passe à "Terminé", le 100% s'affiche bien.

Je vous joins mon fichier Excel si cela peut aider. Le tableau en question se trouve feuillet "Plan d'actions".

Je suis tellement désespérée que j'hésite à trouver comment le coder en Python ^^

Bonjour,

Changez votre formule de la colonne K, essayez celle-ci::

=SI(OU([@[Deadline*]]="";[@[Date de début effective*]]="");"Pas commencé";SI([@[Date de fin effective*]]="";"En cours";SI([@[Date de fin effective*]]<>"";"Terminé")))

Cdlt

Bonjour Arturo,

Merci pour votre réponse ! Cette formule est certainement plus efficace en colonne K mais mon problème concerne surtout ma colonne L, par rapport au % d'avancement en fonction des valeurs de la colonne K. J'aimerais en effet proposer une liste déroulante en colonne L si et seulement si statut en K = "En cours"...

bonjour,

pour ce faire, passer par vba me semble obligatoire.

Bonjour h2so4,

Merci beaucoup pour votre aide !

Je n'arrive cependant pas à voir dans le fichier comment vous avez fait ? Quelle méthode suivre ?

Aussi, vous avez converti la colonne statut en liste, est-ce faisable sans cela ? C'est-à-dire en laissant la colonne statut avec des valeurs non liste ?

Concernant ma réponse, désolé, j'avais sauté une étape dans la lecture de votre demande, voici avec une validation de données dans la colonne "L"

Autre proposition avec du VBA, ne crée la liste que si K="Terminé"

Cdlt

Arturo,

Un grand merci pour ton aide c'est trop bien !

J'ai fait quelques modifs pour appliquer la liste déroulante si "en cours" et pas "terminé". Une dernière chose, est-il possible de repasser l'avancement à 100% après avoir saisi des avancements (25%, 50% et 75%) quand le statut repasse en "terminé" ? Est-ce dans le code VBA qu'il faut le faire ? (CF. fichier)

Bonjour Myasana, le Fil,

On peut créer par le biais du gestionnaire de noms, 3 noms pour ton besoin. Comme présenté ci-dessous.

image

Pour le 0% le nom sera Pas_commencé, et correspondra à la cellule 0% présentée dans la colonne de droite. Pour les 3 cellules qui suivent (25% à 75%) le nom sera Encours et enfin pour la dernière cellule de la colonne de droite le nom sera Terminé.

La liste de validation contiendra = Indirect($K1) si c'es t la ligne 1ou sinon la première ligne ou débute le tableau. Pour mon exemple c'est$ R55.

Ensuite sur la colonne L placer la liste de validation. Il ne pourra être choisi (par la flèche) que le pourcentage correspondant au terme en colonne précédente.

Arturo,

Cela ne répond pas vraiment à ma dernière question, je me suis sûrement mal exprimée désolée.
Lorsque le statut (colonne K) passe de "Pas commencé" à "En cours", la liste apparaît bien et je t'en remercie !

Maintenant, lorsqu'on sélectionne un % d'avancement dans la liste (colonne L) quand le statut est "En cours", et qu'ensuite le statut (colonne K) passe de "En cours" à "Terminé", j'ai toujours le même problème : la liste déroulante disparaît et le dernier % sélectionné persiste.
À l'origine, mon idée était de passer à 100% automatiquement lorsque le statut passe en "Terminé".

Cela permettrait à mon équipe de ne saisir que les dates et les % d'avancement quand "En cours" et de ne pas se préoccuper du reste.

Si cela est trop complexe, je me débrouillerais déjà bien avec ta dernière version, merci encore :)

Bonsoir X Cellus,

Je te remercie pour ta solution que je viens de tester.

Malheureusement, le même problème que celui évoqué dans ma réponse à Arturo persiste.

À savoir que quand le statut passe en "Terminé", le % d'avancement ne s'actualise pas automatiquement en 100%. Les choix de la liste s'actualisent bien et je retrouve uniquement 100% mais le dernier % d'avancement choisit lorsque le statut était encore "En cours" persiste en valeur visible...

bonjour,

Je n'arrive cependant pas à voir dans le fichier comment vous avez fait ? Quelle méthode suivre ?

La solution est dans une macro événementielle VBA, qui s'active dès que l'on introduit une valeur en colonne K, la macro réagit en fonction de ce qui a été introduit en colonne K et selon le cas, met un 100% un 0% ou prépare une liste de validation, en colonne L dans la même ligne.

Aussi, vous avez converti la colonne statut en liste, est-ce faisable sans cela ? C'est-à-dire en laissant la colonne statut avec des valeurs non liste ?

Il suffit de supprimer la liste de validation sur les cellules de la colonne K. Attention cependant, la macro réagit uniquement sur les mots "Terminé, En cours, Pas commencé" orthographiés précisément de cette façon.

A nouveau,

Si ton souhait est d'avoir automatiquement le changement de % pour ceux à 0% ou 100%.

Il faudra utiliser dans le code de la feuille l'événement Worksheet_Change()

Private sub Worksheet_Change(ByVal Target As Range)
If Target.Column =11 and Target.Row >1 and Target.Count =1 then
Num=Instr("__Pas commencéEncours", Target) /3
Activecell.Offset(-1,1) = Choose(Num+1,[Terminé], [Pas_commencé], , , , [Encours])
End if
End sub

La colonne 11 c'est la colonne K.

Ici la ligne de début est au minimum la 2. Changer selon besoin.

L'entrée du choix sur une ligne en colonne K va actualiser le pourcentage. Ici le curseur après l'entrée va sur la ligne inférieure. Si le curseur est formaté pour aller sur la colonne suivante (donc J) changer l'offset par offset(0,1)

Pour l'encours il faudra choisir le pourcentage dans la liste.

Salut Myasana,
Salut les as,

après avoir perdu un temps fou à essayer de maîtriser ces f... formules matricielles avec VBA, je suis revenu à une solution bien plus simple (pour moi) afin d'obtenir le résultat souhaité : une simple macro basée sur l'événement 'Change()' et une colonne [L:L] débarrassée de ses formules.
Un changement de date (enfin, il faudrait affiner ça dans tes formules qui n'attendent pas toujours une date mais quelque chose <>"" !!) dans les 3 colonnes concernées par le statut en [K:K] démarre la macro.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim tTabS As Object, rCelST, rCelAV, iRow%
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
Set tTabS = ListObjects("Tableau_PA")
iRow = Target.Row - (tTabS.DataBodyRange.Cells(1, 1).Row - 1)
Set rCelST = tTabS.DataBodyRange.Cells(iRow, 10)
Set rCelAV = tTabS.DataBodyRange.Cells(iRow, 11)
'
If Not Intersect(Target, Union(tTabS.DataBodyRange.Cells(iRow, 4), tTabS.DataBodyRange.Cells(iRow, 6), tTabS.DataBodyRange.Cells(iRow, 7))) Is Nothing Then
    rCelAV.Validation.Delete
    If rCelST = "En cours" Then
        rCelAV.Value = "Choisir %"
        rCelAV.Validation.Add Type:=xlValidateList, Formula1:="25%,50%,75%"
    Else
        rCelAV.Value = IIf(rCelST.Value = "Terminé", "100%", "0%")
    End If
End If
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

Merci à Arturo! C'est ta macro qui a été le point de départ de ma "réflexion" !

A+

11myasana.xlsm (87.94 Ko)
Rechercher des sujets similaires à "lier liste deroulante valeur specifique"