Microsoft 365 mise a jour entre 2 fichiers VBA

cmdavid

XLDnaute Occasionnel
Bonjour, je cherche une macro pour mettre a jour automatiquement des données entre 2 fichiers excel!
si je change les données du fichier A, celles ci-doivent se mettre a jour dans le fichier B sans ouvrir le fichier B.
j'ai testé avec la macro ci-dessous, mais cela ne fonctionne pas!!!
Sub Macro1ty()
'
' Macro1ty Macro
'

'
Range("C4:TB1997").Select
End Sub
 
Solution
Avec ce code dans ThisWorkbook ça me paraît mieux :
VB:
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim fn$
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
Workbooks("Destination.xlsx").Close 'si le fichier est ouvert
With ThisWorkbook
    fn = .FullName
    .SaveAs .Path & "\Destination.xlsx", 51 '51 => .xlsx
    .SaveAs fn, 52 '52 => .xlsm
End With
Application.EnableEvents = True
End Sub
Le fichier Destination.xlsx est mis à jour chaque fois qu'on enregistre le fichier Source(2).xlsm.

job75

XLDnaute Barbatruc
Bonjour cmdavid, laurent3372,

Le problème posé n'est pas clair.

S'il s'agit simplement de remplacer les données du fichier B par celles du fichier A il suffit de copier le fichier A sur le fichier B avec cette macro dans le fichier pilote Copier fichier :
VB:
Sub Modifier_B()
CreateObject("Scripting.FileSystemObject").CopyFile ThisWorkbook.Path & "\A.xlsx", ThisWorkbook.Path & "\B.xlsx"
End Sub
Téléchargez les fichiers joints dans le même dossier (le bureau).

A+
 

Pièces jointes

  • Copier fichier(1).xlsm
    16.2 KB · Affichages: 5
  • A.xlsx
    9.3 KB · Affichages: 3
  • B.xlsx
    9.1 KB · Affichages: 3

laurent3372

XLDnaute Impliqué
Supporter XLD
Pour le faire facilement:
  • ouvrir les deux classeurs A et B
  • dans le classeur A, copier les données désirées
  • dans le classeur B Coller > collage spécial > cliquer sur "coller avec liaison"
  • fermer le classeur A
Maintenant, dans le classeur B, on peut faire Données > Actualiser tout. Cela recopie les valeurs de A vers B
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Cmdavid, Job, Laurent,

En PJ un exemple d'écriture dans un fichier fermé via une requête SQL.
( Il faut les deux fichiers dont le nom est ... explicite )
L'exemple ne fait qu'enregistrer la dernière ligne du tableau. C'est juste un exemple de faisabilité.

Librement inspiré du bon exemple de :
 

Pièces jointes

  • ClasseurOuvert.xlsm
    29.7 KB · Affichages: 6
  • ClasseurFermé.xlsm
    14.3 KB · Affichages: 6

job75

XLDnaute Barbatruc
Autre solution avec écrasement du fichier Destination.xlsx chaque fois qu'on modifie Source(1).xlsm :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Workbooks("Destination.xlsx").Close 'si le fichier est ouvert
Me.Copy 'nouveau document
With ActiveWorkbook
    .SaveAs ThisWorkbook.Path & "\Destination.xlsx", 51
    .Close
End With
End Sub
Bonjour sylvanu.
 

Pièces jointes

  • Source(1).xlsm
    15.5 KB · Affichages: 4
  • Destination.xlsx
    9.1 KB · Affichages: 3

job75

XLDnaute Barbatruc
Avec ce code dans ThisWorkbook ça me paraît mieux :
VB:
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim fn$
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
Workbooks("Destination.xlsx").Close 'si le fichier est ouvert
With ThisWorkbook
    fn = .FullName
    .SaveAs .Path & "\Destination.xlsx", 51 '51 => .xlsx
    .SaveAs fn, 52 '52 => .xlsm
End With
Application.EnableEvents = True
End Sub
Le fichier Destination.xlsx est mis à jour chaque fois qu'on enregistre le fichier Source(2).xlsm.
 

Pièces jointes

  • Source(2).xlsm
    16.1 KB · Affichages: 9
  • Destination.xlsx
    9.1 KB · Affichages: 9

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 133
Membres
103 128
dernier inscrit
pmordel@parisbrestconsult