Microsoft 365 mise a jour automatique fichier excel

cmdavid

XLDnaute Occasionnel
Bonjour a tous,
je suis débutant, je ne sais rien sur la VBA
donc ci-joint les excel, si quelqu'un pouvant faire en sorte qu'ils fonctionnent..
problème :
j'ai 2 fichier Excel avec des liens entre eux
1.BASE
2.RAPPORT
dans le 2.RAPPORT il y a un bouton avec des dates
ce que je souhaite est que lorsque je change la date dans 2.RAPPORT, les données soit modifiées dans 1.BASE sans ouvrir 1.BASE et met a jour les données de 2.RAPPORT.

par avance un grand merci!
 

Pièces jointes

  • BASE.xlsm
    207.6 KB · Affichages: 7
  • RAPPORT.xlsm
    744.7 KB · Affichages: 5
Solution
Bonjour a tous,
je suis débutant, je ne sais rien sur la VBA
donc ci-joint les excel, si quelqu'un pouvant faire en sorte qu'ils fonctionnent..
problème :
j'ai 2 fichier Excel avec des liens entre eux
1.BASE
2.RAPPORT
dans le 2.RAPPORT il y a un bouton avec des dates
ce que je souhaite est que lorsque je change la date dans 2.RAPPORT, les données soit modifiées dans 1.BASE sans ouvrir 1.BASE et met a jour les données de 2.RAPPORT.

par avance un grand merci!

C'est a cela que sert PowerQuery. simple et rapide.
Comme c'est inclus dans office 365, c'est hyper rapide.

La seule complication vien quand tu ne sais pas combien de fichier tu dois importer...
Dans ce cas on importe les fichiers inclus dans un repertoire...

job75

XLDnaute Barbatruc
Bonjour cmDavid,
les données soit modifiées dans 1.BASE sans ouvrir 1.BASE
Ben non, pour que les liaisons dans le fichier BASE.xlsm se mettent à jour il faut ouvrir le fichier.

C'est ce que fait automatiquement cette macro dans la feuille RDG du fichier RAPPORT.xlsm :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B3]) Is Nothing Then Exit Sub
Dim etat As Boolean
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False 'évite le message quand des liaisons ne peuvent pas être mises à jour
    etat = .AskToUpdateLinks 'etat de l'option avancée
    .AskToUpdateLinks = False 'évite le message de confirmation des mises à jour
    Workbooks.Open(ThisWorkbook.Path & "\Base.xlsm").Close True 'à adapter, le fichier est ouvert, enregistré et refermé
    .AskToUpdateLinks = etat 'état initial
End With
ThisWorkbook.Save 'enregistrement
End Sub
Elle s'exécute quand la cellule B3 est modifiée.

Téléchargez les fichiers joints dans le même dossier (le bureau).

A+
 

Pièces jointes

  • RAPPORT.xlsm
    749.8 KB · Affichages: 10
  • BASE.xlsm
    207.8 KB · Affichages: 7
Dernière édition:

cmdavid

XLDnaute Occasionnel
Bonjour cmDavid,

Ben non, pour que les liaisons dans le fichier BASE.xlsm se mettent à jour il faut ouvrir le fichier.

C'est ce que fait automatiquement cette macro dans la feuille RDG du fichier RAPPORT.xlsm :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B3]) Is Nothing Then Exit Sub
Dim etat As Boolean
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False 'évite le message quand des liaisons ne peuvent pas être mises à jour
    etat = .AskToUpdateLinks 'etat de l'option avancée
    .AskToUpdateLinks = False 'évite le message de confirmation des mises à jour
    Workbooks.Open(ThisWorkbook.Path & "\Base.xlsm").Close True 'à adapter, le fichier est ouvert, enregistré et refermé
    .AskToUpdateLinks = etat 'état initial
End With
ThisWorkbook.Save 'enregistrement
End Sub
Elle s'exécute quand la cellule B3 est modifiée.

Téléchargez les fichiers joints dans le même dossier (le bureau).

A+



un grand merci pour votre aide, ça marche.
j'ai un autre petit problème, le fichier BASE doit se mettre a jour automatiquement sans être ouvert lorsque les données de A1, A2 et A3 sont modifiées.
voir fichier joint
encore un grand merci pour votre aide
 

Pièces jointes

  • RAPPORT.xlsm
    748.8 KB · Affichages: 4
  • BASE.xlsm
    207.2 KB · Affichages: 3
  • a1.xlsx
    9.9 KB · Affichages: 3
  • a2.xlsx
    10.6 KB · Affichages: 2
  • a3.xlsx
    9.8 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour cmdavid,

Il suffit de télécharger les 5 fichiers dans le même dossier, le fichier BASE.xlsm est mis à jour quand la macro précédente s'exécute.

Comme toutes les liaisons fonctionnent on peut supprimer l'instruction .DisplayAlerts = False.

Bonne journée.
 

cmdavid

XLDnaute Occasionnel
je ne comprend pas ce qu'il faut faire exactement, quel programme macro?

Ben celui qui s'exécute automatiquement dans le fichier RAPPORT.xlsm en modifiant B3.

je viens de faire le truc que tu as dis et ça marche, merci, même si je ne suis pas sur d'avoir compris comment j'ai fais!

autre petite question, comment faire fonctionner les deux macros ci-dessous:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B3]) Is Nothing Then Exit Sub
Dim etat As Boolean
With Application
.ScreenUpdating = False
.DisplayAlerts = False
etat = .AskToUpdateLinks
.AskToUpdateLinks = False
Workbooks.Open(ThisWorkbook.Path & "\Base.xlsm").Close True
.AskToUpdateLinks = etat
End With
ThisWorkbook.Save
End Sub

et :
Private Sub Workbook_Open()
Dim nomfich$
nomfich = ThisWorkbook.Path & "\" & Me.Name
If IsError([Fichier_original]) Then
Me.Names.Add "Fichier_original", nomfich, Visible:=False
Me.Save
Else
If nomfich <> [Fichier_original] Then
On Error Resume Next
Workbooks.Open [Fichier_original]
Me.ChangeFileAccess xlReadOnly
Kill nomfich
Me.Close False
End If
End If
End Sub
 

cmdavid

XLDnaute Occasionnel
Bah la 1ère macro c'est celle que je vous ai donnée, elle doit être placée dans le code de la feuille comme je l'ai dit.

La 2ème macro est à placer dans le ThisWorkbook.

Bonjour job75,
en plaçant le code dans thisworkbook, le fichier est détruit des l’exécution du code!
autre probleme, votre formule pour la mise a jour fonctionne, mais je voudrais qu'elle fonctionne aussi avec d'autre case "langue, monnaie"
voir fichier joint
 

Pièces jointes

  • BASE.xlsm
    210.8 KB · Affichages: 7
  • RAPPORT.xlsm
    750.5 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonjour cmdavid, le forum,
en plaçant le code dans thisworkbook, le fichier est détruit des l’exécution du code!
Pourquoi utiliser une macro quand on n'a pas compris à quoi elle sert ?

Cette macro Workbook_Open est destinée à éviter la copie du fichier dans un autre dossier ou son changement de nom.

Au départ le nom "Fichier_original" ne doit pas exister.
autre probleme, votre formule pour la mise a jour fonctionne, mais je voudrais qu'elle fonctionne aussi avec d'autre case "langue, monnaie"
Dans la macro du post #3 remplacez Intersect(Target, [B3]) par Intersect(Target, [B3,B5:B6])

Bonne journée.
 

cmdavid

XLDnaute Occasionnel
Bonjour cmdavid, le forum,

Pourquoi utiliser une macro quand on n'a pas compris à quoi elle sert ?

Cette macro Workbook_Open est destinée à éviter la copie du fichier dans un autre dossier ou son changement de nom.

Au départ le nom "Fichier_original" ne doit pas exister.

Dans la macro du post #3 remplacez Intersect(Target, [B3]) par Intersect(Target, [B3,B5:B6])

Bonne journée.
compris pour la macro de mise a jour, merci et ça marche

pour macro éviter copie, par quoi remplacer "Fichier_original" ou quoi faire pour que le fichier fonction sans activer la macro lorsque je fais des copies et que la macro soit activée lorsque je ddécide que le fichier doit activer la macro?
 

Discussions similaires

Réponses
26
Affichages
791

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof