De plus en plus d'entreprises migrent leur SharePoint vers la version 2013 et les suivantes. Le problème est que le code VBA pour travailler avec des fichiers qui fonctionnait jusqu'à la version SharePoint 2010 ne fonctionne plus dans les versions plus récentes de SharePoint.
Vous n'arrivez plus à copier, supprimer, déplacer ou même à ouvrir dans VBA vos fichiers stockés sur SharePoint 2013/2016/2019/Subscription? Voici la solution…
Et la bonne nouvelle est qu'il ne faut même pas modifier votre code VBA. Il suffit de modifier, de manière très spécifique, le lien vers vos fichiers.
Transformer le lien pour le rendre utilisable en SharePoint 2013
Le plus simple pour expliquer cette solution est de le montrer sur un exemple. Prenons donc la situation suivante: on veut copier un fichier texte (" C:\MonDossier\test.txt ") sur le SharePoint. Dans SharePoint 2010, la destination aurait la forme suivante
" //teamsites.monserveur.intranet/sites/mon-site/Shared Documents/mon-dossier/test.txt "
On peut donc utiliser le code suivant:
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 dans le SharePoint 2013 et les suivants, le lien vers la destination ressemble à ceci:
" https://monserveur.net/sites/mon-site/Shared Documents/mon-dossier/test.txt "
Malheureusement, si vous utilisez un tel chemin dans le code VBA plus haut (écrit donc pour le SharePoint avant sa version 2013), cela ne fonctionnera pas. Et non, supprimer uniquement le "https:" ne fera pas l'affaire…
Cela donnera donc:
" https://monserveur.net/sites/mon-site/Shared Documents/mon-dossier/test.txt "
–> " \\monserveur.net@SSL\sites\mon-site\Shared Documents\mon-dossier\test.txt "
Avec l'adresse dans cette forme, vous pourrez continuer à utiliser vos codes VBA existants pour travailler avec des fichiers.
Pour en revenir à notre exemple, voici le code VBA qui fonctionnera lors d'utilisation du SharePoint 2013:
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" 'Destination URL = "https://monserveur.net/sites/mon-site/Shared Documents/mon-dossier/test.txt" ' => il est nécessaire de le transformer de manière suivante: DestinationSharePoint = "\\monserveur.net@SSL\sites\mon-site\Shared Documents\mon-dossier\test.txt" FileCopy MonFichier, DestinationSharePoint 'cette commande fonctionnera dans SharePoint 2013 Exit Sub Erreur: MsgBox "Une erreur est survenue lors de la copie du fichier..." End Sub |
En cas de problèmes alias "ça ne marche toujours pas"
Il est possible qu'il faille également supprimer les espaces et les caractères spéciaux de l'URL du fichier. Pour cela, vous pouvez utiliser la fonction VBA AssainirURL()
que je vous propose… Elle est très facile à utiliser et à intégrer dans votre Projet VBA.
Conclusion
Même si le problème semble assez grave au départ (impossible de gérer les fichiers) lors de la migration vers un SharePoint récent, la solution est relativement simple même si elle peut être fastidieuse (modification de toutes les adresses est nécessaire). Mais au moins, il n'est pas nécessaire de modifier la structure du code VBA.
Pour aller plus loin en VBA…
Pour finir, je vous propose quelques articles qui pourraient vous être utiles.
- VBA: vérifier si un fichier sur internet existe / si une adresse URL est valide
- VBA: liste de toutes les fonctions disponibles
- Manipulation des fichiers avec VBA
- VBA: envoyer un email à partir d'Excel
- Comment utiliser RECHERCHEV en VBA (tutoriel)
- Calcul de la SOMME en VBA (plusieurs manières selon la situation)
5 commentaires sur “VBA et SharePoint: Transformer les liens des fichiers”
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