Bienvenue sur les forums conseil & création · S'enregistrer

Se connecter automatiquement

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Mise à jour classeur à l'aide d'une macro · Envoyer le lien

Par TheDoude, le 07 Nov 2009, 18:31 Revenir en haut de page Répondre en citant

Bonjour,

J'utilise excel 2007 et je suis en réseau j'utilise des données situées dans un autre classeur. Si je veux mettre à jour ces données je dois cliquer sur données, modifier les liens d'accès, ensuite je sélectionne mon classeur et je clique sur mettre à jour.
J'aimerais créer dans mon classeur un bouton poussoir intitulé mise à jour qui effectuerait celles-ci directement en cliquant sur le bouton.
Cela doit vous paraître enfantin à réaliser mais pour moi ça me simplifierait la vie car je dois mettre à jour constamment. Je pense qu'il faut faire une macro complémentaire, mais je n'en ai jamais faite.
Si vous me répondez sachez que vous avez affaire à plus qu'un débutant.

Merci d'avance pour votre patiente Crying or Very sad

TheDoude
Par Horny, le 09 Nov 2009, 17:44 Revenir en haut de page Répondre en citant

Salut,

Ca doit pouvoir être réalisé assez facilement, en enregistrant une macro. Je n'ai pas Excel version 2007 mais je suppose que ça n'a pas dû beaucoup changer:
Va dans Outils >> Macro >> enregistrer une macro, puis fait ta manip habituelle, et enfin clique sur le bouton Arrêter l'enregistrement (qui doit être dans une barre d'outils flottante qui a dû apparaître quand tu as commencé l'enregistrement).

Ensuite, pour créer un bouton, fait afficher la barre d'outils Formulaire (de mémoire, Affichage >> barres d'outils >> Formulaire), puis choisis de créer un bouton. Ensuite, clic-droit sur le bouton >> Affecter une macro, et affecte-y la macro précédemment enregistrer, et ton souhait devrait être exaucé.

@+++
Par TheDoude, le 10 Nov 2009, 10:07 Revenir en haut de page Répondre en citant

Bonjour,

Ok c'est bon, maintenant je développe en fait les deux fichiers en questions sont renouvelé toute les semaines. Je m'explique le fichier où se trouve la macro est intitulé feuille prep sem 00 et il va chercher les infos dans suivi adm sem 00.
Donc toute les semaines je copie les deux et je les renomme dans la semaine en cours.
Est-ce que la macro peut suivre ? c'est à dire aller chercher les infos dans la semaine renommée ? plutôt que dans la semaine 00 ? ou je dois créer une nouvelle macro chaque fois ?
Je ne sais pas si je suis clair mais merci pour ton aide Idea

TheDoude
Par TheDoude, le 10 Nov 2009, 11:57 Revenir en haut de page Répondre en citant

Re Bonjour,

J'ai aussi dans mon classeur 5 onglets qui correspondent aux jours de la semaine, j'aimerais avoir 1 bouton de mise à jour par onglet.
Quand j'essaye en ce moment il me ramène sur celui où j'ai enregistré la macro Embarassed
J'aimerais pouvoir faire la manip quand je suis sur mon onglet et ne pas en changer.
Ma question est faut-il enregistrer 1 macro par onglet Question
J'espère être assez clair ...

Merci d'avance

TheDoude
Par Horny, le 10 Nov 2009, 18:20 Revenir en haut de page Répondre en citant

Salut,

And now the fun begins Very Happy

En fait, il va falloir éditer manuellement ta macro enregistrée pour l'adapter à ce que tu veux faire.

Citation:
Je m'explique le fichier où se trouve la macro est intitulé feuille prep sem 00 et il va chercher les infos dans suivi adm sem 00.
Donc toute les semaines je copie les deux et je les renomme dans la semaine en cours.
Est-ce que la macro peut suivre ? c'est à dire aller chercher les infos dans la semaine renommée ? plutôt que dans la semaine 00 ? ou je dois créer une nouvelle macro chaque fois ?


Oui, c'est faisable. Le plus simple est de récupérer le numéro du classeur en cours (prep sem xx) puis d'aller ouvrir le fichier suivi adm sem xx.
On y va pour le code (attention, je n'ai pas Excel sous la main pour vérifier, il se peut qu'il y ait quelques erreurs):


Code:

'rajouter juste après le début de la macro (Sub)
dim Sem_Count
dim Suivi_Adm_Sem_Name as string

Sem_Count = Left(Right(ThisWorkbook.Name,6), 2)    'récupération du numéro à partir du nom du classeur actif)
Suivi_Adm_Sem_Name = "chemin\suivi adm sem " & Sem_Count & ".xls"    'reconstruction du nom du classeur à ouvrir, en concaténant le début du nom du fichier, puis le numéro, et enfin l'extension (.xls)



chemin est le chemin d'accès vers ton fichier, qui est probablement écris plus loin dans la macro enregistrée. Copie/colle-le devant le \suivi adm sem.
Ensuite, à la ligne qui indique le nom du classeur (suivi adm sem 00, dans ton exemple), modifie le nom du classeur comme suite:

Code:

[...] "chemin\suivi adm sem 00.xls"

doit devenir:

[...] Suivi_Adm_Sem_Name


Et normalement, le fichier suivi adm sem portera le même numéro d'incrémentation que le classeur prep sem à partir duquel la macro sera lancée Smile




Citation:
J'ai aussi dans mon classeur 5 onglets qui correspondent aux jours de la semaine, j'aimerais avoir 1 bouton de mise à jour par onglet.
Quand j'essaye en ce moment il me ramène sur celui où j'ai enregistré la macro
J'aimerais pouvoir faire la manip quand je suis sur mon onglet et ne pas en changer.
Ma question est faut-il enregistrer 1 macro par onglet ?


Heureusement, non Wink
En fait, à la fin de ta macro, il doit y avoir une ligne qui te remet sur la feuille sur laquelle tu avait enregistré ta macro (celle sur laquelle tu te trouve à la fin de l'exécution de la macro)

Cherche une ligne avec quelque chose comme Sheets("nomdelafeuille").Activate et... supprime-là Smile

And you should be all set Smile

@+++ Wink
Par TheDoude, le 11 Nov 2009, 10:35 Revenir en haut de page Répondre en citant

Bonjour,

Tout cela me parait bien, il n'y a plus qu'à ....

et comme tu dis, il faut tester Rolling Eyes

En tout cas je te remercie pour tes infos compréhensibles par un néophyte comme moi.

Je te tiens au courant

TheDoude
Par TheDoude, le 11 Nov 2009, 10:45 Revenir en haut de page Répondre en citant

Re,

En te relisant ( ben oui faut que ça rentre ) je me suis aperçu que je me suis peut être mal expliqué mais je n'ai pas besoin d'ouvrir le fichier suivi adm, il est ouvert par la personne qui le rempli, mais juste aller chercher les infos dedans Embarassed

Il est probable que le code change ?

Merci d'avance

The Doude
Par Horny, le 11 Nov 2009, 12:31 Revenir en haut de page Répondre en citant

Salut,

Citation:
En te relisant ( ben oui faut que ça rentre ) je me suis aperçu que je me suis peut être mal expliqué mais je n'ai pas besoin d'ouvrir le fichier suivi adm, il est ouvert par la personne qui le rempli, mais juste aller chercher les infos dedans


En fait, la macro que tu as enregistrée comporte déjà la bonne fonction (que je ne connais pas par coeur, je n'ai pas encore eu à faire à des liaisons entre classeurs, ou alors je les code moi-même :p ), il suffit juste de remplacer le passage qui concerne le classeur que tu as spécifié lors de l'enregistrement de la macro, par Suivi_Adm_Sem_Name, qui est la variable que l'on définit juste au dessus et qui se charge, en gros, de remplacer le numéro du classeur par celui du classeur prep sem qui est en train d'être utilisé...

Si tu n'est pas sûr, tu peux copier/coller le code complet de la macro, ça sera plus simple pour moi plutôt que de tout faire de tête (je n'ai pas Excel ici Razz )

@+++
Par TheDoude, le 12 Nov 2009, 10:54 Revenir en haut de page Répondre en citant

Bonjour,

Ok il y a juste un truc qui me chiffonne, désolé de ne pas t'avoir tout dit, mais je découvre. En fait j'ai un dossier intitulé "Sources" où sont stocké mes 2 fichiers. Ensuite je copie/colle et renomme le fichier suivi adm sem xx dans un dossier intitulé Sem xx, puis je copie/colle et renomme le fichier feuille prep Sem xx dans un autre dossier Sem xx puis je lie les 2 avec la fonction liaison modifier la source. Tout cela pour te dire que le chemin dans mon fichier source où se trouve la macro et qui fonctionne est différent une fois que j'ai fait ma manip. Exemple joint:

'\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\[Fichier de suivi adm - Sem 00.xls] ça c'est le chemin pour le fichier source et voici le chemin du fichier copié:

'\\S_reims1\exploit\QUICK UF\PREPARATION QUICK\Sem 46\[Fichier de suivi adm - Sem 46.xls]

et voici le code de la macro (sans les modifs que tu m'as indiqué):

ChDir "\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille"
ActiveWorkbook.ChangeLink Name:= _
"\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls" _
, NewName:= _
"\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls" _
, Type:=xlExcelLinks

Voilà comme ça tu as tous les éléments

Merci

TheDoude
Par Horny, le 12 Nov 2009, 21:25 Revenir en haut de page Répondre en citant

Salut,

Si j'ai bien compris, à la fin du copié/collé de chaque fichier "source" (qui sert de modèle, toujours si j'ai bien compris), tu as 2 fichiers, dans 2 répertoires distincts, que tu désire lier ?

Ca semble faisable, la seule chose qui m'interpelle est
Code:

ChDir "\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille"
ActiveWorkbook.ChangeLink Name:= _
"\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls" _
, NewName:= _
"\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls" _
, Type:=xlExcelLinks


qui, à vue d'oeil, ne fait... rien Shocked En effet, Name et NewName ont la même valeur, ce qui me laisse penser que la liaison reste inchangée...
Enfin, essayons quand même, on va avoir besoin de 3 variables, écrivons donc:

Code:

Sub LinkSuiviPrep()

Dim Sem_Count
Dim NewLink As String

'tous les chemins doivent être entre guillemets ""
const OldLink =   "\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls"   'mettre ici le chemin source du fichier d'origine: "\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls"
NewLink = "\\S_reims1\[...]\Fichier de suivi prep - Sem  "         'mettre ici le chemin du fichier prep en cours, sans le numéro: "\\S_reims1\[...]\Fichier de suivi prep - Sem  ", avec un espace à la fin   

'on reprend ensuite le code qui permettait d'avoir le numéro de la semaine, à partir du classeur Suivi adm ouvert (donc, après copié/collé et renommage)
Sem_Count = Left(Right(ThisWorkbook.Name,6), 2)    'récupération du numéro à partir du nom du classeur actif: on prend les 2 premiers caractères ("xx") des 6 derniers caractères du nom du classeur, extension incluse ("xx.xls")

'on recrée le chemin vers le fichier prep sem, en concaténant le chemin, le numéro, et l'extension, ".xls"
NewLink = NewLink & Sem_Count & ".xls"

'enfin, on actualise le lien
ActiveWorkbook.ChangeLink Name:= OldLink, NewName:= NewLink, Type:=xlExcelLinks

End Sub


And, voilà !

[EDIT] bouh bouh bouh, c'est pas très lisible le code, mes commentaires sont trop longs Razz
Heureusement, sous l'éditeur de macros (alt+F11), ça devrait être plus simple, surtout avec les mots en couleurs Very Happy[/EDIT]


@+++
Par TheDoude, le 13 Nov 2009, 10:06 Revenir en haut de page Répondre en citant

Bonjour,
Je vois que tu as tout compris Cool , c'est bien ça je copie les deux fichiers dans des dossiers différents.
Je pense que si Name et New Name ont la même valeur, c'est parce que dans la source tout est à zéro et quand tu fais la liaison ça reste à zéro.
Dis moi si je me trompe.
Le seul truc qui m'interpelle, c'est que dans le chemin, je dois indiquer le Nom du dossier et celui-là change toutes les semaines.
'\\S_reims1\exploit\QUICK UF\PREPARATION QUICK\Sem 46\[Fichier de suivi adm - Sem 46.xls]
Cet exemple est pour cette semaine la prochaine fois ce sera 47. Que mets-je dans le chemin Crying or Very sad ?
Sinon j'ai copié le code et je m'en vais le tester, je te tiens au courant.

Merci encore
Par Horny, le 13 Nov 2009, 18:01 Revenir en haut de page Répondre en citant

Salut,

Citation:
Le seul truc qui m'interpelle, c'est que dans le chemin, je dois indiquer le Nom du dossier et celui-là change toutes les semaines.
'\\S_reims1\exploit\QUICK UF\PREPARATION QUICK\Sem 46\[Fichier de suivi adm - Sem 46.xls]
Cet exemple est pour cette semaine la prochaine fois ce sera 47. Que mets-je dans le chemin


Ah, j'avais prévenu qu'il pouvait y avoir des coquilles Laughing
En fait j'ai supprimé une ligne un peu vite hier en écrivant le code, revoici donc une version qui prend en compte le numéro de semaine dans le chemin:


Code:

Sub LinkSuiviPrep()

Dim Sem_Count
Dim Chemin As String
Dim NewLink As String

'tous les chemins doivent être entre guillemets ""
const OldLink =   "\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls"   'mettre ici le chemin source du fichier d'origine: "\\S_reims1\exploit\EXPLOITATION\QUICK\Sources\Source Fille\Fichier de suivi adm - Sem 00.xls"
Chemin = "\\S_reims1\exploit\QUICK UF\PREPARATION QUICK\Sem "   'attention, il faut laisser l'espace à la fin

'on reprend ensuite le code qui permettait d'avoir le numéro de la semaine, à partir du classeur Suivi adm ouvert (donc, après copié/collé et renommage)
Sem_Count = Left(Right(ThisWorkbook.Name,6), 2)    'récupération du numéro à partir du nom du classeur actif: on prend les 2 premiers caractères ("xx") des 6 derniers caractères du nom du classeur, extension incluse ("xx.xls")

'on recrée le chemin vers le fichier prep sem, en concaténant le chemin, le numéro, et l'extension, ".xls"
NewLink = Chemin & Sem_Count & "\" & "Fichier de suivi prep - Sem " & Sem_Count   & ".xls"   'toujours pareil, on laisse l'espace en fin de chaîne

'enfin, on actualise le lien
ActiveWorkbook.ChangeLink Name:= OldLink, NewName:= NewLink, Type:=xlExcelLinks

End Sub


Ca devrait aller mieux Rolling Eyes

@+++
Par TheDoude, le 16 Nov 2009, 11:22 Revenir en haut de page Répondre en citant

Bonjour,

Bon je n'ai plus qu'à essayer et je te tiens au courant.

Merci d'avance

TheDoude
Par TheDoude, le 16 Nov 2009, 14:33 Revenir en haut de page Répondre en citant

Bonjour,

J'ai fait la manip, mais quand je cliques sur mon bouton mettre à jour, il ne se passe rien Crying or Very sad

Bizarre ....

@+
Par Horny, le 16 Nov 2009, 18:07 Revenir en haut de page Répondre en citant

Salut,

Citation:
J'ai fait la manip, mais quand je cliques sur mon bouton mettre à jour, il ne se passe rien


La macro doit être lancée depuis le classeur Suivi semaine adm xx, une fois que les fichiers ont été copiés/collés à leur emplacement (sous dossier avec le numéro de la semaine en cours).

Vérifie également que les chemins d'accès sont bons (pas d'espaces en trop / manquants...)

Y'a pas de raisons, normalement...

@+++

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Mise à jour classeur à l'aide d'une macro · Envoyer le lien