Transfère automatique de données d'un classeur Source vers Dest
Bonjour tout le monde,
Je suis actuellement en stage et on me demande de prendre des données dans Source.xls pour les transposer dans Destination.xlsm et qu’à chaque fois qu’un ajout de ligne se fait dans Source.xls cela se mettent A LA FIN du tableau de Destination.xlsm (les fichiers sont mis ci-joint). Donc il y aurait une sorte de bouton « Faire la mise à jour » qui quand on appuiera dessus fera le boulot demandé. MAIS je suis bloqué depuis beaucoup trop loooooongtemps sur le fait de transposer des colonnes de mon fichier Source.xls dans le tableau de mon fichier Destination.xlsm et de rajouter les lignes à la fin d’un tableau. ( Je n'ai pas le droit de faire des modifications sur le fichier Source.xls).
En gros ce qu’il faut que je fasse :
- Faire une fenêtre qui demande qu’elle fichier l’ont veut ouvrir pour le fichier Source ( J'ai réussi à le faire )
- Transposer les colonnes/ Rajouter les nouvelles lignes dans min tab dans Destination.xlsm :
| Colonnes sources | A | T | B | A | L | R |
| Colonnes destination | A | C | H | I | M | O |
La colonne B de Destination aura un code VBA pour dire que si par exemple le code client est A01258 alors les cellules de la colonne B seront égale à Chaussea.
Les autres colonnes seront remplis manuellement par la personne (je ferais un UserForm pour lui faire remplir les autres colonnes)
- Mise à jour de certaines colonnes
La colonne T de Source.xls sera tout le temps mise à jour, les dates pourront changées. Donc il faudrait que je trouve un moyen pour que ça se mettre à jour à chaque fois MAIS il faut surtout pas que la colonne M de destination se mettent à jour car des modification vont se faire dessus.
Pour l'instant j'ai un tas de code non concluant dont :
Mais ce code est lourd et non optimal. De plus la personne qui va gérer le fichier destination rajoutera des lignes de son propre chef avec un bouton "ajouter une ligne". Donc si je procède de cette manière cela va écraser les données qu’il va rentrer lui-même.
Je me demandais donc s’il y avait un moyen de récupérer les colonnes souhaitez, de les transposer dans mon tableau Destination, de rajouter les nouvelles lignes en fin de mon tableau Destination et de remettre à jour les colonnes déjà mises auparavant sans supprimer les colonnes rajouté manuellement ( parce que par exemple ma date de livraison change tout le temps dans mon fichier Source ). Avez vous une idée de comment je pourrais faire ça s'il vous plait ?
Désolé je ne suis pas arrivée à synthétiser mon problème, j'espère qu'il est assez compréhensif, toute aide sera la bienvenue. J'ai vraiment aucune idée de comment faire à ce stade
Bonjour
Quel que soit la méthode utilisée vouloir
récupérer à tout moment le contenu de A dans B tout en autorisant
- l'ajout de lignes dans B,
- la modification de données dans B sur des lignes issues de A
c'est partir sur une usine à gaz.
Je pense qu'il y a un problème de conception à la base
SI je comprends bien des commandes viennent du fichier A, évolutif, sont complétées voire modifiées dans B et d'autre sont saisies dans B.
Et j'imagine qu'en plus Source n'est pas unique ?
Bonjour,
Merci d'avoir pris le temps de répondre à mon problème. Et oui vous avez tout compris et bien résumé le problème. En gros Source est un fichier qui s'auto rempli en fonction de données récupérées sur SAP mais certaines commandes ne sont pas enregistrées sur SAP donc sont rajoutées à la main dans Destination.xlsm. Et je ne suis pas autorisée de récupérer les données directement moi même sur SAP, je dois obligatoirement passer par ce fichier.
Comme ce qui veulent me paraît impossible à faire avec leurs exigences, est ce qu'à la place je pourrais donc copier coller à chaque fois les nouvelles données de Sources.xls dans une feuille nommée "Copie" dans Destination.xlsm .Puis recopier les colonnes voulues de "Copie" dans la feuille "CommandeR" de Destination à chaque fois qu'il y a un changement grâce à Worsheet_change ? Et pour les commandes rajouter manuellement je ferais donc un tableau différents "CommandeM".
Ou il faut que dans tout les cas copier coller à chaque fois TOUTES les données de Source.xls dans la feuille "Copie". Puis une nouvelles fois recopier TOUTES les colonnes voulues de "Copie" dans "CommandeR" ? Parce qu'ils voudraient aussi un tableau pour archiver les commandes terminées.
Bonjour
Pour ma part
- j'exploiterais Source par une requête PowerQuery : on peut restituer les colonnes dans l'ordre que l'on veut
- je créerais les commandes supplémentaires sur un autre onglets
- si nécessaire une requête peut afficher l'union des 2 mais pour affichage pas pour modif
Le problème reste
- les colonnes ajoutées. Des solutions existent dans PowerQuery mais l'ajout doit être à droite des colonnes issues de Source et il faut in ID unique pour suivre l'évolution des lignes (c'est nécessaire aussi en VBA car l'ordre d'une version Source à la suivante n'est probablement pas garanti)
- plus gênant les colonnes modifiées : les résultats d'une requête ne sont pas modifiables. En VBA c'est aussi assez inextricable à mon avis de devoir comparer ligne à ligne pour soit prendre l'indo de Source, soit celle de Destination et selon quelles règles...
Bidouiller des sorties de SAP et ne pas y remonter l'info définitive parait une approche anormale
Si vraiment ils persistent dans cette direction, je pense qu'une base de données, Accès ou autre, serait plus adaptée
Bonjour,
D'accord, je vais me renseigner sur PowerQuery et regarder des tutos car je ne connais pas du tout.
Oui leur système n'est pas très bien, la personne qui gère le fichier Destination doit tout les matins rajouter les nouvelles lignes de Source dans Destination manuellement.
C'est vrai que lier le fichier Source dans la base de données Access serait une solution.
Merci de votre réponse