Macro Excel pour mise à jour de liaisons

Bonjour,

Actuellement en stage, j'ai besoin d'aide concernant la réalisation d'une macro.

Je dispose d'une fiche client ( https://www.excel-pratique.com/~files/doc2/Fiche_client_MTH_et_YAG.xls) dans laquelle est présent un tableau avec une liste de raisons de refus d'une proposition commerciale. A terme, plusieurs fiches clientes sont prévues. Je dirais une cinquantaine avec 10 feuilles chacune.

Mon souhait serait de faire des statistiques de ces raisons dans un fichier annexe (exemple : https://www.excel-pratique.com/~files/doc2/Test_total.xls). Jusque là pas de souci, je sais faire. Le problème apparaît quand mes fiches clientes sont fermées (après modification) et que j'ouvre mon fichier de statistique. Excel n'est pas capable de mettre à jour le fichier. Après recherche sur le net, je me suis rendu compte que seule une macro pouvait s'en occuper. Il me faudrait donc une macro qui ouvre toutes mes fiches à l'ouverture du fichier pour qu'il se mette à jour. Et l'idéal serait qu'elles se referment automatiquement (sinon, ça se fera à la main). Sur Internet, j'ai trouvé une macro pour l'ouverture des fiches et la mise à jour du fichier (http://support.microsoft.com/kb/19907/fr). Vous la trouverez ci-dessous. Seulement, vu mon expérience en macro, je suppose que je dois faire une mauvaise manipulation car cela ne fonctionne pas (je pense aussi qu'il faudrait l'adapter à mes fichiers : nom et emplacement notamment, mais je ne sais pas à quel endroit). Et j'ai beau faire des recherches, je ne sais pas comment faire.

Je voudrais donc savoir si vous pouvez jeter un coup d'oeil à la macro et voir ce qui cloche!

Merci beaucoup!!!!!

Sub changementliaison()

Dim FName As String, aLinks As Variant, wb As Workbook
Dim nomserveur, OldServer, Newlinks, OldDrive As String
Dim tempPath As String
Dim longueur As Integer, a As Integer, b As Integer

FName = Application.GetOpenFilename("Microsoft Excel Files (*.xls),
*.xls", _
, "Browse...", , False)
If FName = "False" Then Exit Sub

Set wb = Workbooks.Open(FName, UpdateLinks:=0)
Application.AskToUpdateLinks = False aLinks = wb.LinkSources(xlOLELinks)
' recherche du document à modifier

If Not IsEmpty(aLinks) Then
MsgBox wb.FullName & " Contient " & UBound(aLinks) & " Liaisons"
'affichage du nombre de liaisons dans le document
OldServer = InputBox("Entrez le nom du serveur que vous voulez
supprimer")
longueur = Len(OldServer)
For i = 1 To UBound(aLinks)

a = InStr(aLinks(i), "\\")
b = a + 2
nomserveur = Mid(aLinks(i), b, longueur)

If nomserveur = OldServer Then

If InStr(aLinks(i), "\\") > 0 Then

MsgBox "Ancien chemin unc de la liaison " & aLinks(i)

Newlinks = InputBox("Entrez le nom du nouveau serveur")

wb.ChangeLink aLinks(i), _
Application.Substitute(aLinks(i), _
OldServer, Newlinks, 1), xlOLELinks
Else

End If
Else
End If
Next i
wb.Save
End If
Application.AskToUpdateLinks = True

wb.Close False

End Sub

Bonjour yannick, forum,

Tu ne dis pas quels sont tous les fichiers qu'il faut ouvrir. De plus, la formule qui se trouve dans le fichier Test_total.xls était fausse, elle ne fait pas référence au fichier Fiche_client_MTH_et_YAG.xls.

Sinon, dans le 'ThisWorkbook' du fichier Test_total, mets ce code :

Private Sub Workbook_Open()

Application.ScreenUpdating = False
ChDir ThisWorkbook.Path
Workbooks.Open ("Fiche_client_MTH_et_YAG.xls")
Workbooks("Fiche_client_MTH_et_YAG.xls").Close

End Sub

Tous les fichiers doivent être dans le même répertoire.

Fichier :

https://www.excel-pratique.com/~files/doc2/Macro_excel_pour_mise_a_jour_de_liaisons.zip

Bonjour,

Parfait!!! C'est tout à fait ce que je souhaitais. Cela fonctionne parfaitement. Merci beaucoup.

Pour l'instant, je n'en étais qu'à l'étape du test, je n'avais donc qu'un seul fichier à ouvrir (Fiche_client_MTH_et_YAG.xls). A terme, il y aura des fiches clients par catégorie avec plusieurs clients dedans. Par exemple, fiche clients artisans et fiche clients collèges avec plusieurs feuilles reprenant chacune un artisan et un collège.

Pour la formule, je viens de me rendre qu'elle était effectivement fausse, désolé

En fait, j'ai tenté plusieurs choses avec un fichier test avant de poster. J'ai ensuite préféré poster le fichier original (Fiche_client_MTH_et_YAG.xls) plutôt qu'une copie modifiée (et j'ai oublié de remettre la bonne formule).

Dans tous les cas, encore merci! Je vais pouvoir finaliser mon projet (il ne me manquait que ce point!!!)

Re-bonjour,

En fait, il me reste encore un petit soucis. Si je laisse ouvert ma fiche client et que j'ouvre mon fichier statistique (Test total en l'occurence), un conflit se crée car la macro voudrait rouvrir la fiche. Certes, il lui suffit de répondre "non" à la boîte de dialogue et à arrêter le débogueur.

Je sais le faire, mais ce fichier restera dans l'entreprise et cette manoeuvre risque d'être inconnu pour certaines personnes (et embêtante en plus).

Serait-il possible de rajouter dans les lignes de code une condition? En l'occurence : si la fiche est ouverte alors ne rien faire.

J'en profite pour demander une petite vérification. Si je veux qu'il ouvre une autre feuille nommée "exemple", j'écris ceci :

Workbooks.Open ("exemple.xls")

Workbooks("exemple.xls").Close

avant cela:

Workbooks.Open ("E:\LDA 18\PAC\Market, fiches clients et arguments\Fiche client MTH et YAG.xls")

Workbooks("Fiche client MTH et YAG.xls").Close

Mais, si j'ai plusieurs feuilles à mettre, est-ce que je dois toutes les mettre à la suite? Ou y aurait-il une manière plus simple? Par exemple, demander à excel d'ouvrir tous les fichiers du dossier?

Merci d'avance pour tout (notamment pour le temps passé!!)

Rechercher des sujets similaires à "macro mise jour liaisons"