Lier des données entre deux feuilles et automatiser leur mise à jours
Bonjour à tous, cela fait bon nombre de jours que je m'arrache les cheveux sur mon fichier. Maintenant que je n'en n'ai plus, je m'en remets à vous :)
Explication : J'ai un classeur avec deux feuilles.
La feuille Types
| ID | NOM |
| 1 | Type A |
| 2 | Type B |
| 3 | Type C |
La feuille Objets
| ID | NOM | NOM DU TYPE | ID DU TYPE |
| 1 | Objet A | ||
| 2 | Objet B | ||
| 3 | Objet C |
Mes besoins :
1. Sur la feuille Objets j'aimerai que lorsque l'utilisateur clique dans une cellule de la colonne NOM DU TYPE, une liste déroulante lui propose de sélectionner une "ligne" de la feuille Types, idéalement sous cette forme " ID - NOM DU TYPE ".
2. Une fois la valeur sélectionnée, j'aimerai que la colonne ID DU TYPE soit alimentée automatiquement avec l'ID de la "ligne" sélectionnée.
3. Sur la feuille Types, si un ID ou un NOM est modifié, il faudrait que l'information soit mise à jour automatiquement sur la feuille Objets pour les lignes qui utilisent ces valeurs.
4. Et pour finir, j'aimerai que pour mes deux feuilles, la colonne ID soit auto-incrémentée à l'ajout d'une ligne. J'ai essayé en me basant sur le numéro de la ligne, mais le problème c'est que si j'intercale une nouvelle ligne entre deux lignes existantes, ça décale tout les ID et fausse complément ma feuille Objets.
Je vous joint mon fichier Excel d'exemple
Je vous remercie déjà mille fois pour l'interêt que vous portez à ma demande, et vous félicite pour ce forum d'une rare qualité.
Bonne journée à vous
Bonjour,
Je te joins une proposition en espérant qu'elle n'aggrave pas ta situation capillaire
0 - J'ai transformé les 2 plages de données en 2 tableaux structurés ("T_OBJETS" et "T_TYPES") car cela offre beaucoup plus de souplesse d'utilisation et c'est nettement plus performant.
1 & 2 - La colonne "T_OBJETS -> TYPE" contient à la fois une liste déroulante qui te permet de sélectionner une valeur de la plage "T_TYPES -> NOM" et une formule qui recherche "T_OBJETS -> ID DU TYPE" dans "T_TYPES" et qui renvoi le libellé. Lorsque tu sélectionnes une valeur, par code VB, l'ID correspondant est positionné dans la colonne ID et la formule qui a été écrasée par le choix de la valeur est restaurée et réaffiche le libellé. Tu ne peux donc pas effacer un libellé, il est aussitôt restauré, il faut effacer l'ID.
3 - Si un nom est modifié dans T_TYPES, la mise à jour est immédiate dans "T_OBJETS" puisque la formule recherche le libellé à partir de l'ID. Pour le changement de l'ID
4 - L'incrémentation se fait dans les 2 feuilles. Tu peux ajouter des lignes ou en insérer, cela fonctionne. Si l'ID n'est pas renseigné, il est égal à l'ID max + 1.
Je te laisse tester et voir si cela te convient.
Bonjour!
Tout d'abord désolé pour le délai de mon retour, le Covid m'a rendu visite
Merci beaucoup pour ton investigation et l'exemple transmis, ça répond très bien à mon besoin.
J'ai tout de même deux petites questions :
1. Pour la la liste déroulante des types, j'aimerai ajouter l'ID du type devant son nom. Ex : 3 - Type C.
2. En voulant répliquer le fonctionnement, je ne parviens à remettre en place la liste déroulantes des types d'une autre feuille.
Dans l'exemple transmis, la source pour la liste déroulante est =LST_TYPES, hors je ne trouve aucune référence à LST_TYPES
Peux-tu m'éclairer encore sur ces deux points ?
Un grand merci à toi et à tous pour votre intérêt.
Bonne journée
et bonne semaine !
Bonjour,
Pas de souci pour le délai, j'espère surtout que tu vas bien.
1 - Pour ajout de l'ID devant les libellés dans la liste : la liste déroulante affiche " 3 - Type C" et on stocke "Type C" dans la colonne "TYPE" et 3 dans la colonne. C'est bien ça ?
Je ne dis pas qu'il n'y en a pas mais l'intérêt m'échappe mais à priori, ça posera un souci : en rouvrant la liste, la valeur stockée de la rubrique ne sera plus sélectionnée dans la liste car l'ouverture de la liste cherchera à se positionner sur "Type C" qui n'existe pas dans la liste.
2 - Pour LST_TYPES : cette plage nommée correspond à la colonne entière (sauf le titre de colonne) "NOM" du tableau "T_TYPES".
- Tu peux le voir dans "Formules" / "Gestionnaire de noms".
- Si tu sélectionnes "LST_TYPES" dans la liste des références de cellule à gauche de la barre de formules, la feuille "Types" est sélectionnée et les données de la colonne "NOM" sont sélectionnées.
Cdlt,
Cylfo
Bonjour!
Merci beaucoup pour ton retour.
1. Oui c'est bien ça, l'idée d'avoir l'ID du Type dans la liste déroulante permettrait de pouvoir distinguer les Types qui ont le même nom (ce qui peut arriver).
Cela ne poserait pas de problème que la colonne TYPE contient alors l'ID + le nom pour permettre le rapprochement.
Pourrais-tu m'indiquer où je peux modifier la structure de la liste déroulante ?
2. Super, merci pour cet éclairage !
Encore une fois, c'est vraiment top de pouvoir s'appuyer sur des retours de cette qualité, merci !
Bonjour,
Merci
Pour le point 1 : Dans ce cas, rien de plus simple, il suffit que tu modifies les libellés dans la table de l'onglet "Types", soit en préfixant le libellé par l'ID (ex : "1 - Type A") soit en le suffixant (ex : "Type A (1)" ) ce qui permet de garder un tri sur le libellé et d'éviter que (ex : "3 - Divers" et "18 - Divers") ne se voient pas en même temps dans la liste déroulante).
Je n'ai pas le contexte mais de mon expérience quand dans un référentiel, 2 libellés sont identiques, l'ID n'est que très rarement parlant pour l'utilisateur, il vaut mieux ajouter un qualificatif à chaque libellé qui perme de différencier les 2 libellés
Hello, merci beaucoup pour ton retour.
Pour en dire plus sur le contexte, il s'agit de créer une matrice d'importation de données vers un logiciel.
L'ID unique de chaque feuille permet de lier les objets importés dans le logiciel à la matrice Excel.
Ainsi, à chaque importation, on peut mettre à jour des informations d'un objet existant (par son ID) et créer les nouveaux (ceux dont l'ID n'existe pas encore dans le logiciel).
Merci pour ta proposition pour ajouter l'ID du TYPE à la liste déroulante. Ton approche avec le suffixe est top (ex : "Type A (1)" ).
Cependant, puisque l'objectif est de proposer un auto incrément pour l'ID de chaque type, si on doit le rajouter manuellement dans le NOM, cela perd son interêt.
Ne serait-il pas possible d'ajouter ce suffixe automatique pour les options de la liste déroulante ?
Merci encore Cylfo
Si
Whaoo, top! Merci beaucoup.
En espérant ne pas abuser, j'ai encore deux petites questions :
- Penses-tu que l'on puisse afficher un message d'erreur si l'utilisateur modifie l'ID d'une ligne et que la valeur est déjà présente (pour bien s'assurer du caractère unique de l'ID)
- Lorsque l'ID d'une ligne est modifié, mettre à jour automatiquement le suffixe du NOM de la ligne correspondante.
En te souhaitant une bonne journée et une très bonne semaine.
Merci!
Bonjour,
C'est possible mais ... permettre la modification de l'ID c'est prendre le risque de désynchroniser les données de l'onglet "Objets". Il serait préférable de plutôt interdire cette modification : si l'ID est modifié => Message => Annulation de la modification. Un ID n'a normalement pas le but d'être significatif mais d'être un identifiant unique dans un référentiel.
Qu'en penses-tu ?