Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Créer un classeur dans un répertoire OneDrive

Dudu2

XLDnaute Barbatruc
Bonjour,
J'ai un souci avec un code d'un utilisateur.
La création par VBA d'un classeur dans son répertoire C:\Users\<utilisateur>\OneDrive part en erreur 1004.

Je n'ai pas OneDrive et j'aimerais savoir s'il y a des restrictions d'écriture par le VBA ?



 

Gégé-45550

XLDnaute Accro
Bonsoir Dudu2,
sans certitude aucune mais il me semble bien qu'il faut convertir le chemin d'accès en chemin UNC.
À tester :
VB:
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function DavGetUNCFromHTTPPath Lib "Netapi32.dll" (ByVal Url As LongPtr, ByVal UncPath As LongPtr, lpSize As Long) As Long
#Else
    Private Declare Function DavGetUNCFromHTTPPath Lib "Netapi32.dll" (ByVal Url As Long, ByVal UncPath As Long, lpSize As Long) As Long
#End If
 
'-----------------------------------------------------------------------------------------
' Convertit un chemin SharePoint de type (http...) en chemin UNC (\\...)
' Le chemin retourné a un séparateur final si le chemin initial en avait un
'-----------------------------------------------------------------------------------------
Public Function getUNCPath(pPath As String) As String
Dim lPath As String
Dim lUncPath As String
Dim lSize As Long
lSize = 260 ' MAX_PATH
lPath = pPath & vbNullChar ' Chemin + caractère null de fin
lUncPath = Space(lSize) ' Buffer de réception
If DavGetUNCFromHTTPPath(StrPtr(lPath), StrPtr(lUncPath), lSize) = 0 Then
    ' 0 = pas d'erreur
    ' on reçoit dans lSize la taille du chemin UNC (séparateur de fin inclus)
    getUNCPath = Left(lUncPath, lSize - 1)
    ' Si le chemin initial avait un séparateur final, on en ajoute un
    If Right(pPath, 1) = "/" Or Right(pPath, 1) = "\" Then
        getUNCPath = getUNCPath & "\"
    End If
Else
    getUNCPath = pPath
End If
End Function
Cordialement,
 
Dernière édition:

dysorthographie

XLDnaute Accro
Il me semble que filePath = Environ("UserProfile") donne le chemin via onedrive pour ceux qui dispose de onedrive.

Chez l'utilisateur ça devrait donner
C:\Users\<utilisateur>\OneDrive

Et chez toi C:\Users\<utilisateur>
Je vérifie demain car là dodo.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…