Vous utilisez VBA avec SharePoint et vos macros ne fonctionnent plus après une migration ?
C'est un problème assez fréquent: le code VBA qui fonctionnait avec SharePoint 2010 casse dès que l'on passe à SharePoint 2013 ou aux versions suivantes (2016, 2019, Subscription, Online).
Bonne nouvelle: il existe des solutions! Dans certains cas, il suffit de modifier la façon dont le chemin du fichier est écrit. Et aujourd’hui, avec SharePoint Online / Microsoft 365, d’autres méthodes sont même plus simples et plus fiables.
Sommaire
Prenons un exemple concret. On veut copier un fichier texte (C:\MonDossier\test.txt
) vers SharePoint.
Avant (SharePoint 2010), on utilisait un chemin de type :
//teamsites.monserveur.intranet/sites/mon-site/Shared Documents/mon-dossier/test.txt
Et ce code VBA fonctionnait :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub CopierFichierSharePoint2010() 'par: https://excel-malin.com On Error GoTo Erreur Dim MonFichier As String Dim DestinationSharePoint As String MonFichier = "C:\MonDossier\test.txt" DestinationSharePoint = "//teamsites.monserveur.intranet/sites/mon-site/Shared Documents/mon-dossier/test.txt" FileCopy MonFichier, DestinationSharePoint Exit Sub Erreur: MsgBox "Une erreur est survenue lors de la copie du fichier..." End Sub |
Mais en SharePoint 2013 (et suivants), le lien devient:
https://monserveur.net/sites/mon-site/Shared Documents/mon-dossier/test.txt
Si vous essayez ce chemin tel quel, le code plantera. La solution consiste à transformer le lien de manière suivante:
- Supprimer
https:
- Remplacer les
/
par des\
- Ajouter
@SSL
juste après le nom du serveur
Ce qui donne:
\\monserveur.net@SSL\sites\mon-site\Shared Documents\mon-dossier\test.txt
Avec ce format, votre code VBA peut continuer à fonctionner:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub CopierFichierSharePoint2013() 'par: https://excel-malin.com On Error GoTo Erreur Dim MonFichier As String Dim DestinationSharePoint As String MonFichier = "C:\MonDossier\test.txt" 'URL d'origine : "https://monserveur.net/sites/mon-site/Shared Documents/mon-dossier/test.txt" 'Transformée en : DestinationSharePoint = "\\monserveur.net@SSL\sites\mon-site\Shared Documents\mon-dossier\test.txt" FileCopy MonFichier, DestinationSharePoint Exit Sub Erreur: MsgBox "Une erreur est survenue lors de la copie du fichier..." End Sub |
Depuis quelques années, la majorité des entreprises utilisent SharePoint Online. Dans ce cas:
- Option 1: synchroniser la bibliothèque avec OneDrive >> vos fichiers deviennent accessibles par un chemin local classique (
C:\Users\…\SharePoint\
). - Option 2: télécharger un fichier par URL avec une fonction VBA comme
URLDownloadToFile
pour récupérer des documents ponctuels. - Option 3: automatiser l'envoi via Power Automate ou l'API Microsoft Graph (plus moderne, mais hors VBA pur).
Astuce : si vous restez en VBA pur, l'option "OneDrive synchro" est la plus simple : vous manipulez vos fichiers comme s'ils étaient sur le disque dur.
En cas de problèmes (alias "ça ne marche toujours pas")
- Vérifiez que le service WebClient est activé sur Windows.
Note importante : l’accès SharePoint via le protocole WebDAV repose sur le service Windows WebClient.
– Ce service est toujours présent dans Windows 10/11, mais souvent désactivé par défaut.
– Il peut être activé manuellement si nécessaire, mais cette solution est considérée comme obsolète et peut disparaître dans les futures versions de Windows.
– Si votre entreprise utilise déjà SharePoint Online, il est préférable d’opter pour la synchronisation OneDrive ou des solutions modernes (Power Automate, API Graph). - Supprimez les espaces ou caractères spéciaux dans le chemin (utilisez ma fonction
AssainirURL()
). - Attention aux accès protégés par MFA / SSO : dans ce cas, la synchro OneDrive reste la meilleure solution.
Conclusion
En résumé rapide:
- Pour SharePoint 2013/2016/2019, le format
\\@SSL\
permet de garder vos macros. - Pour SharePoint Online (M365), préférez la synchronisation OneDrive ou des outils modernes (Power Automate, Graph).
Vous évitez ainsi les plantages VBA et gagnez en fiabilité.
Pour aller plus loin en VBA…
Et pour finir, comme d'habitude, quelques autres articles qui pourraient vous servir.
- VBA: vérifier si un fichier sur internet existe / si une adresse URL est valide
- VBA: liste complète des fonctions disponibles
- Manipuler les fichiers avec VBA
- Envoyer un email avec Excel (VBA)
- RECHERCHEV en VBA (tutoriel)
- SOMME en VBA (plusieurs méthodes)
5 commentaires sur “VBA et SharePoint: transformer les liens de fichiers (2010 à Online)”
Bonjour,
Cela marche très bien mais le fichier arrive avec une petite flèche verte en bas à droite et il faudrait donc encore l'archiver pour le rendre visible aux autres. Pourquoi?
Merci
Damien
Bonjour Damien,
cela signifie que le fichier a le status "Check out". Ce qui veut dire qu'il n'est disponible que pour vous jusqu'à ce que vous changiez son status en "Check in".
Ce sont les joies de SharePoint…
Cordialement, Martin
Hello,
D'abord merci pour tous les tutos c'est top.
J'ai un problème lorsque j'essaie de télécharger n'importe quel fichier stocké sur le SharePoint de mon entreprise avec VBA.
Les fichiers sont corrompus quel que soit le type, impossible de les ouvrir.
J'utilise ce code pour le téléchargement des fichiers : https://excel-malin.com/codes-sources-vba/copier-fichier-sharepoint-vba/
Mettons que je veuille télécharger un pdf nommé "azer.pdf", situé dans un répertoire nommé "Fichiers"
Le lien du dossier SharePoint dans la barre d'adresse est :
'https://maboite.sharepoint.com/sites/Salles%20H24/BDD_PAD/Fichiers/Forms/AllItems.aspx
J'ai donc inscrit pour URL sur VBA : "\\maboite.sharepoint.com@SSL\sites\Salles H24\BDD_PAD\Fichiers\azer.pdf"
Mais rien ne se télécharge…
(J'ai essayé avec un espace et avec "%20" mais pas de différence).
Pour info, le lien que je trouve lorsque je "copie le lien" en cliquant sur le fichier pdf sur SharePoint est :
'https://maboite.sharepoint.com/:b:/r/sites/Salles%20H24/BDD_PAD/Fichiers/azer.pdf?csf=1&e=OK1D3V
Est ce que mon problème est lié a la différence entre les liens ?
Merci pour votre aide !
Bonjour Hugo,
désolé pour la réponse tardive…
Et si vous essayiez le lien suivant?
\\maboite.sharepoint.com@SSL\:b:\r\sites\Salles%20H24\BDD_PAD\Fichiers\azer.pdf
le
.../r/...
de votre lien signifie que le fichier est en lecture seule.Vos pourriez essayer aussi avec
... /s/...
à la place – cela veut dire que le fichier est partagé.J'espère que cela aide.
Sinon une autre possibilité:
– mettez un fichier Excel (quelconque) dans le même dossier.
– ouvrez Excel avec un fichier vierge
– lancez le "macro recorder"
– ouvrez le fichier excel qui se trouve dans le dossier sur SharePoint
– arrêtez le macro recorder et regardez le code VBA enregistré. Normalement, vous devriez y voir le chemin vers le fichier Excel tel que Excel lui-même l'utilise.
C'est donc cette forme-là qui devrait être la bonne et vous n'aurez qu'à la réutiliser et juste changer le nom du fichier vers votre PDF
Je suis curieux si un de mes conseils va marcher…
Cordialement, Martin
Bonjour Martin,
Merci beaucoup pour votre réponse !
Malheureusement, aucune des deux solutions n'a fonctionné…
Il ne se passe toujours rien lorsque je lance la macro avec le nouveau lien.
J'ai donc essayé de faire la manip' pour trouver manuellement le lien du fichier, mais rien ne s'affiche non plus sur l'enregistreur de macro (pour info j'utilise Excel 2013) :/
Bon après-midi,
Hugo