Mise à jour des valeurs par validation des données - liste

Bonjour à tous,

Mon problème est assez simple et je pensais trouver réponse en fouillant le forum, mais sans succès...

J'ai une liste nommée "Units" sur le second onglet comprenant un nombre fini de valeurs.

Sur mon Onglet principal, j'utilise la validation des données pour avoir une liste déroulante qui fait référence à "Units". Je peut donc remplir la colonne Q (à partir de la ligne 18).

Maintenant, j'aimerai que si je modifie une valeurs de liste "Units" après avoir déjà rempli la colonne Q, les valeurs se mettent à jour dans la colonne en question. C'est à dire que si dans la cellule Q20 j'ai sélectionné, à partir de la liste déroulante, "/m²Shon", et que demain dans "Units" je remplace "/m²Shon" par "/m²autre_chose", j'aimerai que la valeur de Q20 passe de "/m²shon" à /m²autre_chose".

En fait j'aimerai une liste déroulante qui crée un lien vers la "Units" et non simplement qui colle une valeur. Je sais pas mais par exemple si après avoir cliqué dans la liste déroulante, la valeur de la cellule Q20 pouvait être unr formule type =index(units;2) çà serait top !

Après, c'est peut-être pas a validation de données qu'il faut utiliser...

Je vous remercie d'avance de vos réponses !

Bonsoir,

J'ai pas tout compris, mais plutôt que la validation des données, utilise les listes déroulantes des "contrôles de formulaire" (ruban Développeur/Contrôles/Insérer/Contrôles de formulaire/Zone de liste déroulante) de cette façon tu pourras mettre une formule en Q20.

Dans les propriétés du formulaire (clic droit sur la zone de liste), tu as un onglet ou tu entres une plage d'entrée (=Units) rt une cellule liée (par exemple W20), Ensuite tu crées en q20 ta formule de type index(units;W20).

Bonjour,

Pour Sommaire

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([Liste], Target) Is Nothing Then
    Application.EnableEvents = False
    valSaisie = Target.Value
    Application.Undo
    For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
      If c.Value = Target Then c.Value = valSaisie
    Next
    Target = valSaisie
   Application.EnableEvents = True
  End If
End Sub

Pour les UNITS

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([saisie_units], Target) Is Nothing Then
    Application.EnableEvents = False
    p = Application.Match(Target, [units], 0)
    Set mc = Worksheets("units").[units].Cells(p, 1)
    Target.Formula = "=units!" & mc.Address
    Application.EnableEvents = True
  End If
End Sub

Ceuzin

Bonjour à vous deux et merci bien !

@Benead

je ne connaissait pas ce type de liste déroulante, merci pour la découverte. L'onglet dévellopeur nouvellement activé me réserve encore bien des surpises ! Mais pour mon histoire çà me semble un peu complexe, j'ai en effet bcp de cellule où je dois mettre mes données à jour et j'aimerai éviter de créer une liste déroulante par cellule... Ou alors (je réfléchi en écrivant...), peut-être que je peux n'avoir qu'une liste déroulante VBA qui remplisse la cellule sélectionnée, et ainsi remplir mes cellules comme bon me semble à partir de la même liste. Je regarde çà plus en détails !

@Ceuzin

Là çà correspond à ce que je m'état imaginé, à savoir que le fonctionnement de ma feuille reste le même (avec les liste déroulante de validation de données), mais la mise à jour est automatique. Le truc frustrant c'est de voir ma feuille de calcul qui fonctionne à merveille, sans comprendre pourquoi... VBA c'est encore un peu obscur pour moi, je me lance donc dans le décryptage de ton code qui fonctionne! Merci beaucoup !

Weenhill.

Pour le code sur SOMMAIRE je crois que j'ai compris, j'ai découvert ce qu'était qu'un évènement... D'ailleurs il ne me semble pas nécessaire d'intégrer "Units" dans le Range de l'intersect (je suppose que tu as tenté de régler les deux listes déroulantes dans une seule déclaration puisque les deux listes était apparemment sur la même feuille ?)

Par contre pour UNITS, je suis pas encore au point :

Déjà, j'ai du mal à comprendre pourquoi on cherche une intersection avec "saisie-units" qui regroupe les cellules où s'affichent le résultat, alors que la modification va se faire dans le tableau du haut... Je continu de chercher.

Par contre, j'ai un léger bug : après un peu d'utilisation de la feuille de calcul, si je supprime une des valeurs de la liste "saisie_units", j'obtiens une erreur d'execution 13 : incompatibilité de type. A partir de là la procédure d'évènement est désactivé (parce qu’arrêtée avant d'avoir remis "EnableEvent = true" j'imagine ?).

Peut-être qu'en avançant dans ma traduction du code je trouverais ma réponse !

Merci beaucoup !

Rechercher des sujets similaires à "mise jour valeurs validation donnees liste"