VBA : Liaison dynamique entre deux onglets Excel
Bonjour,
je souhaiterais savoir si il est possible de lier deux onglets en VBA.
J'ai une base de donnée dans l'onglet 1, que je filtre selon un critère et copie en onglet 2 (action automatisé grâce à un filtre en VBA). Les modifications faites dans l'onglet 1 sont donc directement reportées dans l'onglet 2.
Seulement, et là, je n'avance plus car cela n'est peut-être pas possible, si je modifie des informations dans l'onglet 2 , est-il possible en VBA, que ces modifications se reportent dans l'onglet 1 (Base de donnée ) afin d'être sauvegardées ?
Merci d'avance pour vos conseils.
Bonjour,
Oui c'est possible, pour cela il faudra utiliser une fonction Worksheet change que tu peux trouver dans chacune des feuilles,
il te faudra également une "clé de liaison", ça peut-être un numéro unique, un nom, un identifiant... il faut juste que ça n'ait pas de doublons.
Ça me fait penser à une chose que j'avais fait pour des commerciaux sur ce fórum, voici le lien si tu veux regader d'un peu plus près :
https://forum.excel-pratique.com/viewtopic.php?t=110422
Le but c'était de faire des relances d'offre comerciales, j'avais proposé un filtre avancé automatique qui se faisait dans un onglet rien que pour ça, puis la base de donnée filtrée se retrouvait dans une feuille exportation de données, si un changement de statut se faisait sur la feuille exportation de données, le statut était également mis à jour dans la feuille base de donnée.
Je te laisse voir ça
Bonjour Ausecour,
Je viens de prendre connaissance du travail réalisé pour les relances des commerciaux (très intéressant effectivement). La configuration de mon dossier n'est pas le même et je n'ai pas dans mon cas besoin de repasser par l'onglet filtre, ce qui me complique l'adaptation de ton code pour mon dossier. Je suis novice dans le VBA.
J'ai mis en PJ le dossier sur lequel je travaille. Le code VBA pour le tri par unité de travail a été fait par une personne de ce forum (merci encore). Mais le filtre par couleur, c'est une macro réalisée par mes soins ...
Bref, est-il possible de copier des données inscrite dans l'onglet plan d'action et Document unique (qui ne sont que des copies de la BDD mais filtré) dans la BDD ? L'utilisation de Worksheet.Change me parait adéquat mais les exemples trouvés sur le net ne correspondent pas exactement à mes besoins.
Merci Ausecour
Bonjour,
déjà, bravo d'avoir pris le temps de lire le long sujet sur les relances d'offres comerciales!
Pour répondre à ta question, il est tout à fait possible de copier les données filtrée dans la base donnée lorsqu'on les change dans les onglets "document unique" et "plan d'action".
En revanche.... c'est impossible à faire avec ton document dans l'état actuel...
La raison est qu'il y a des doublons, ce que je veux dire par là, c'est que tu as des lignes qui ne peuvent pas se différencier par une donnée unique.
J'illustre ça par un exemple :
Dans ton onglet "Plan d'action"
Tu as la même unité de travail et la même date sur la ligne 12 et la ligne 13, je ne saurais donc pas dire où sont ces données dans la base de donnée, car ni l'unité de travail, ni la date ne sont uniques, et même en les combinant, on a encore des doublons.
Dans le cas des relances d'offres comerciales on avait pas de doublons car il y avait un code unique qui permettait de transmettre les changements de statuts.
Un moyen simple d'enlever les possibilités de doublons, c'est par exemple de rajouter une colonne "numéro de ligne". Il ne suffira ensuite que de chercher le numéro de ligne auquel correspond le changement et d'affecter le changement au même numéro de ligne dans ta BDD.
Mais sans ça, imposible à faire. Une fois qu'un code unique será mis en place, il ne s'agira plus que d'enregistrer temporairement les changements et de les réécrire dans la BDD.
Tout ça via un Worksheet Change
Merci Ausecour,
C'était la difficulté et je pense avoir compris.
Je me lance dans l'exercice.
A bientôt
Bonjour Ausecour,
Je reviens vers toi car je n'arrive pas à trouver le code VBA pour Worksheet Change correspondant à une ligne entière et qui plus est, avec un numéro de ligne. J'ai ajouté les numéros de ligne en fin de tableau. Peux-tu m'aider ?
Merci et à bientôt
Bonjour,
Malheureusement aucun de tes programmes n'ait commenté du coup je ne me permets pas d'apporter des modifications...
Le soucis c'est que quand tu filtres, tu ne ramènes pas le numéro de ligne dans tes deux autres feuilles, du coup tu ne peux pas appliquer le worksheet change.
J'explique, si tu veux que les feuilles communiquent entre elles, il faut faire une sorte de clé de liaison, en base de donnée on appelle ça une clé primaire je crois.
Il faut donc que chacune de tes feuilles qui vont communiquer avec ta BDD, et que ta BDD, contiennent cette clé, sans quoi il leur será impossible de faire ce travail...
Ensuite une aide par rapport au Worksheet change
Private Sub Worksheet_Change(ByVal Target As Range)
Cet évènement reçoit un Range qui s'appelle Target, celui-ci est la cellule qui a été modifiée.
Il faudra donc proceder de la façon suivante :
dim Tableau() as Variant
ligne_changement = Target.Row
Tableau = Range("A" & ligne_changement, "ZZ" & ligne_changement)
With Sheets("BDD")
.Range().find(lacléprimaire) 'à mettre quelque part
'dans le find tu dois surement pouvoir avoir un numéro de ligne ou autre, il te suffit ensuite de décharger le contenu de ton tableau avec une boucle For sur cette ligne, du moins je pensé, il faudra peut-être que tu procèdes autrement, en tout cas voici l'idée principale
end withJ'espère avoir pu aider
Merci Ausecour,
Je vais prendre le temps de décortiquer les informations transmises.
Bonne journée
bonjour
salut Ausecours
il semble que tu veuilles imiter les progiciels.
mon conseil, comme pas mal de consultants en S&ST, fais simple :
- ta bdd et le DUERP sont un seul tableau : supprime l'un des 2.
- tu peux même aller plus loin, en mettant les actions dans le même tableau, dans des cellules à droite de chaque risque
un unique tableau pour le Document Unique. C'est pas beau ?
aucun VBA !
conseil en +
mettre les chiffres de cotation dans une unique (encore l'unicité ! ) colonne avec une MFC pour la couleur. C'est plus lisible, plus facile à faire les multiplications
j'ai l'impression que tu as cherché à compliquer. Pour te faire bien voir du chef ?
edit : j'ai oublié de dire : JAMAIS de cellules fusionnées !
Merci pour vos conseils !
Je reprends mon bâton de pèlerin pour poursuivre mon initiation VBA !
Merci Ausecours !