Liste déroulante "indirecte" pour la validation

Bonjour

Je comprends la fonction de validation à partir d'une liste déroulante. Je peux créer une liste fruits:

  • Pomme
  • Banane
  • Fraise
  • Orange

Je sais comment créer ma validation pour une cellule ou une colonne, ou un groupe de cellules à partir de cette liste

Ainsi je peux choisir "Banane", et "Banane" devient la valeur du champ qui utilise la liste déroulante.

Si plus tard je change "Banane" pour "Bananes", le champ (ou les champs) contenant "Banane" (suite au processus de validation avec la liste déroulante) n'afficheront pas la valeur corrigée, bien sûr.

Est-il possible de construire un processus de validation qui permet de conserver/afficher la "référence" du choix, et non pas la valeur, de telle sorte que si une valeur de la liste de référence change, la nouvelle valeur (Bananes, dans le cas présent) sera automatiquement affichée dans les cellules qui avaient été remplies à partir du processus de validation ?

Je m'excuse à l'avance si la réponse à ma question est évidente/facile pour vous.

Merci

Gaston

Bonjour la solution que j'emploie est de mettre ta liste sous forme de tableau, ainsi dès que tu changes la référence dans ton tableau , cela s'applique à ta liste déroulante et si tu dois rajouter dans ce cas-ci des fruits à ta liste, elle s'applique directement.

Bonsoir le fil, bonsoir le forum,

Même sous forme de tableau structuré, je ne pense pas que les valeurs déjà établies soient modifiées en changeant la valeur du tableau.

Si Pomme a été choisie en A1, par exemple, et que tu remplaces Pomme par Golden dans le tableau qui alimente la liste de validation de données. Cela ne remplacera pas Pomme par Golden en A1. Il te faudra, je pense, passer un Rechercher/Remplacer ou par du code VBA pour rectifier le tir.

Mais j'ai déjà dit tellement de bêtises qu'il vaut mieux avoir la confirmation d'un des nombreux balèzes qui sévissent ici...

Bonjour,

Un essai avec une liste déroulante dynamique

Slts

Re,

Oui c'est bien ce que je disais. Ça ne change pas les valeurs déjà définies avant la modification dans la liste.

En D2 choisis Banane

En A3 remplace Banane par Bananes.

D2 reste Banane et ne devient pas Bananes...

Re ThauThème

Je n'avais pas compris qu'il fallait à l'instant T effectuer la modif sur la liste déroulante mea culpa

Slts

Re avec code VBA

Dans ces cas...... modifier directement le mot dans la liste déroulante exemple Banane ==> Bananes ce qui créera un nouveau mot dans la liste auto alimenté mais ne modifiera aucunement l'ancien mot

Slts

Bonjour le fil, bonjour le forum,

C'est cool on travaille pour Huogas qui ne daigne même pas se manifester !...

Je voyais plutôt les chose comme ça... J'ai utilisé une boîte d'entrée (InputBox) pour définir la plage de validation de données mais si elle est fixe on peut l'inscrire en dur dans le code.

Dans A6, remplace Frèse par Fraise. Il sera demandé de sélectionner la plage de validation de données (faire glisser le curseur de F2 à F30 puis en appuyant sur la touche [Ctrl], de H2 à H10) puis valide avec OK.
D'une part la liste de validation de données est actualisée mais aussi toutes les cellules contenant l'ancienne valeur sont remplacées par la nouvelle.

Les deux événementielles :

Private TS As ListObject 'déclare la variable TS (Tableau Structuré)
Private AV As String 'déclare la variable AV (Ancienne Valeur)

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de sélection dans l'onglet
Set TS = Me.ListObjects("Tableau1") 'définit la tableau structuré TS
'si la sélection se fait ailleurs que dans les données du tableau structuré, sort de la procédure
If Application.Intersect(Target, TS.DataBodyRange) Is Nothing Then Exit Sub
AV = Target.Value 'définit l'ancienne valeur AV
End Sub

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim BE As Range 'déclare la variable BE (Boîte d'Entrée)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim NV As String 'déclare la variable NV (Nouvelle Valeur)

Set TS = Me.ListObjects("Tableau1") 'définit la tableau structuré TS
'si le changement se fait ailleurs que dans les données du tableau structuré, sort de la procédure
If Application.Intersect(Target, TS.DataBodyRange) Is Nothing Then Exit Sub
NV = Target.Value 'définit la nouvelle valeur NV
On Error GoTo fin 'gestion des erreurs (si bouton [Annuler] de BE, va à l'étiquette "fin")
'définit la boîte d'entrée BE
Set BE = Application.InputBox("Sélectionner la plage de validation de données en faisant glisser le curseur.", "PLAGE", Type:=8)
Application.EnableEvents = False 'annule l'exécution des événementielles
For Each CEL In BE 'boucle sur toutes les cellule CEl de BE
    If CEL.Value = AV Then CEL.Value = NV 'si la cellule vaut l'ancienne valeur AV elle est remplacée par la nouvelle valeur NV
Next CEL 'prochaine cellule de la plage
Application.EnableEvents = True 'autorise l'exécution des événementielles
fin: 'étiquette
End Sub

Le fichier (que l'on attendait de la part de Huogas...)

12huogas-ep-v01.xlsm (19.71 Ko)

Bonjour le forum,

C'est cool on travaille pour Huogas qui ne daigne même pas se manifester !...

Effectivement! Mais bon! il pourra tout de même tester nos propositions

Slts

Bonjour à tous.

Huogas, Gaston Huot, moi finalement, n'a pas eu accès à son ordinateur avant ce matin (ici c'est le matin).

Croyez-moi que ce n'est pas par manque d'intérêt, au contraire.

Je viens de revenir à la civilisation (que j'avais quitté juste après avoir lancé ma "bouteille" à la mer.)

Premièrement je vous remercie, puis je regarde le tout et je vous reviens.

Encore merci

Gaston

Bonjour

Encore merci à tous pour les idées.

Moi qui croyais que ce devrait être "basique" et que j'avais juste manqué une notion de base...

En somme, on veut lister dans le popup le contenu du tableau, et, après sélection d'une entrée, sauvegarder non pas la valeur mais la référence (=A2 par exemple). Donc si je corrige A2, la valeur affichée dans les cellules ayant utilisé la fonction et qui contiendront "=A2" afficheront la version corrigée.

C'est donc la fonction de popup (la fonction de validation) qui doit faire le travail (en enregistrant la référence (=A2), et non la valeur).

Je vais continuer ma recherche mais n'ésitez pas à intervenir de nouveau si vous avez une autre idée de solution.

D'ici là, un grand merci à tous!

Gaston

Bonjour

Hors de VBA point de salut, semble-t-il, pour ce cas précis.

J'ai tenté de comprendre le fonctionnement de ce code VBA pour que la fonction retourne l'adresse (et non la valeur) du choix, mais je ne comprends pas assez le code, pourtant simple, pour le modifier/simplifier pour retourner l'adresse:

  • Excel Drop Down Change Product Name to Code (contextures.com)
  • www. contextures. com/ datavalidation/ dropdownproductcode.html
  • (vous pouvez aussi retirer les espaces de l'adresse ci-dessus)

Je n'ai pas suffisamment posté de messages pour être autorisé à publier le lien, mais une recherche devrait rapidement permettre de trouver la page.

Je crois que le code pourrait être modifié pour ertourner les coordonnés de la cellule au lieu de retourner la valeur ?

Merci

Gaston

Bonjour

Pour clore le sujet, voici le code proposé par CheeseSandwich sur Excelforum.com:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tmp As String, sht As String, c As String, r As Long

    Application.EnableEvents = False
    If Target.Cells.Count > 1 Then Exit Sub
    On Error GoTo ender
    tmp = Replace(Target.Validation.Formula1, "=", "")
    sht = Replace(Split(tmp, "!")(0), "'", "")
    c = Split(tmp, "$")(1)
    r = Application.Match(Target.Value, Sheets(sht).Columns(c), 0)
    If InStr(sht, " ") Then
        Target.Formula = "='" & sht & "'!" & c & r
    Else
        Target.Formula = "=" & sht & "!" & c & r
    End If
    On Error GoTo 0

ender:
    Application.EnableEvents = True

End Sub

Fonctionne très bien: le champ cible reçoit l'adresse de la cellule qui contient la valeur choisie.

Merci.

Gaston

Rechercher des sujets similaires à "liste deroulante indirecte validation"