Sauvegarder en VBA sur Sharepoint

Résolu
stitchbouck Messages postés 135 Date d'inscription   Statut Membre Dernière intervention   -  
stitchbouck Messages postés 135 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour !

Je patauge dans la semoule... je suis sur Excel 365

Nos fichiers vont migrer sur Sharepoint, et nous aurons donc une synchronisation avec OneDrive vers un dossier local pour chaque utilisateur.

Les macros de sauvegarde et de mail avec PJ vont poser problème : elles utilisent d'habitude un chemin d'accès fixe, identique pour tous, vers un dossier partagé sur serveur.

J'avais donc : Dir = "P:\Achat\Magasin\MESSAGERIE\Archivage\"

Avec la migration, c'est donc une version locale qui sera régulièrement ouverte, le chemin d'accès dépendra donc de l'utilisateur...

Exemple "C:\Users\stitchbouck\Groupe\Achats - Documents\Magasin\MESSAGERIE\Archivage\"

Je cherche donc une solution pour rendre variable le chemin d'accès selon l'utilisateur qui ouvre le fichier, en allant récupérer l'utilisateur actif du fichier. J'imaginais une variable "MonID" à insérer pour faire :

Dir = "C:\Users\" & MonID & "\Verdannet\Achats - Documents\Magasin\MESSAGERIE\Archivage\"

Bon, mes différents essais de codes pris de droites et de gauches ne vont pas, je ne suis pas assez fort dans ce domaine pour piger ce que je fais... Voici le code. 

Sub Savepdf()
'Enregistrement en PDF

'Chemin d'accès pour l'enregistrement"
Dim Dir, Dir2 As String
Dim MonID As String

MonID = ThisWorkbook.UserName
Dir = "C:\Users\"
Dir2 = "\OneDrive - groupe\Achats - Documents\Magasin\MESSAGERIE\Archivage"
'Nom à donner au fichier
Dim DLig As Long, Nom As String

'variable du nom du destinataire
Dim DEST As String
If Sheets("MESSAGERIE").Range("F12") <> "" Then
DEST = Range("c12") & " " & Range("c13")
End If

If Sheets("MESSAGERIE").Range("F19") <> "" Then
DEST = Range("c12") & " " & Range("c13") & " + " & Range("c19") & " " & Range("c20")
End If

If Sheets("MESSAGERIE").Range("F26") <> "" Then
DEST = Range("c12") & " " & Range("c13") & " + " & Range("c19") & " " & Range("c20") & " + " & Range("c26") & " " & Range("c27")
End If

If Sheets("MESSAGERIE").Range("F33") <> "" Then
DEST = Range("c12") & " " & Range("c13") & " + " & Range("c19") & " " & Range("c20") & " + " & Range("c26") & " " & Range("c27") & " + " & Range("c33") & " " & Range("c34")
End If



'établissement du nom à donner
Nom = "Bordereau de messagerie " & DEST & " " & Format(Now(), "YYYY-mm-DD") & ".pdf"

Dim Rec As String
Rec = Dir & MonID & Dir2 & Nom
Sheets("MESSAGERIE").ExportAsFixedFormat Type:=xlTypePDF, _
     Filename:=Rec, _
     Quality:=xlQualityStandard, _
     IncludeDocProperties:=True, _
     IgnorePrintAreas:=False, _
     OpenAfterPublish:=False


End Sub

Ou bien je me trompe d'approche, il faut inclure une URL pour modifier à la source, sur Sharepoint directement ?

Merci pour l'aide !! 

3 réponses

thev Messages postés 1982 Date d'inscription   Statut Membre Dernière intervention   711
 

Bonjour,

Vous êtes-vous bien renseigné au niveau de votre service informatique ?

La bonne solution pour ne pas perturber l'existant était d'installer le OneDrive uniquement sur le serveur pour synchroniser avec le SharePoint, les postes clients passant toujours par le serveur pour accéder au SharePoint. 

Donc maintien du lecteur P et des adresses actuelles.


0
stitchbouck Messages postés 135 Date d'inscription   Statut Membre Dernière intervention   2
 

Merci beaucoup pour ce retour !

je vais me renseigner mais de toute évidence, actuellement, ça ne fonctionne plus, donc quoi qu'ils aient fait, ça ne convient pas au vba :)

Je demande, merci !

0
stitchbouck Messages postés 135 Date d'inscription   Statut Membre Dernière intervention   2
 

Bonjour,

Pour le moment je n'ai pas de réponse.

Par contre j'ai pu avancer sur le code, et je tombe sur un nouvel os.

J'ai à présent trouvé comment récupérer mon nom de fichier local : 

Sub Savepdf()
'Enregistrement en PDF

'Chemin d'accès pour l'enregistrement"
Dim Dir, Dir2 As String
Dim nomUtilisateur As String
nomUtilisateur = Environ("USERNAME")



Dir = "C:\Users\"
Dir2 = "\groupe\Achats - Documents\Magasin\MESSAGERIE\Archivage\"
'Nom à donner au fichier
Dim DLig As Long, Nom As String

'variable du nom du destinataire
Dim DEST As String
If Sheets("MESSAGERIE").Range("F12") <> "" Then
DEST = Range("c12") & " " & Range("c13")
End If

If Sheets("MESSAGERIE").Range("F19") <> "" Then
DEST = Range("c12") & " " & Range("c13") & " + " & Range("c19") & " " & Range("c20")
End If

If Sheets("MESSAGERIE").Range("F26") <> "" Then
DEST = Range("c12") & " " & Range("c13") & " + " & Range("c19") & " " & Range("c20") & " + " & Range("c26") & " " & Range("c27")
End If

If Sheets("MESSAGERIE").Range("F33") <> "" Then
DEST = Range("c12") & " " & Range("c13") & " + " & Range("c19") & " " & Range("c20") & " + " & Range("c26") & " " & Range("c27") & " + " & Range("c33") & " " & Range("c34")
End If



'établissement du nom à donner
Nom = "Bordereau de messagerie " & DEST & " " & Format(Now(), "YYYY-mm-DD") & ".pdf"

Dim Rec As String
Rec = Dir & nomUtilisateur & Dir2 & Nom
Sheets("MESSAGERIE").ExportAsFixedFormat Type:=xlTypePDF, _
     Filename:=Rec, _
     Quality:=xlQualityStandard, _
     IncludeDocProperties:=True, _
     IgnorePrintAreas:=False, _
     OpenAfterPublish:=False


End Sub

Et ça fonctionne, youpi.

Par contre je me complique la tâche : j'ai changé de nom de famille. Donc pour les collègues, ça roule mais pas pour moi...

Du coup, mon dossier local est sur mon ancien nom et mon log office 365 est sur le nouveau.

j'ai essayé 

If Environ("USERNAME") = "j.aaa" Then nomUtilisateur = "j.bbb"
End If

et

If nomUtilisateur = "j.aaa" Then nomUtilisateur = "j.bbb"
End If

mais il ne reconnait pas le bloc If ! 

help ?

0
stitchbouck Messages postés 135 Date d'inscription   Statut Membre Dernière intervention   2
 

Bon ben j'ai trouvé une solution... Sans passer par USerName, j'utilise simplement l'adresse en HTTPS de sharepoint.

Je ne sais pas pourquoi ça n'a pas fonctionné au début, mais maintenant ça fonctionne et c'est le principal.

Par contre, on en epeut pas utiliser la commande

ActiveWorkbook.SaveCopyAs Filename:=Rec

Je ne peux utiliser que la version SaveAs, ce qui modifie le nom du fichier dans lequel on se trouve. Moindre mal.

Bonne continuation, problème résolu...

0