Macro d'actualisation

apfwl.87

XLDnaute Occasionnel
Bonjour le Forum

J'ai un fichier Excel dans lequel je fais toutes sortes de calculs. Ce fichier "calculation" contient plusieurs feuilles de calcul dont une qui résume les calculs effectués sur les autres feuilles. J'ai fait une copie de cette feuille "résumé" que j'ai ensuite extraite et enregistré comme nouveau fichier excel que j'ai nommé "reporting". J'aimerai que lorsque les données sont modifiés dans le fichier "calculation", elles le soient également dans le fichier "reporting". Actuellement, la mise à jour dans "reporting" ne se fait que si le fichier "calculation" est également ouvert. Y a-t-il un possibilité pour que les données se mettent à jour sans obligatoirement ouvrir le fichier "calculation"?

Merci d'avance pour votre aide.
 

Bruno02

XLDnaute Nouveau
Re : Macro d'actualisation

Bonsoir,
J'ai plusieurs fichiers de ce type et j'utilise QUERY

La fonction actualisation des données nécessite que le fichier source soit ouvert d'où la création en VBA d'une requête QUERY (données externes - créer une requête) qui s'exécute à l'ouverture du fichier.
Remplacement des données (RefreshStyle = xlOverwriteCells)
Cordialement
 

apfwl.87

XLDnaute Occasionnel
Re : Macro d'actualisation

Bonjour Bruno

Merci pour ta réponse. Malheureusement je n'ai pas grande idée en ce qui concerne VBA. Est-ce que par hasard tu aurais un modèle que je pourrais adaptr pour mon fichier?

Merci d'avance
 

Bruno02

XLDnaute Nouveau
Re : Macro d'actualisation

Bonjour,
Tu dois faire deux macros :
1/ une pour créer la requête
2/ une pour l'actualisation

Pour la requête, tu peux utiliser l'enregistreur de macro (afin de pouvoir recupérer les propriétés de ta requête)
menu excel : Données - données externes - créer une requête
Dans choisir une source de données => <nouvelle source de données> =>[OK]
Donner un nom puis dans type de base choisir "driver to microsoft excel" puis connexion
Dans installation ODBC [sélectionner un classeur] => c'est ton classeur source puis [OK] [OK]
Sélectionne une table par défaut => choisi la feuille source puis [OK]
Dans la fenêtre de l'assistant double clic sur les champs que tu veux importer pour les basculer à droite (colonnes de ta requête)
[suivant] [suivant] [suivant]inutile d'enregistrer la requête puis [terminer]

Une fenêtre importation s'ouvre :
Choisir la cellule de destination
Ouvrir [propriété] et choisi
opte pour "remplacer le contenu des cellules ..."
[OK] [OK]

2/ Actualisation à l'ouverture du fichier
En VBA - Thisworkbook => tu colle en adaptant avec tes noms de feuille et macro
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Sheets("Nomdemafeuille").Select
Call NOM_DE_MA_MACRO
End Sub

Bon courage
Cordialement
 

apfwl.87

XLDnaute Occasionnel
Re : Macro d'actualisation

Bonjour,

Merci pour ta réponse. Malheureusement je peine déjà au niveau de la requête! Lorsque je dois choisir une table défaut, je n'ai rien qui s'affiche. J'ai pourtant sélectionné mon fichier excel dans lequel je vais aller chercher les données. Sais-tu par hasard où est le problème?

Merci d'avance pour ton aide
 

apfwl.87

XLDnaute Occasionnel
Re : Macro d'actualisation

Bonjour
Merci pour ta réponse. En effet c'était bien le problème. Toutefois, lorsque j'ai commencé à créer mes requêtes, je me suis rendue compte qu'en fait le problème vient de mes tableaux dynamiques! En effet, ils se réfèrent à des colonnes dont le contenu change régulièrement. Lorsque j'ouvre mon fichire excel, les tableaux ne s'actualisent pas automatiquement. Je suis allée dans les options du tableau et j'ai coché l'option actualiser lors de l'ouverture mais ça ne change rien. En fait c'est encore pire! Est-ce que je peux utiliser les m^mes requetes ou y a-t-il une autre astuce?
Bonne journée
 

tototiti2008

XLDnaute Barbatruc
Re : Macro d'actualisation

Bonjour à tous,

dans le classeur qui ne s'actualise pas, tu devrais mettre ce code dans ThisWorkbook (si c'est chinois, dis le moi je t'expliquerais en détails) :

Private Sub Workbook_Open()
ThisWorkbook.RefreshAll
End Sub
 

Bruno02

XLDnaute Nouveau
Re : Macro d'actualisation

Bonjour,
C’est peut être l’ordre des actualisations qui fausse ton résultat : on doit traiter les requêtes puis les TCD.
Si je résume ta configuration :
Fichier « calculation » avec une feuille de synthèse « résumé »
Fichier « reporting » avec une copie des données de « résumé »
Dans le fichier reporting une requête pour importer les données de la feuille « résumé » de calculation sans l’ouvrir.
L’analyse des données importées dans reporting sous forme de Tableau Croisé Dynamique.
Sinon joindre un extrait de tes deux fichiers dans un zip en modifiant les données pour préserver la confidentialité.
A te lire
Cordialement
 

apfwl.87

XLDnaute Occasionnel
Re : Macro d'actualisation

Bonjour à tous

Merci pour votre soutien. Malgré tout, je ne nage pas, jecoule !!!:eek:

Je résume. J'ai un fichier "calculation" dans lequel j'importe des données d'un programme Access. Dans ce même fichier j'ai des onglets dans lesquels je fais toutes sortes de calculations et qui contiennent des TDC. J'ai un deuxième fichier appelé "reporting" dans lequel je vais chercher les résultats de mes calculs du fichier "calculations". Une partie de ces résultats se trouve dans les TDC.

Au départ, je pensais que c'est le fichier "reporting" qui ne s'actualisait pas, mais en fait se sont mes TDC du fichier "calculations" qui ne se mettent pas à jour. Lorsque j'importe mes données d'Access, je suis (pour l'instant) obligée d'aller cliquer sur mes tableaux pour les actualiser. Ce dont j'ai besoin, (si c'est possible!) c'est que lorsque j'importe mes données d'Access et qu'ensuite j'ouvre mon fichier "calculations", mes TDC se mettent automatiquement à jour.

Encore d'avance milles merci pour votre aide
 

Bruno02

XLDnaute Nouveau
Re : Macro d'actualisation

Bonjour,
En fait c'est plus simple (je pense).
Dans ton fichier calculation est ouvert, pour chaque feuilles avec tes données importées tu colles le code VBA suivant qui permet une actualisation de toutes les feuilles de ton classeur dès qu'une valeur change.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
ThisWorkbook.RefreshAll
End Sub

Si ton fichier est fermé lors de l'import tu colles le code du msg de tototiti2008
Cordialement
 

apfwl.87

XLDnaute Occasionnel
Re : Macro d'actualisation

Bonjour Bruno
J'ai créé une macro avec les lignes que tu m'as données mais ça ne fonctionne pas. J'ai ensuite entré les indications de tototiti2008 et là ça fonctionne à moitié. Je pense que je n'ai pas écrit mon code correctement. Quand j'ai créé ma macro, VB m'a inscrit automatiquement:
Sub Actualiser()
End Sub
J'ai voulu inscrire le code entre ces deux lignes mais là j'ai eu un message d'erreur. J'ai donc mis le code après. Le problème c'est qu'apparemment je me retrouve avec 2 fonctions. Losque je suis dans VB et que je clique sur exécuter la macro fonctionne mais je suis obligée d'ouvrir VB. Quand j'ouvre mon fichier Excel, rien ne se passe. Peux-tu encore m'aider s.t.p. ? Merci et bon week-end
 

Bruno02

XLDnaute Nouveau
Re : Macro d'actualisation

Bonsoir,
Je pense que tu as collée les codes au niveau des modules.


Lorsque VB est ouvert tu as un dossier "Microsoft Excel Objets" qui contient Feuil1(son nom) Feuil2(son nom) ... puis "ThisWorbook"

En fait, il faut pour chaque feuilles avec tes données :
Tu doubles clic sur la Feuil1(par exemple) et tu colles le code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
ThisWorkbook.RefreshAll
End Sub

Tu doubles clic sur la "ThisWorbook" et tu colles le code:
Private Sub Workbook_Open()
ThisWorkbook.RefreshAll
End Sub

Et là je pense que tes TCD seront actualisés.
Bien Cordialement
 

apfwl.87

XLDnaute Occasionnel
Re : Macro d'actualisation

Bonjour Bruno

A nouveau merci pour ta réponse. J'ai copié les codes comme tu me l'as indiqué, le problème maintenant c'est que quand j'ouvre mon fichier excel, il actualise en continu, sans arrêt. Je dois appuyre 2x sur esc. pour arrêter l'opération. Est-ce normal?

Merci de ta réponse et à bientôt
 

tototiti2008

XLDnaute Barbatruc
Re : Macro d'actualisation

Bonjour à tous,

L'évènement Worksheet_Change a lieu à chaque fois qu'une cellule change de valeur, ce qui signifie que pour chaque cellule qui change de valeur dans ta feuille, tout le classeur se rafraichit...
Dis-moi quand tu veux que les données de ton classeur se rafraichissent et je te dirais à quel évènement le lier. N'oublie pas de prendre en compte le temps de rafraichissement.
 

Discussions similaires

Réponses
6
Affichages
190