Macro à appliquer
étiboom
Messages postés
36
Statut
Membre
-
étiboom Messages postés 36 Statut Membre -
étiboom Messages postés 36 Statut Membre -
J'ai cette maccro qu'un ami m'a filer mais il est très caler en excel et a dû penser que je comprendrais facilement, mais voilà que je n'y vois pas très clair. Elle est censer aller chercher le chemin d'acces de mes fichiers liés à mon classeur puisque c'est sur un autre serveur et que ca ne peut se faire automatiquement.
Merci à tout ceux qui y passeront du temps
Macro:
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
Merci à tout ceux qui y passeront du temps
Macro:
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
A voir également:
- Macro à appliquer
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Application pour apprendre à coder - Guide
- Appliquer un style word - Guide
1 réponse
Coucou,
je ne peux pas tout t'expliquer mais voici ce que tu peux faire pour mieux comprendre.
Tu ouvres ton classeur excel, tu ouvres vba mais de manière à pouvoir voir ton classeur excel.
Dans vba, tu positionnes ton curseur en dessous de Sub changementliaison()
et tu appuies sur F8.
Tu verras une ligne jaune apparaître. Appuie sur F8 jusqu'à la fin, la ligne jaune est la ligne qui va être traité.
Cela te permet de voir ce que fait la macro pas à pas.
je ne peux pas tout t'expliquer mais voici ce que tu peux faire pour mieux comprendre.
Tu ouvres ton classeur excel, tu ouvres vba mais de manière à pouvoir voir ton classeur excel.
Dans vba, tu positionnes ton curseur en dessous de Sub changementliaison()
et tu appuies sur F8.
Tu verras une ligne jaune apparaître. Appuie sur F8 jusqu'à la fin, la ligne jaune est la ligne qui va être traité.
Cela te permet de voir ce que fait la macro pas à pas.
Tu m'as déjà aidé auparavant et je t'en remercie encore! ( une chance que des gens comme toi se promène sur les forums)
Le problème, lorsque je fais ce que tu me dis, c'est qu'il m'affiche le message :
Erreur de compilation :
Erreur de syntaxe
Et là on me surligne cette ligne (qui est la 5 ème, si tu te réfère à la macro que j'ai mit dans mon message)
FName = Application.GetOpenFilename("Microsoft Excel Files (*.xls),
Sérieux j'y comprend rien, mais je vois que ça doit pas être sorcier...
Merci pour ton temps :)
il avait fait une erreur.
remplaces :
FName = Application.GetOpenFilename("Microsoft Excel Files (*.xls),
*.xls", _
, "Browse...", , False)
par :
FName = Application.GetOpenFilename("Microsoft Excel Files (*.xls),*.xls", , "Browse...", False)
Tu as bien raison, cette ligne était mal rentré. Merci!! maintenant (quand je fait F8 ) il s'arrête 3 ligne plus bas :
Application.AskToUpdateLinks = False aLinks = wb.LinkSources(xlOLELinks)
Encore une fois, c'est une erreur de synthaxe... Merci de ton temps sérieusement c'est grandement apprécié mélanie1324!!!
Application.AskToUpdateLinks = False aLinks = wb.LinkSources(xlOLELinks)
mais a priori il s'agirait d'une mise à jour des liaisons, pour elle, il vaut mieux que tu fasses des recherches sur google.
Application.AskToUpdateLinks = False = wb.LinkSources(xlOLELinks) (elle est ok comme ça)
mais maintenant j'ai un questionnement sur des lignes où est inscrit des trucs (vert) du genre :
-' recherche du document à modifier
-'affichage du nombre de liaisons dans le document
je me demande ce que je dois leur faire? ( c'est comme si la macro passait par dessus dans l'exécution)
ET
que dois-je entré dans la partie de l'ancien serveur a supprimer de cette ligne? je veux juste qu'il ouvre la boîte et fasse le chemin d'accès jusqu'à la liste des fichiers(tous placés dans le même document)
OldServer = InputBox("Entrez le nom du serveur que vous voulez supprimer ")
on dirait qu'il cherche quelque chose a supprimer, tout ce que je veux c'est "mettre à jour les liasons"
Merci