proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de valeur

mark75p

XLDnaute Nouveau
Bonjour à toutes et tous.

Je bloque, je bloque, je bloque...malgré de longue recherche sur internet, je cherche désespérément une solution à mon problème.
Je vais essayé d'être le plus clair et précis afin que vous puissiez m'aider.

L'idée est d'avoir une cellule placé en (B2) qui m'indiquerai une information automatique par rapport à une liste déroulante placée en (A2). Jusque la c'est OK, pas de souci. :p
Sauf que... :confused: dans ma Bd certaine référence n'ont pas de valeur... et je souhaiterais, quand je sélectionne une référence n'ayant pas de valeur, qu'une liste déroulante fasse sont apparition dans cette même cellule (B2).

Suis-je compréhensible ? Je crois :eek: toutefois, je vous joins quand même mon fichier Excel. Il sera je l'espère plus compréhensible.

Regarde la pièce jointe ListeDeroulante.xlsx

Une solution ? des idées ?

Et si l'on pouvait éviter de passer par du VBA, Macro ou autre, cela serait plutot chouette :)

Je vous remercie par avance toutes et tous pour votre aide.

Marc
 

Pièces jointes

  • ListeDeroulante.xlsx
    10.2 KB · Affichages: 73
  • ListeDeroulante.xlsx
    10.2 KB · Affichages: 70

Victor21

XLDnaute Barbatruc
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Bonjour, mark75p, et bienvenue sur XLD.

Comme ça ?


Edit : Bonjour, David :)
 

Pièces jointes

  • ListeDeroulante.xlsx
    10.4 KB · Affichages: 71
  • ListeDeroulante.xlsx
    10.4 KB · Affichages: 81
  • ListeDeroulante.xlsx
    10.4 KB · Affichages: 78
Dernière édition:

david84

XLDnaute Barbatruc
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Bonsoir,
Et si l'on pouvait éviter de passer par du VBA, Macro ou autre, cela serait plutot chouette
Sans VBA, ce n'est à mon avis pas possible : tu peux à la rigueur obtenir dans la liste déroulante soit la seule valeur correspondant à la référence lorsqu'elle existe (mais il faudra tout de même cliquer sur le menu pour la sélectionner), soit la liste des autres valeurs lorsque la référence n'existe pas, mais dans tous les cas tu auras un menu déroulant présent en B2.
A+
Edit : bonjour Patrick, oui c'est bien ce que je dis...
 

mark75p

XLDnaute Nouveau
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Merci Patrick pour ton accueil et pour ton aide :)
On se rapproche de ce que j'aimerai.

Mais je constate comme david84 qu'il y a ce problème d'avoir toujours un menu déroulant même si il y a une valeur correspondant à la référence :( de plus, si je modifie ma référence la valeur ne s'affiche plus automatiquement...

Utiliser le VBA, serait-il une chose compliquée ? :confused:
car je ne maitrise vraiment pas le VBA.

Merci encore pour votre aide.

Marc
 

david84

XLDnaute Barbatruc
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Bonsoir,
cf. fichier à tester.
A+
 

Pièces jointes

  • ListeDeroulante (2).xlsm
    18 KB · Affichages: 77
  • ListeDeroulante (2).xlsm
    18 KB · Affichages: 75
  • ListeDeroulante (2).xlsm
    18 KB · Affichages: 73

mark75p

XLDnaute Nouveau
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Merci David84 ! C'est exactement le résultat final dont j'ai besoin ! Super :D

Est-il possible d'avoir une petite explication de la démarche à suivre de façon à ce que je comprenne la manipulation dans un premier temps et par ailleurs que je puisse l'exécuter moi même à l'avenir ?

Merci par avance.
Marc
 

david84

XLDnaute Barbatruc
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Bonjour,
En fait, pas besoin de passer par un dictionnaire : autant utiliser les plages nommées existantes.
J'ai redéfini la plage valeur pour le test mais je te conseille de rendre ces plages dynamiques en utilisant DECALER dans la formule.
Ci-joint le code commenté :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$3" And Target.Count = 1 Then 'si l'on sélectionne A3
    Application.EnableEvents = False 'désactive les événements
    Set ref = [ref] 'définit la plage ref comme reprenant les valeurs de la plage nommée ref
    Set valeur = [valeur] 'définit la plage valeur comme reprenant les valeurs de la plage nommée valeur
    Target.Offset(0, 1).Validation.Delete 'efface la liste déroulante en B3
    rep = Application.Match(Target, ref, 0) 'trouve la position de la valeur de A3 dans valeur
    Target.Offset(0, 1).Value = valeur(rep) 'place la valeur trouvée en B3
    If Target.Offset(0, 1).Value = "" Then 'si la valeur en B3 est une chaîne vide alors
        Target.Offset(0, 1).Validation.Add xlValidateList, Formula1:="=autre_valeur" 'créé une liste de validation dont les valeurs sont ceux de la plage nommée "autre_valeur"
        Target.Offset(0, 1).Select 'sélectionne B3
    End If
End If
Application.EnableEvents = True 'résactive les événements
End Sub
A+
 

Pièces jointes

  • ListeDeroulante (2).xlsm
    19.7 KB · Affichages: 42
  • ListeDeroulante (2).xlsm
    19.7 KB · Affichages: 54
  • ListeDeroulante (2).xlsm
    19.7 KB · Affichages: 54

mark75p

XLDnaute Nouveau
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Bonjour et merci David84,

Il est toujours plus agréable de comprendre une démarche !

J'ai apporté quelques modifications à la deuxième ligne afin que l'action VBA se répète sur plusieurs lignes.
"If Target.Column = 1 And Target.Row >= 3 And Target.Row <= 10 Then"

C'est OK et ça marche impeccable à l’exception de... oui, il y a malheureusement un hic et je m'explique...

Si je devais supprimer le contenu d'une des cellules dans la colonne A pour revenir à une cellule vierge, j'ai une erreur d’exécution '1004' qui me renvoi à la ligne "Target.Offset(0, 1).Value = Valeur(rep)" dans le code VBA.

Et je ne vois pas du tout comment remédier à cette erreur...

Merci par avance pour ton aide et tes lumières.

Marc
 

Pièces jointes

  • ListeDeroulante.xlsm
    17.6 KB · Affichages: 42

david84

XLDnaute Barbatruc
Re : proposition d'une "Liste déroulante" dans une cellule n'ayant pas trouver de val

Bonjour,
code modifié en tenant compte de ta demande et avec ajout d'une gestion d'erreur minimaliste.
Remplace le code utilisé dans ton fichier par celui-ci (ce que je t'avais déjà précisé dans mon message précédent !) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False 'désactive les événements
 On Error GoTo fin
If Not Intersect(Target, Range("A3:A10")) Is Nothing And Target.Count = 1 And _
Not IsEmpty(Target) Then 'si l'on sélectionne une cellule de la plage A3:A10
    Set ref = [ref] 'définit la plage ref comme reprenant les valeurs de la plage nommée ref
    Set valeur = [valeur] 'définit la plage valeur comme reprenant les valeurs de la plage nommée valeur
    Target.Offset(0, 1).Validation.Delete 'efface la liste déroulante en B3
    rep = Application.Match(Target, ref, 0) 'trouve la position de la valeur de A3 dans valeur
    Target.Offset(0, 1).Value = valeur(rep) 'place la valeur trouvée en B3
    If Target.Offset(0, 1).Value = "" Then 'si la valeur en B3 est une chaîne vide alors
        Target.Offset(0, 1).Validation.Add xlValidateList, Formula1:="=autre_valeur" 'créé une liste de validation dont les valeurs sont ceux de la plage nommée "autre_valeur"
        Target.Offset(0, 1).Select 'sélectionne B3
    End If
Else
    If IsEmpty(Target) And Not IsEmpty(Target.Offset(0, 1)) Then Target.Offset(0, 1) = ""
End If
fin:
Application.EnableEvents = True 'réactive les événements
End Sub
A+
 

Discussions similaires

Réponses
1
Affichages
109
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 199
Messages
2 086 159
Membres
103 145
dernier inscrit
lea.