Sauvegarder en VBA sur Sharepoint
Résolustitchbouck Messages postés 137 Statut Membre -
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 !!
- Excel vba
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
3 réponses
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.
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 !
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 ?
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...