Microsoft 365 Excel VBA: manipuler des fichiers partagés via Teams / Sharepoint

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Eric 888

XLDnaute Nouveau
Bonjour

J'ai développé une "mini-appli" Excel pour un suivi de facturation, rapprochements etc.

Le principe:
  1. l'utilisateur exporte des données de plusieurs sources, au format Excel ou CSV selon le cas, puis colle les fichiers résultant de l'export dans des dossiers dédiés.
  2. une macro, dans le classeur Excel de suivi de la facturation, parcourt les dossiers dédiés, liste les fichiers exports, et en copie les données dans le tableur de suivi
  3. une fois les données récupérées et traitées, la macro archive les fichiers exports (je mets un exemple de code utilisé par cette macro en fin de msg)
ce fonctionnement se justifie par l'impossibilité de produire des exports des différentes bases sources dans leur intégralité et de les utiliser comme classeurs liés pour alimenter le classeur de suivi: il permet d'agréger au fil du temps des exports partiels

la macro manipule des fichiers, or l'utilisateur appelle le classeur depuis son disque dur local synchronisé via OneDrive
pour contourner les incohérences entre adresse SharePoint et adresse locale quand le fichier est stocké dans un dossier synchronisé OneDrive, j'ai trouvé une fonction qui marche très bien:

VB:
Public Function GetLocalPath(Path As String, Optional OneDriveName As String) As String
  Dim LocalRootOneDrive As String
  Dim p As Integer
  Dim old_Path As String, new_Path As String
  If Len(OneDriveName) = 0 Then OneDriveName = "OneDrive"
  If Left(Path, 6) = "https:" Then
    LocalRootOneDrive = Environ(OneDriveName) & "\"
    p = InStr(1, Path, "/Documents") + 10
    old_Path = Left(Path, p)
    new_Path = Replace(Replace(Path, old_Path, LocalRootOneDrive), "/", "\")
    GetLocalPath = new_Path
   Else
    GetLocalPath = Path
  End If
End Function

tout ça fonctionne très bien tant qu'on n'a qu'un seul utilisateur et des fichiers stockés en local quoique synchronisés

problème:
  • il faudrait désormais que plusieurs utilisateurs puissent exploiter le classeur
  • l'outil maison pour ce genre de choses est Teams
  • j'ai créé une équipe et un canal Teams dédiés
  • j'ai dupliqué dans les fichiers partagés du canal Teams les différents dossiers et fichiers de la mini-appli (même arborescence, of course)
  • je tourne en rond sans réussir à adapter la fonction pour qu'Excel manipule des fichiers au sein de l'espace de partage du canal Teams
savez-vous si c'est possible? comment?

merci d'avance pour votre aide
Eric

pour info, le type de manipulation de dossiers / fichiers que j'utilise:
VB:
'/////////////////////////////////////////////////////////
'////////// BOUCLE POUR LE LISTING DES FICHIERS \\\\\\\\\\
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

'Initialisation de la variable
i = 1
    
'Changement de feuille Excel
Sheets("liste adhesions").Activate
Sheets("liste adhesions").Range("A:A") = ""

'Choix du répertoire dont on veut lister les fichiers
chemin = GetLocalPath(ThisWorkbook.Path) & "\Yapla_adhesions\"
fichier = Dir(chemin)
If fichier = "" Then GoTo alerte Else

'Boucle sur les fichiers du répertoire
Do While Len(fichier) > 0
    Range("A" & i).Value = chemin & fichier
    i = i + 1
    fichier = Dir()
Loop
    
'/////////////////////////////////////////////
'////////// traitement des fichiers \\\\\\\\\\
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    
For j = 1 To (i - 1)
    'Selection de la feuille
    Sheets("liste adhesions").Activate
    'recuperation du lien du fichier à compiler
    fichier = Range("A" & j).Value
    'Ouverture du fichier
    Workbooks.Open Filename:=fichier
    'Récupération du nom du fichier et de la dernière ligne avec des données
    fichier_a_rajouter = ActiveWorkbook.Name
    cell_max_source = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
    'copie des données
    Range("A2:AI" & cell_max_source).Select
    Selection.Copy
    'Changement de fichier
    Windows(fichier_reporting).Activate
    'Selection de la feuille
    Sheets("données adhesions").Activate
    'Recherche de la dernière cellule vide pour coller données ligne suivante
    cell_max = Sheets("données adhesions").Range("A" & Rows.Count).End(xlUp).Row
    Range("A" & (cell_max + 1)).Select
    'Collage des données
    ActiveSheet.Paste
    'Retour sur le fichier
    Workbooks(fichier_a_rajouter).Activate
    'Fermeture du fichier
    Application.CutCopyMode = False 'on vide le presse-papier pour éviter les messages d'alerte au moment de la fermeture du fichier
    ActiveWorkbook.Close SaveChanges:=False 'on n'enregistre pas le fichier: évite de lancer une boucle de synchronisation SharePoint (réapparition du fichier qu'on vient de supprimer, en raison d'une exécution de la macro plus rapide que la synchro)
    'Déplacement du fichier traité (on utilise copier supprimer pour pouvoir forcer les opérations)
    FSO.CopyFile fichier, chemin & "Fichiers traités\", True
    Kill (fichier)
  
Next j
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
37
Affichages
1 K
Réponses
3
Affichages
1 K
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
1 K
Retour