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 SubPour 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 SubCeuzin
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 !