Habituellement, j'utilise ce morceau de code pour récupérer le contenu d'un dossier dans VBA. Mais cela ne fonctionne pas dans le cas d'un sharepoint. Comment puis-je faire ?
Dim folder As folder
Dim f As File
Dim fs As New FileSystemObject
Set folder = fs.GetFolder("//sharepoint.address/path/to/folder")
For Each f In folder.Files
'Do something
Next f
MODIFIER (après un bon commentaire de shahkalpesh):
Je peux accéder au point de partage si j'entre l'adresse dans l'Explorateur Windows. L'accès au point de partage nécessite une authentification, mais il est transparent, car il repose sur la connexion Windows.
Le seul moyen que j'ai trouvé pour travailler avec des fichiers sur SharePoint tout en ayant des droits de serveur est de mapper le dossier WebDAV sur une lettre de lecteur. Voici un exemple d'implémentation.
Ajoutez des références aux bibliothèques ActiveX suivantes dans VBA:
wshom.ocx
) - pour WshNetworkscrrun.dll
) - pour FileSystemObjectCréez un nouveau module de classe, appelez-le DriveMapper
et ajoutez le code suivant:
Option Explicit
Private oMappedDrive As Scripting.Drive
Private oFSO As New Scripting.FileSystemObject
Private oNetwork As New WshNetwork
Private Sub Class_Terminate()
UnmapDrive
End Sub
Public Function MapDrive(NetworkPath As String) As Scripting.Folder
Dim DriveLetter As String, i As Integer
UnmapDrive
For i = Asc("Z") To Asc("A") Step -1
DriveLetter = Chr(i)
If Not oFSO.DriveExists(DriveLetter) Then
oNetwork.MapNetworkDrive DriveLetter & ":", NetworkPath
Set oMappedDrive = oFSO.GetDrive(DriveLetter)
Set MapDrive = oMappedDrive.RootFolder
Exit For
End If
Next i
End Function
Private Sub UnmapDrive()
If Not oMappedDrive Is Nothing Then
If oMappedDrive.IsReady Then
oNetwork.RemoveNetworkDrive oMappedDrive.DriveLetter & ":"
End If
Set oMappedDrive = Nothing
End If
End Sub
Ensuite, vous pouvez l'implémenter dans votre code:
Sub test()
Dim dm As New DriveMapper
Dim sharepointFolder As Scripting.Folder
Set sharepointFolder = dm.MapDrive("http://your/sharepoint/path")
Debug.Print sharepointFolder.Path
End Sub
Utilisez le chemin UNC plutôt que HTTP. Ce code fonctionne:
Public Sub ListFiles()
Dim folder As folder
Dim f As File
Dim fs As New FileSystemObject
Dim RowCtr As Integer
RowCtr = 1
Set folder = fs.GetFolder("\\SharePointServer\Path\MorePath\DocumentLibrary\Folder")
For Each f In folder.Files
Cells(RowCtr, 1).Value = f.Name
RowCtr = RowCtr + 1
Next f
End Sub
Pour obtenir le chemin UNC à utiliser, allez dans le dossier de la bibliothèque de documents, déroulez le menu Actions et choisissez Ouvrir dans l'Explorateur Windows. Copiez le chemin que vous y voyez et utilisez-le.
En plus de:
myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")
remplacer également l'espace:
myFilePath = replace(myFilePath, " ", "%20")
À mon humble avis, le moyen le plus cool est de passer par WebDAV (sans dossier réseau, car cela n'est souvent pas autorisé). Cela peut être accompli via des objets de données ActiveX comme indiqué dans cet excellent article excellent article (le code peut être utilisé directement dans Excel, utilisé récemment le concept).
J'espère que cela t'aides!
http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-Microsoft-Word-visual-basic/
le lien d'origine est mort, mais au moins le contenu textuel est toujours disponible sur archive.org: http://web.archive.org/web/20091008034423/http://blog.itwarlocks.com/2009/ 04/28/accès-webdav-dans-Microsoft-Word-visual-basic
Je me suis un peu amusé avec ce problème et j'ai trouvé une solution très simple à 2 lignes, remplaçant simplement le 'http' et toutes les barres obliques comme ceci:
myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")
Cela pourrait ne pas fonctionner pour tout le monde, mais cela a fonctionné pour moi
Si vous utilisez un site sécurisé (ou souhaitez répondre aux deux), vous pouvez ajouter la ligne suivante:
myFilePath = replace(myFilePath, "https:", "")
J'ai passé un peu de temps sur ce problème - j'essayais de vérifier qu'un fichier existait avant de l'ouvrir.
Finalement, j'ai trouvé une solution utilisant XML et SOAP - utilisez la méthode EnumerateFolder et récupérez une réponse XML avec le contenu du dossier.
J'ai blogué à ce sujet ici .
Drive mappage vers sharepoint (également https)
Obtenir le contenu du point de partage a fonctionné pour moi via le lecteur mappé en l'itérant comme un objet de système de fichiers; l'astuce consiste à configurer le mappage: Copiez ensuite le chemin (ligne avec http *) (voir ci-dessous)
Utilisez ce chemin dans le lecteur de carte à partir de l'explorateur ou de la commande (c'est-à-dire Net Use N: https:://thepathyoujustcopied
) Remarque: https fonctionne correctement avec windows7/8, pas avec XP.
Cela peut fonctionner pour vous, mais je préfère une approche différente car les lettres de lecteur sont différentes sur chaque PC. L'astuce consiste à démarrer à partir de sharepoint (et non à partir d'un script VBA accédant à sharepoint en tant que serveur Web).
Configurer une connexion de données à la feuille Excel
Vous pouvez soit inclure cette requête dans vba, soit conserver le lien de base de données dans votre feuille de calcul, en itérant sur la table par VBA. Veuillez noter: l'image ci-dessus ne montre pas la connexion à la base de données réelle (texte de la commande), ce qui vous dirait comment accéder à mon point de partage.