Excel : liaisons avec VBA

Bonjour à tous..!

Je viens de m'inscrire sur ce forum parce que j'ai besoin d'un peu d'aide. Je dois relier 2 fichiers entre eux (si on modifice le 1er fichier, sa modifie automatiquement le 2eme).

Y a t il une solution ou l'ordre n'as pas d'importance, qu'on puisse le faire dans les 2 sens? je m'explik:

si je modifie le 1er fichier sa modifie le 2eme fichier

si je modifie le 2eme fichier, sa modifie le 1er fichier

Le truc c'est que si je modifie la base de données, sa me modifie la fiche par gare --- et invérsement si je modifie la fiche par gare, sa me modifie la base de données.

("Projets_liste_demo_oct2007.xls" étant la base de données et "Test.xls" étant les fiches par gares)

En cherchant sur Internet, j'ai trouvé qqch qui est possible mais pour une seule cellule et dans le meme classeur. voilà le code:

Sous feuille 1

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then

Sheets("Feuil2").Range("A1") = Target

End If

End Sub

Sous Feuille 2

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then

Sheets("Feuil1").Range("A1") = Target

End If

End Sub

Je met des printscreen pcke les fichiers sont énormes.

c'est la base de données (dsl, je px pas tt laissé.. )

sa c'est un extrait des fiches par gare. (tous les onglets ont la meme forme - les infos prise dans la base de donnée se trouvent sur la ligne 6 )

Le truc c'est que je doit rajouté encore des infos dans les fiches par gare, c'est pour sa que j'ai besoin de faire toutes ces liaisons..

D'avance je vous remercie de votre aide.. et j'espère avoir été assez clair dans mes explications.

Sangoran

Bonjour Sangoran,

Si je comprends bien. Nous avons 2 classeurs différents

Ces deux possèdent une même feuille (même champs en colonnes)

La mise à jour d’un classeur 1 doit permettre la mise a jour du classeur 2

Et inversement La mise à jour d’un classeur 2 doit permettre la mise a jour du classeur 1

Les Contraintes;

Ces deux classeurs ne sont pas ouverts simultanément

Des données doivent pouvoir être ajoutées (pas de retrait ?)

Les données peuvent elles être modifiées ?

Une cellule Excel ne peut pas en principe être source d’information et collectrice d’une autre

Cela tamponne quelque part, Sauf par VBA tel que vous le montrez

Une boucle simple avec For-Next complémentaire pour la scrutation des différentes cellules, devrait suffire.

Et pour passer d’un classeur à l’autre ajouter WorkBooks(« xxx ») devant WorkSheets(« yyy »)

Inconvénient il faut avoir les deux fichiers ouverts et si les « tables » sont conséquentes

Cela peur être très long lors d’une mise a jour pour une cellule

J’utilise pour mon compte perso un cas similaire. Voici comment je me suis organisé

Classeur 1 faire ceci cela, Classeur 2 faire autre chose, Classeur 3 mes données communes

Si j’ouvre un classeur 1 ou 2, la première manipulation (peut être automatique)

Relecture des données du classeur 3, pour mise à jour

Par la suite dans classeur 1 ou 2 si je dois modifier des informations

Appel du classeur 3, pour faire toutes les modifs (ajout, suppression, corrections, tri, classement. etc.).

Au retour relecture des données pour mise à jour du fichier en cours

Dans ce cas si nous étions sur le classeur 1 le classeur 2 sera mis a jour lors de son ouverture

Bien entendu, j’ai dans classeur 1 et 2 un bouton pour forcer éventuellement la « màj »

Intérêt portabilité des fichiers et surtout Une gestion de la base d’information UNIQUE

Cordialement

Alain

Bonjour Alain,

Oui, vous avez bien compris. C'est 2 classeurs différents.

Le truc, c'est que je ne suis pas doué en VBA.. j'ai trouvé ceci sur un autre forum et par hasard

Justement, les données vont être modifiées, c'est pour cela que je souhaite faire ce liaisons.

Je ne sais pas comment écrire ce code, et sur le 2eme fichier (le fichier "Test", la mise en page est toujours la meme dans chaque onglet. C'est-à-dire que les titres des colonnes restent les mêmes, ce n'est que la ligne 6 qui change.

Je pense que sa doit être possible en adaptant ce que j'ai écris sous VBA dans mon ancien post.. Pourriez-vous m'éclairer s'il vous plait..?

Merci

Re salut

La ligne 6 et les suivantes je suppose !

Je crois avoir vu que vous utilisez la version 2007 ,

Je n'ai que la version 2003 mais cela devrait aller

Je ne pense pas que le VBA soit très différent ou vous vous devrez de l'adepter

Il me faudra un peu de temps, car j'ai déjà 3 ou 4 trux sur le feu ...

Cordialement

Alain

Bah sur la base de données ("projets_liste_demo......") il y a plus de 150 lignes.

Mais sur les fiches par gare ("Test") il n'y a qu'une seule ligne (la n°6) qui contient des infos de la base de données. Et c'est pareille sur tout les onglets ( Aigle, Allaman, etc).

Je m'explique:

La ligne 6 de la fiche par gare Aigle est reliée à la ligne 6 de la base de données.

La ligne 6 de la fiche par gare Allaman Nord est reliée à la ligne 7 de la base de données.

La ligne 6 de la fiche par gare Allaman Sud est reliée à la ligne 8 de la base de données.

et ainsi de suite.

Pas de problème, Merci pour votre aide!

Salutations

Re-

Voilà j’ai pu me libéré …

Une seule ligne de mise a jour !

Tester avec ces deux fichiers si cela vous va bien !

Se sera toujours un fil de recherche

Attention chaque feuille doit avoir son petit code et le classeur doit contenir

La fonction recherche du nom de l’onglet (dans module 1)

Accès a VBA par ALT+F11

https://www.excel-pratique.com/~files/doc/351_Classeur_1_maitre.xls

https://www.excel-pratique.com/~files/doc/351_Classeur_2_Suiveur.xls

A vous relire si problème

Cordialement

Alain

Bonjour..

Pas d'autres solutions..?

Merci

Bonjour,

personne ne connait la réponse?

J'ai trouvé autre chose.. mais cela fonctionne que dans un meme classeur.

Moi j'ai 2 classeurs:

un qui s'appelle "Listes par gare.xls"

le 2ème s'appelle "Projets_liste_demo_ oct 2007.xls"

Sous feuille 1

Private Sub Worksheet_Change(ByVal Target As Range)

Sheets("Feuil2").cells(Target.row,Target.column).value = Target.value

End Sub

Sous feuille 2

Sub Worksheet_Change(ByVal Target As Range)

Sheets("Feuil1").cells(Target.row,Target.column).value = Target.value

End Sub

Quelqu'un saurait-il l'adapter pour que cela fonctionne pour deux classeurs différents?

d'avance je vous remercie.

Salutations

Goran

Rechercher des sujets similaires à "liaisons vba"