Mise à jour automatique d'un fichier entre 2 ordi

Bonjour

J'ai un problème de mise à jour automatique en temps réel de données entre 2 ordi.

Ordi 1 : j'ai un fichier A excel avec des données que je modifie en fonction de résultats d'une compétition.

Ordi 2 : J'ai un fichier B qui utilise les données du fichier A de l'ordi 1. Cer ordi 2 est relié à un vidéoprojecteur.

Les 2 ordi comuniquent par réseau Had oc.

Le problème que je rencontre, c'est que mon fichier B ne se met à jour que lorsque je l'ouvre. Je voudrais qu'à chaque modification sur le fichier A, automatiquement et en temps réel, le fichier B se mettent à jour, exactement la même chose que lorsque les 2 fichiers sont sur le même ordi.

Merci pour vos réponse

J'ai trouvé çà sur le forum

Est-ce que çà peut être une solution à mon problème?? Je ne suis pas un as du tout...Quelqu'un peut me valider çà avant que j'essaie et que je fasse des bêtises ???

CODE: TOUT SÉLECTIONNER

Sub auto_Open()

Call RefreshData

End Sub

Sub RefreshData()

Application.OnTime Now + TimeValue("00:00:30"), "RefreshData" 'toutes les 30 secondes

Application.CalculateFull

End Sub

J'ai essayé, mais çà ne marche pas

Bonjour,

Bien entendu c'est dans le classeur "B" que tu doit faire ça.

Dans le menu Excel ->> Outils ->> Options ->> Calcul

Mettre la propriété <Mode de calcul> sur Automatique

Voir si le paramètre Mise à jour des références hors programme est cocher, en principe il l'est par défaut.

Si ça marche pas faire un test.;

Les 2 classeurs ouvert sur les 2 PC

Modifier dans le classeur A

Taper F9 dans le classeur B : Si ça se met à jour tu dis j'expliquerais comment tu dois mettre tes sub.

Si ça va toujours pas, explique comment sont faite les liaisons du classeur B vers le A (un exemple des formules que tu a en B)

A+

Je te joins le fichier

Dans le menu Excel ->> Outils ->> Options ->> Calcul Je ne vois pas çà. J'ai excel 2010.

Pour l'instant, la seule possibilité que j'ai, c'est de rafraichir manuellement sur l'ordi B en faisant "DONNEES" puis "modifier les liens" puis "mettre à jour les valeurs". en ayant auparavant enrégistrer obligatoirement mon fichier A pour que cela fonctionne.

J'ai essayé F9, çà ne fait rien; çà actualise les calculs ( je le vois avec mon chrono en E2) mais pas le rapartiement des données.

c'est impossible pour moi d'intervenir sur mon ordi B une fois toutes mes vidéoprojection lancées pour avoir une vidéoprojection propre.

merci

Yvan

Dans ton profil-> Excel 2003

su 2010

Clic sur le bouton Excel (le rond au dessus à gauche), dans le bas à droite -> Option d'Excel

  • >> Formules ->> Calcul sur automatique.
  • >> Options avancées ->> Mise à jour des liaisons avec d'autre documents. (cocher)

Mais d'après ce que tu explique ce ne sera pas bon.

Ont va essayer..

Dans le classeur B

Dans l'iDE ->> Menu Insertion ->> Module

Dans la fenêtre qui s'ouvre tu colle ce code..

Sub RefreshData()
    ActiveWorkbook.RefreshAll
End Sub

Dans A tu fais une modif.

Dans B tu met le curseur sur le A de ActiveWorkbook et tu tape F5

Tu dis..

Si ça fonctionne je continuerais

Exact pour mon profil j'ai donc mis à jour excel 2010.

Pour l'instant, je n'ai qu'un ordi sous la main, donc je ferai tes essais ce soir.

Par contre, je viens de faire une petite macro pour enregistrer la mise à jour manuel que j'arrive à faire.

Cela donne ces codes ( la référence du fichier source n'est pas la bonne parce que je n'avais pas mis le bonne source pour l'essai !!!)

Sub Macro1()

'

' Macro1 Macro

'

'

ActiveWorkbook.UpdateLink Name:= _

"C:\Users\Carré\Desktop\SAUVEGARDE Ordi Yvan 12 décembre 2012\SWIN\CHAMPIONNAT DE FRANCE 2013\BASE DE DONNEES RESULTATS CHAMPIONNAT DE FRANCE MESLAY 2013.xls" _

, Type:=xlExcelLinks

End Sub

Actuellement, dans le fichier que j'ai mis en ligne, il y a une macro "boucle" que j'ai récupéré dans un forum et qui marche très bien pour mettre en marche mon chronomètre.

Donc je me dis qu'en couplant les codes ci dessus et la marco " boucle", je ne vois pas pourquoi il n'y aurait pas un rafraissement total des données à chaque seconde !!!

Par contre, je suis incapable de savoir comment intégrer les codes ci dessus dans la macro "boucle"

Cette macro "boucle" est intéressante car je peux en sortir juste en faisant Ctrl+Pause....pour moi, c'est rassurant !!!

Par contre, cette macro "boucle " contient probablement des tas de choses qui sont peut être inutiles pour le cas présent.

Yvan

La macro Boucle ne sert STRICTEMENT A RIEN si la propriété Mode calcul est sur automatique.

Comment tu arrive dans cette sub ? il n'y a aucun appel pour y entrer ?

Essaye avec le code que j'ai mis dans mon poste précédant, ce devrait être la même chose que ce que tu a dans la macro que tu a fait mais en plus cour.

Tu dis aussi que la mise à jour ne se fait que si tu enregistre le classeur A, donc essaye aussi mon code après avoir sauver le A.

Quand tu ouvre le B, tu a un message pour autoriser les liaisons ? (quand je l'ouvre c'est ce que j'ai), si oui, tu dis j'expliquerais comment éviter ce message.

Donne un compte rendu complet de ce que tu a testé pour automatiser tout ça.

A+

La macro Boucle ne sert STRICTEMENT A RIEN si la propriété Mode calcul est sur automatique. Je suis incapable de te dire pourquoi, mais cette macro "boucle" permet à mon chrono en E2 de compter le temps passer depuis ma dernière mise à jour de résultats exactement comme sur une montre. Tout est en automatique, et pourtant, sans cette marco que j'exécute, le chrono reste fixe si je ne fait pas manuellement et continuellment "FORMULE" puis "Calculer maintenant". Moi, j'ai simplement fait un copier-coller d'une macro que j'ai trouvé dans un forum pour un tableau qui avait un chrono.

J'ai crée une marco en copiant collant ce que tu m'avais suggéré.

Sub RefreshData()

ActiveWorkbook.RefreshAll

End Sub

Quand j'active cette nouvelle macro, il ne se passe rien du tout pour la mise à jour des liens externes, même si j'ai sauvegardé les données du fichier A.

J'ai crée une autre macro

Sub Macro1()

'

' Macro1 Macro

'

'

ActiveWorkbook.UpdateLink Name:= _

"ADRESSE DU FICHIER SOURCE" _

, Type:=xlExcelLinks

End Sub

Quand j'active cette macro après avoir sauvegardé les données du fichier A, tous les liens sont mis à jour , et également le chrono. Par contre, cette actualisation ne se fait qu'une fois puisque que la macro n'est pas prévu en boucle.

La macro "boucle " qui se trouve dans le fichier me parait bien compliqué....mais pê est-ce pour pouvoir avoir une boucle et en sortir facilement en tapant Ctrl+Pause.....pour moi, c'est vraiment du chinois tout çà !!!!

Quels sont les risques de lancer une marco en boucle par rapport aux ressources de l'ordi? Lorsque je vais utiliser mes fichiers d'affichage ( J'en aurait 4 en tout = 4 ordi+4 écran + un ordi avec ma base de données) tous mes affichages seront ouverts et calés le matin à 7 h et resteront ainsi jusqu'à 19-20H. Peut-on laisser une macro en boucle pendant 12 13 heures sans que cela nuise par exemple à la rapidité d'affichage ou autre?

Au plaisir de te lire

Yvan

Re,

Aucun problème pour les macros elles peuvent tourner indéfiniment.

Ont va pouvoir passer au stade suivant..

A faire dans "tout" les fichiers B (3 classeurs si j'ai bien compris)

Dans l'IDE tu a la fenêtre du projet avec le nom des feuilles (si pas présent.. Ctrl+R)

Tu double clic sur ThisWorkBook, dans la nouvelle fenêtre tu copie...

Private Sub Workbook_Open()
    RefreshData
End Sub

menu Insertion ->> Module ->> OK

Dans la nouvelle fenêtre tu copie le code ci-dessous

Sub RefreshData()
    ActiveWorkbook.UpdateLink Name:= _
    "C:\Users\Carré\Desktop\SAUVEGARDE Ordi Yvan 12 décembre 2012\SWIN\CHAMPIONNAT DE FRANCE 2013\BASE DE DONNEES RESULTATS CHAMPIONNAT DE FRANCE MESLAY 2013.xls" _
    , Type:=xlExcelLinks
    'toutes les 30 secondes, mais est-ce bien nécessaire aussi souvent ?
    Application.OnTime Now + TimeValue("00:00:30"), "RefreshData"
End Sub

Oublie pas de les sauver

Et c'est pas tout..

Dans le classeur A

Tu clic droit sur l'onglet de la feuille où tu modifie les données. et tu valide Visualiser le code

Dans cette fenêtre tu colle le code ci-dessous

Private Sub Worksheet_Change(ByVal Target As Range)
    Changer = True
End Sub

Toujours dans l'IDE..

Tu ouvre la fenêtre ThisWorkBook et tu colle le code ci-dessous

Private Sub Workbook_Open()
    SauveQuandModif
End Sub

Et enfin, tu ajoute un module -> Insertion -> Module -> OK et tu colle le code ci-dessous

Public Changer As Boolean

Sub SauveQuandModif()
    If Changer Then
        ThisWorkbook.Save
        Changer = False
    End If
    'toutes les 30 secondes, mais est-ce bien nécessaire aussi souvent ?
    Application.OnTime Now + TimeValue("00:00:30"), "SauveQuandModif"
End Sub

Ça parait compliquer mais j'ai essayé d'être le plus précis possible et si tu suis bien ça devrait aller.

Le résultat devrait être...

Les classeurs B seront actualisés toute les 30 secondes mais à ta place je passerai au moins à une minute (00:01:00)

La macro dans le A Vérifie toutes les 30 secondes s'il y a eu une modification, si oui, sauve le classeur pour permettre la mise à jour des classeurs B

Il est bien évident que je n'ai pas ta configuration et que je ne peu rien tester.

Tu dis.

A+

Merci pour ton travail. Je vais essayer de faire çà dès que je pourrais !!!

Une question : Avec les macros que tu proposes, est-ce que mon chrono va fonctionner normalement de façon qu'on voit défiler les secondes avec le rafraicchissement toutes les 30 secondes que tu proposes?

Non, mais ont verras ça après.

Bonsoir

J'ai donc fait qq essais.

J'ai mis la partie ci dessosus dans le fichier B:

Tu double clic sur ThisWorkBook, dans la nouvelle fenêtre tu copie...

CODE: TOUT SÉLECTIONNER

Private Sub Workbook_Open()

RefreshData

End Sub

menu Insertion ->> Module ->> OK

Dans la nouvelle fenêtre tu copie le code ci-dessous

CODE: TOUT SÉLECTIONNER

Sub RefreshData()

ActiveWorkbook.UpdateLink Name:= _

"C:\Users\Carré\Desktop\SAUVEGARDE Ordi Yvan 12 décembre 2012\SWIN\CHAMPIONNAT DE FRANCE 2013\BASE DE DONNEES RESULTATS CHAMPIONNAT DE FRANCE MESLAY 2013.xls" _

, Type:=xlExcelLinks

'toutes les 30 secondes, mais est-ce bien nécessaire aussi souvent ?

Application.OnTime Now + TimeValue("00:00:30"), "RefreshData"

End Sub

Avec çà, çà marche impeccable pour les liens. Cela rafraichit le chrono, sauf qu'avec un rafraicchissement toutes les 30 sec, on ne voit pas les secondes défiler. J'ai donc mis avec rafraichissement toutes les secondes, mais çà ralentit mon fichier A pour les saisies. Donc tu as raison, rafraissement pas plus que toutes les 30 sec. , voir plus. Tant pis pour mon chrono !!!

Par contre, j'ai eu du mal à mettre dans la macro ( donc sur le fichier B) le chemin de la source. J'avais enregistré çà lorsque le fichier était sur l'ordi A, et je l'ai mis ensuite avec une clé USB sur l'ordi B pour faire un test. Je pensais qu'en ouvrant des fichiers sur tel ou tel ordi, les sources incluent dans les macros se mettaient à jour en fonction !!!!

Pour la suite de ce que tu me proposais de mettre dans le fichier A, je pense que cela ne va pas être adapté à mon fonctionnement le jour J. Vu que cela va aussi être saisi par d'autres personnes pendant ces 3 jours, je préfère que les gens choississent eux m^me le moment d'enregistrer le fichier de saisie....Cela leur permet d'avoir le temps de vérifer leurs saisies et leurs erreurs éventuelles.


Un grand Merci pour ton aide Lermite...

Encore une question : Lorsque j'ai mis un rafraichissement toutes les sec, j'ai pu constater une perturbation du déplacement de ma souris et de l'entrée des chiffres dans le fichier A. Que va t-il en être lorsque je vais avoir 4 ordi qui viendront chacun chercher des données sur le fichier A? Est-ce que cela va beaucoup perturber la vitesse de saisie de l'ordi A?

Je ne pense pas, c'est parce qu'en mettant toute les seconde tu réactive la macro alors qu'elle n'a pas encore terminer le processus en cour.

Tu ne sais pas faire un essai en condition réel ? Possible qu'il faudra synchroniser les requêtes pour qu'elles ne tombe pas en même temps.

Et je serais de toi je mettrais une minute, en tout les cas plus de 30 secondes.

Avec 4 ordi ? ça dépend de la vitesse du réseau

A+

Edit : pour le rafraîchissement de l'horloge tu peu réactiver la fonction Boucle, remplace-la par ce code

'Actualise la cellule E2 toute les secondes
Sub Boucle()
Static S As Integer
    While True
        If S <> Second(Now) Then 'pour éviter les raffraichissement inutile
            S = Second(Now)
            'Inutile de recalculer tout le classeur
            Sheets("Feuil1").Range("E2").Calculate
        End If
      DoEvents
    Wend
End Sub

Et si tu veux que ça démarre tu ajoute dans le ThisWorkbook_Open tout simplement Boucle

Private Sub Workbook_Open()
    RefreshData
    Boucle
End Sub

Bonjour Lermite

Désolé d'avoir mis tant de temps à te donner de mes nouvelles.

J'ai donc fait tout ce que tu m'as dit. c'est super. La macro Boucle fonctionne comme je voulais.

Par contre, grosse lacune de ma part. Comment fait-on pour faire fonctionner 2 macros en même temps; Habituellement, pour lancer une macro, je vais dans macro, je choisis la macro puis exécuter. Mais là, impossible d'activer la 2 ème puisque la première tourne déjà.

J'ai cru comprendre que

Private Sub Workbook_Open()

RefreshData

Boucle

End Sub

était là pour lancer les 2 macros à l'ouverture du fichier. Sans doute que je me trompe !!!! remarque, je préfèrerai pouvoir les lancer moi même au moment que je choisis. comment je dois faire?

Je suis vraiment désolé d'être aussi popo....mais j'apprends des tas de choses grâce à ce défi !!!

Merci

Yvan

Re,

Exact, mais je ne vois pas pourquoi ça dérange de lancer les deux macros au départ !

Tu peu supprimer les deux lignes et les lancer différemment. Note que c'est la macro Boucle qui fait tourner le compteur.

A+

Et comment faut-il que je fasse pour lancer 2 macro en même temps?

En mettant un bouton (ActiveX et pas formulaire) sur la feuille et mettre le code dans le module de la feuille...

Private Sub CommandButton1_Click()
    RefreshData
    Boucle
End Sub

Ou Alors tu va deux fois de suite dans Macro.

A+

Merci

çà marche

En fait non, çà ne marche pas comme je le pensais

Les 2 macros s'exécutent, mais successivement et non pas simultanément.

J'ai fais un petit test avec 2 macros :

Sub Macro1()

'

' Macro1 Macro

'

'

Range("E7").Select

ActiveCell.FormulaR1C1 = "Macro 1"

Application.Wait (Now + TimeValue("0:00:05"))

End Sub

Sub Macro2()

'

' Macro2 Macro

'

'

Range("k10").Select

ActiveCell.FormulaR1C1 = "Macro 2"

End Sub

puis le bouton ActiveX

Private Sub CommandButton1_Click()

Macro1

Macro2

End Sub

Normalement, les mots macro 1 et macro 2 devraient s'afficher en même temps si les 2 macros étaient exécutées en même temps.

Et là, non, Macro 2 s'affiche avec 5 secondes de retard

Comment faire pour exécuter plusieurs macros en même temps???

Merci

Rechercher des sujets similaires à "mise jour automatique fichier entre ordi"