XL 2016 Liste déroulante seulement si... (Probablement VBA)

Etoto

XLDnaute Barbatruc
Bonjour à tous,

Cela fait un petit moment que je ne suis plus trop actif, malheureusement, mon stage est preneur et les habitudes ont la vie dure. :)

J'aurais besoin de savoir comment faire pour que si en D3 c'est écrit "Avance" ou "Retour d'avance", Excel me crée une liste déroulante sur la cellule à droite de celle concernée, cette liste aura comme référence la liste de nom de la feuille 2 en colonne A. Possible ou pas, je ne saurais pas le faire. Pour ce qui est des autres formules que j'ai faite, n'en prenez pas compte sauf si vous voulez les améliorer 🤣 .

En cas de questions, je suis là et le fichier est joint avec bien sûr, des données inventées.

Merci d'avance pour votre aide.
 

Pièces jointes

  • XLD caisse.xlsx
    23.5 KB · Affichages: 7
Dernière édition:
Solution
Voir page Gestion d'avances de ma première PJ. :mad:
1649860705137.png

En PJ votre fichier rectifié.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Etoto,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target = "" Then Exit Sub
    If Not Intersect(Target, Columns(4)) Is Nothing Then
        On Error GoTo Fin:
         Application.EnableEvents = False
         Application.ScreenUpdating = False
         If Target = "Avance" Or Target = "Retour d'avance" Then
            Cells(Target.Row, "E").Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Liste"
            End With
        End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
 

Pièces jointes

  • XLD caisse.xlsm
    31.9 KB · Affichages: 5

Etoto

XLDnaute Barbatruc
Bonjour Etoto,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target = "" Then Exit Sub
    If Not Intersect(Target, Columns(4)) Is Nothing Then
        On Error GoTo Fin:
         Application.EnableEvents = False
         Application.ScreenUpdating = False
         If Target = "Avance" Or Target = "Retour d'avance" Then
            Cells(Target.Row, "E").Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Liste"
            End With
        End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Franchement, c'est déjà de l'excellent travail. Malheureusement, quand je place un autre texte, la liste déroulante reste.

Bon, j'avoue, c'est de ma faute, j'aurais du dire dés le départ que la liste devra être supprimée si les conditions ne sont pas remplies.

Désolé d'avoir omis de te transmettre une information. Mais c'est vraiment super.
 

Etoto

XLDnaute Barbatruc
Re,

Entièrement d'accord. 😂
Il suffit de rajouter ça :
VB:
Else
  Cells(Target.Row, "E").Validation.Delete
End If
Parfait ! J'ai installé le code sur le fichier principal qui contient seulement deux onglets de plus, et le code ne fonctionne pas, pourtant les noms sont tous les mêmes, tu peux me dire le problème ?

Les données sont toujours fausses.
 

Pièces jointes

  • journal caisse 2021.xlsm
    41.5 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla