Table de correspondance
Bonjour,
Depuis plusieurs mois je n'arrive pas à trouver de solution pour automatiser un fichier même avec l'aide de ChatGPT.
Je possède une base de données produits sur Excel (que j'ai simplifié pour l'exemple) et je dois remplir une base de données informatisées dont j'extrais le modèle chaque mois (idem j'ai simplifié pour l'exemple). Dans ce fichier final il y a des listes déroulantes et des données bruts. Pour les données brut je fais des RechercheX mais quand ce sont listes déroulantes c'est une vraie misère je fais tous à la main. J'ai voulu tenter des tables de correspondances mais j'avoue être novice sur ce sujet donc compliqué pour moi surtout que le fichier final est un nouveau qui est extrait chaque mois avec des références différentes. Le fichier final contient une deuxième feuille avec les listes déroulantes associé aux colonnes (ces listes sont présentes lorsque j'importe le fichier).
Juste pour vous donner une idée, il y a tellement de données à fournir (car de base le fichier final comporte 3 feuilles de données à remplir) que je passe 1 semaine pour tous remplir et encore parce que je maîtrise bien mon sujet mais j'aimerais gagner du temps. J'ai automatisé beaucoup de fichier en VBA car je sais coder en VBA mais avec les listes déroulantes je ne vois pas comment faire.
Je vous remercie de votre aide à tous
Bonne journée
Hello,
Je n'ai pas compris le sujet...
Est ce que ce serait possible de faire un exemple plus précis ? Qu'est ce que tu fais avec les listes déroulantes ? Qu'est ce qui est chronophage à ce point là ?
@+
Bonjour,
Je ne vois pas comment je peux être plus précis alors que j'ai fournis un cas concret mais je peux pas mettre plus de données ça reste confidentiel.
J'ai besoin que mon fichier final soit rempli automatiquement et non pas à la main comme je l'ai fait.
Il est chronophage de remplir à chaque fois car je fais ça tout les mois et 3 feuilles au total avec une 60 colonnes à chaque fois pour 1000 références donc à la main c'est long.
Merci de votre retour
Bonne journée
Bonjour,
Je vais faire écho à la réponse précédente : je n'ai pas tout compris.
On va quand même essayer.
Donc tu as 1 premier fichier "bdd produits" qui contient 1 seul onglet "feuil1". Cet onglet fourni un tas d'informations relatives à la clé "référence article". Chaque référence article n'est présente qu'une et une seule fois puisqu'il s'agit de la clé d'identification de chacune de ces lignes.
Exact ?
Ensuite tu récupères périodiquement un second fichier "fichier final" que tu vas devoir compléter. Au moment où tu récupères ce fichier il a (on va se contenter pour le moment de ton exemple fourni) 2 onglets.
Le premier onglet "product" ne contient que les titres en ligne 1 et une liste de "reference article". Cette liste de références n'est pas la même à chaque nouveau fichier final reçu.
Le second onglet "code list" est déjà complété comme l'exemple.
Exact ?
Ton but est de reporter dans l'onglet "product" les colonnes "B" à "H" en allant chercher les données des références article dans le premier fichier.
Exact ?
Si c'est bien ça alors il nous manque des éléments pour pouvoir t'aider.
Dans l'exemple pour une même référence article on ne retrouve pas les mêmes infos. D'où vient ce "156" concaténé à Chine ? Je suppose que chaque pays à son propre code et que tu concatènes ce code pays au résultat de ta recherchex (pareil pour les autres colonnes contenant "|")
Exact ?
Si c'est bien ça alors oui tu peux faire des tables de correspondances dans ton fichier "bdd produit" et utiliser ensuite des formules.
Attention cependant. Au vue de la volumétrie des données en terme de lignes, colonnes et concaténation à faire que tu exposes Excel risque de mettre un certain délai à calculer tout ça. Je te conseille soit de passer par du VBA soit d'utiliser un logiciel de base de données comme Access ou autre qui sont là pour ça.
Si tu optes pour les formules je te conseille, puisque hormis les références, les fichiers finaux ont toujours le même format, de garder dans un coin un exemplaire de fichier final ne contenant que la ligne des formules préfaites et de recopier à chaque fois ces formules dans ton nouveau fichier puis de les décaler vers le bas. Ainsi tu n'auras pas à les resaisir.
Possible également en VBA.
Maintenant ton histoire de listes... Là j'avoue ne rien comprendre. Parles tu bien de listes déroulantes dans des cellules ? Dans quel fichier sont elles ? J'ouvre bien tes 2 fichiers mais ne vois aucune liste (remarque : je suis sur smartphone alors peut-être que l'ensemble des fontionalités n'est pas compatible sur smartphone et que les listes ne s'affichent pas sous mon logiciel "one read").
OK tes listes déroulantes apparaissent bien sur Excel PC. C'était donc bien mon logiciel de visualisation qui ne prend pas en charge cette fonctionnalité sur mon smartphone.
Ces listes sont elles déjà en place lorsque tu reçois ton nouveau fichier ou as-tu seulement la feuille "Code list" et c'est toi qui créent ensuite ces listes dans "Product" ?
Et comment choisis tu la valeur de la liste déroulante à choisir pour chaque article ? Tout est à chaque fois dans "bdd articles" ?
Pour info tu peux créer facilement là encore ces listes déroulantes par copier/coller ce fichier modèle qui contient déjà les formules que je te propose de créer.
Bon. C'est tout ce que j'arrive à comprendre de tes posts et fichiers. Sans plus de retours je ne vois pas exactement que te proposer de plus (hors VBA bien sûr) que de créer ce fameux 3ème fichier d'où il te suffira de copier/coller à chaque fois les formules et les listes.
Bonjour,
Oui tu as tous compris. Sur le fichier final quand je l'extrais l'onglet code list est masqué je l'ai fait affiché afin que les membres du forum puisse comprendre. Je ne touche pas a ces listes qui correspondent au liste déroulante qu'on trouve dans l'onglet Product. Exemple si sur ma BDD il y a écrit "Chine", je sélectionne dans l'onglet Product pour la référence concernée "Chine | 156". Tous à la main et j'aimerais l'automatiser en effet car c'est trop long. Je ne trouve pas sur internet des vidéos tuto de table de correspondance concernant mon sujet assez complexe d'où ma demande d'aide mais j'ai l'impression que la création de table de correspondance est tout aussi fastidieux
Voilà qui devrait t'aider.
Par souci de simplicité j'ai regroupé toutes les feuilles dans un seul classeur mais bien sûr tu peux modifier le code selon ton cas précis.
Comme compris je pars des principes :
- que le code va chercher les données des références articles qu'il trouve en "A" de "Product" pour compléter toutes les autres colonnes de "Product" à partir de "A" de "Feuil1"
- que les menus déroulants éventuels dans les cellules de "Product" sont déjà créés mais que le choix de la valeur n'est pas fait
Le code fait ce croisement de données par les références articles entre les feuilles "Product" (en "A") et "Feuil1" (en "A") et il fait également les correspondances entre la valeur partielle de "Feuil1" et les choix possibles de la liste par colonne de "Product". Nota : la valeur partielle dans "Feuil1" est considérée comme le début des possibilités de la liste proposée (càd du premier caractère jusqu'au "|").
Cerises sur le gâteau :
- si une référence article de "Product" n'est pas reconnue dans "Feuil1" alors la cellule est colorée en rouge
- si une valeur partielle de "Feuil1" n'est pas reconnue dans "Code list" alors la cellule est colorée en rouge
- tu as un décompte des références article de "Product" non reconnue dans "Feuil1"
- tu as un décompte des valeurs partielles de "Product" non reconnue dans "Code list"
- s'il te prend l'envie d'ajouter des valeurs dans "Code list" (avant de lancer la macro) alors ces valeurs apparaitront dans les listes déroulantes adéquates
Pour ajouter des correspondances, car je sais que tu as des colonnes supplémentaires dans toutes tes feuilles, c'est cette partie du code que tu dois modifier/compléter :
[...]
For index_2_tablo_product = 2 To nbre_colonnes_max_product
If index_2_tablo_product = 2 Then
num_colonne_bdd_a_prendre_en_compte = 7
ElseIf index_2_tablo_product = 3 Then
num_colonne_bdd_a_prendre_en_compte = 3
ElseIf index_2_tablo_product = 4 Then
num_colonne_bdd_a_prendre_en_compte = 8
ElseIf index_2_tablo_product = 5 Then
num_colonne_bdd_a_prendre_en_compte = 9
ElseIf index_2_tablo_product = 6 Then
num_colonne_bdd_a_prendre_en_compte = 2
ElseIf index_2_tablo_product = 7 Then
num_colonne_bdd_a_prendre_en_compte = 5
ElseIf index_2_tablo_product = 8 Then
num_colonne_bdd_a_prendre_en_compte = 10
End If
[...]
Next index_2_tablo_product
[...]index_2_tablo_productest le numéro de la colonne dans "Product" et
num_colonne_bdd_a_prendre_en_compteest le numéro de la colonne concomitante dans "Feuil1".
Tu as un bouton "Compléter" dans "Product" pour lancer le code et compléter "Product". A chaque fois que tu lances le code les données précédentes de "Product" sont effacées (sauf la colonne "A" bien sûr) et les cellules remises sans couleur de fond (colonne "A" comprise bien sûr). Tu peux donc faire plusieurs tests sans te préoccuper d'effacer le résultat précédent de l'exécution du code.
Tu précises que tu sais développer en VBA donc tu pourras reprendre ce code facilement à ta guise pour l'adapter à tes besoins réels.
Teste et dis nous.
Un petit retour peut-être ... ?
Bonjour, merci beaucoup pour l'aide mais je n'ai pas encore testé car c'est dans le cadre de mon travail et je suis sur d'autres sujets. Mais dès que je testerais je ferais un retour je suis pas du genre à laisser sans réponse
Très bonne journée