Chemin d'accès internet au lieu de local

Bonjour à tous,

Depuis que OneDrive à fait une mise à jour, tous mes liens local C: ne fonctionne plus puisqu'il va faire le chemin d'accès sur internet avec http... J'ai chercher et les solutions que les gens apportes ne fonctionne pas de mon côté (je vous joint le fier par la même occasion).

J'aime le principe que OneDrive maintenant nous pouvons travailler plusieurs sur le même fichier toute fois il faudrait que mes chemin d'accès fonctionne toujours haha. En ce moment dans mon module "Macro_DC", j'ai un "Sub Télécharger_DC" qui va chercher le chemin du fichier par la fonctionne ThisWoorkbook.Path. Toutefois comme expliqué il ne va plus le chercher localement, mais sur internet et ça me fait toujours un code d'erreur.

Pouvez-vous m'aider? Je suis avec Microsoft 365.

Rebonjour!

Je fais une petite mise à jour :

Je fouille beaucoup sur le sujet et le problème vient que la fonction ThisWorkbook.Path ne renvoie plus le chemin d'accès local C:, mais renvoie maintenant par default un chemin http:. Il semble que des fonctions existe, mais quand je les entre dans le module ça ne fonctionne pas plus. Exemple de fonction qu'il semble marcher en parti :

Function GetLocalFile(wb As Workbook) As String
    ' Set default return
    GetLocalFile = wb.FullName

    Const HKEY_CURRENT_USER = &H80000001

    Dim strValue As String

    Dim objReg As Object: Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    Dim strRegPath As String: strRegPath = "Software\SyncEngines\Providers\OneDrive\"
    Dim arrSubKeys() As Variant
    objReg.EnumKey HKEY_CURRENT_USER, strRegPath, arrSubKeys

    Dim varKey As Variant
    For Each varKey In arrSubKeys
        ' check if this key has a value named "UrlNamespace", and save the value to strValue
        objReg.getStringValue HKEY_CURRENT_USER, strRegPath & varKey, "UrlNamespace", strValue

        ' If the namespace is in FullName, then we know we have a URL and need to get the path on disk
        If InStr(wb.FullName, strValue) > 0 Then
            Dim strTemp As String
            Dim strCID As String
            Dim strMountpoint As String

            ' Get the mount point for OneDrive
            objReg.getStringValue HKEY_CURRENT_USER, strRegPath & varKey, "MountPoint", strMountpoint

            ' Get the CID
            objReg.getStringValue HKEY_CURRENT_USER, strRegPath & varKey, "CID", strCID

            ' Add a slash, if the CID returned something
            If strCID <> vbNullString Then
                strCID = "/" & strCID
            End If

            ' strip off the namespace and CID
            strTemp = Right(wb.FullName, Len(wb.FullName) - Len(strValue & strCID))

            ' replace all forward slashes with backslashes
            GetLocalFile = strMountpoint & Replace(strTemp, "/", "\")
            Exit Function
        End If
    Next
End Function

Elle me renvoie bien le chemin loacl, mais voici où maintenant j'ai un "bug" :

image

Visiblement, le chemin est local, mais la function MkDir pour créer un nouveau dossier avec le nom ne marche plus.

Bonjour Cédric,

Pour moi inutile d'utiliser toute cette usine à gaz

Essaye avec

Function GetLocalFile as String
  GetLocalFile = "C:\Users\" & VBA.Environ("USERNAME") & "\OneDrive\Dossier\Sous-dossier"
  ' Eventuellement on se place dedans
  MkDir "C:\Users\" & VBA.Environ("USERNAME") & "\OneDrive\Dossier\Sous-dossier"
End Function

A+

Bonjour BrunoM45,

Merci pour aide! Je ne suis pas le meilleur en VBA alors je ne suis pas certain de tous comprendre.

Toutefois je ne peux pas mettre un chemin d'accès pré-établi en indiquant textuellement le chemin puisque le fichier peut se retrouver à différent endroit. Donc la fonction ThisWorkbook.Path doit me renvoyer où il est, mais pas par le OneDrive ou Share pointe sinon c'est là que la "bug".

Bonsoir,

Je lis "j'ai un "Sub Télécharger_DC" qui va chercher le chemin du fichier par la fonctionne ThisWoorkbook.Path. Toutefois comme expliqué il ne va plus le chercher localement, mais sur internet et ça me fait toujours un code d'erreur."

Un OneDrive (cloud) est un lecteur synchronisé sur le poste (local)
Le dossier synchronisé en local est normalement toujours le même (donné par défaut par Crosoft)

Il s'agit du "C:\Users\CedL\OneDrive\"

Il suffit donc de déterminer le dossier du classeur pour avoir tout le chemin en local

A tester

Function GetLocalFile() As String
  Dim sPath As String, sPathOD As String
  ' déterminer le début du chemin
  sPathOD = "C:\Users\" & VBA.Environ("USERNAME") & "\OneDrive\"
  ' Trouver le bon chemin
  sPath = ThisWorkbook.Path
  Select Case True
    Case InStr(1, sPath, "441") > 0
      sPathOD = sPathOD & "441_Architecture\"
    Case InStr(1, sPath, "442") > 0
      sPathOD = sPathOD & "442_Mécanique\"
    Case InStr(1, sPath, "443") > 0
      sPathOD = sPathOD & "443_Structure\"
    Case InStr(1, sPath, "444") > 0
      sPathOD = sPathOD & "444_Civil\"
    Case InStr(1, sPath, "445") > 0
      sPathOD = sPathOD & "445_Interne\"
  End Select
  GetLocalFile = sPathOD
  ' Eventuellement on se place dedans
  MkDir sPathOD
End Function

A+

J'ai essayé et malheureusement ça ne fonctionne pas plus.

La première fonctionne que j'ai mis semble semi fonctionner puisque maintenant il m'écrit le bon chemin d'accès local par le C:. Toutefois, malgré que le chemin d'accès soit le bon il m'envoie quand même un message d'erreur 76 et dit ne pas trouver le chemin :

image image

Je suis complètement perdu là.

Bonjour Cédric,

Pour éviter toutes discussion inutile, merci de joindre la dernière version modifié de ton fichier anonymisé SVP

Je ne vois pas comment ut peux avoir cette valeur dans DA, alors qu'avant, tu as

DA = GetLocalFile(ThsiWorkbok) & "\441_ etc"

De plus cela veut dire que tu n'utilises pas la fonction que j'ai donné

A+

Bon matin!

Non effectivement et peut-être que je l'utilise mal, mais ça ne fonctionne pas du tous peut-être que tu pourrais me dire où je devrais l'utiliser adéquatement. Je te joint le fichier!

Re,

Comme nous ne connaissons pas ton fichier,
Il faudrait nous dire la procédure à suivre pour arriver à l'erreur

A+

Aucun problème.

UF_RegistreDC : Quand on ouvre ce UserForm (à partir de la première feuille du classeur) il y a une ListBox où on peut simplement double cliqué sur la directive DC-A01 pour ouvrir cette dernière dans un autre UserForm.

UF_Directive : Maintenant dans ce UserForm, il y a des commandes sur le côté gauche d'un l'un est le téléchargement. En cliquant sur cette commande un UserForm ouvre indiquant si on veut la directive uniquement ou la directive avec la soumission. On clique sur le premier bouton en partant de la gauche inscrit Directive uniquement. Une confirmation est demandé et on clique sur oui tout simplement.

Le bug apparait là. Quand on clique sur débogage il met l'erreur que j'ai montré soit l'erreur 76 et il dit qu'il ne trouve pas le chemin d'accès pourtant quand on regarde le chemin est bon et le dossier est bien nommé 441_Architecture. C'est là que je ne comprends plus du tous pourquoi il ne trouve plus le chemin d'accès.

Re,

Merci, voici ce que j'ai dans le chemin lorsque je suis le cheminement

D:\Users\BrunoM45\Documents\XLP\CedL\projet-gestion-des-directives.xlsm\441_Architecture\DC-A01

Pour commencer, le nom du classeur est en trop donc de mon côté erreur également

Voici le fichier modifié selon ce que j'en déduis

A tester

Bonjour BrunoM45,

Pardonne moi pour le délai ça n'arrête pas de mon côté!

Première des choses, tu as raison je n'avais pas remarqué, mais il inscrit le nom du fichier dans le chemin d'accès, ça ne pouvait bien pas fonctionné. J'ai tenté de trouver le problème, mais c'est beaucoup trop avancé pour que j'en comprenne quelque chose encore. J'ai testé ta fonction également et message d'erreur, la fonctionne trouve C:/user/cedri, mais ensuite plus rien et recommence au dossier 441_Architecture...

Sur internet, on me renvoie toujours au code initial que j'ai mis, mais comme tu m'as fait remarqué il renvoie le nom du fichier comme si c'était un dossier. Ça fonctionnerait si ce n'était que de ça!

Salut Cédric,

Quand je vois un chemin

C:/user/cedri

ce n'est pas possible sur PC, il faut donc faire un REPLACE()

A+

Tu me fais pensé à quelque chose avec la fonction Replace! Vu que le problème du chemin d'accès actuellement est le fait qu'il prend le nom du fichier comme si c'était un dossier. J'ai donc changé mon code pour :

DA = Replace(GetLocalFile(ThisWorkbook), ThisWorkbook.Name, "") & "441_Architecture\" & ActiveSheet.Name

Ce qui me donne le chemin d'accès suivant : C:\Users\cedri\OneDrive\LAROSE\7000 RECHERCHE ^0 DÉVELOPPEMENT\7200 PROJET EN DÉVELOPPEMENT\GESTION DES DIRECTIVES\441_Architecture\DC-A01

Le chemin d'accès est exactement le bon, mais il m'indique encore une erreur 76 comme quoi que le chemin n'est pas bon... C'est à n'y rien comprendre.

Je te rejoind mon classeur, j'ai fait des tests avant sur la première feuille "GESTION DES DIRECTIVES". À la cellule E30 j'ai fait faire un ThisWorkbook.Path bien standard et la cellule E32 la formule plus haut. Ce que je remarque comme différence sont les "/" versus "\". Est-ce que tu crois que ça peut avoir une incidence?

Re,

Je viens de me rendre compte que si je retire du code les fonction Dir et MkDir, tous fonctionne parfaitement avec ThisWorkbook.Path! Ce qui veut dire que dans le code Dir ou MkDir il est incapable de trouver le chemin d'accès. C'est cette fonction qui ne fonctionne plus va savoir pourquoi.

Ça ici fonction A1 :

                Rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                ThisWorkbook.Path & "\441_Architecture\" & ActiveSheet.Name & "\" & Sheets("REGISTRE | DC").Range("B5").Value & "_" &                 ActiveSheet.Range("I14") & " - Directive", Quality:= _
                    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                    OpenAfterPublish:=True

Mais ça non :

            If ActiveSheet.Name Like "DC-A*" Then
                    If Dir(ThisWorkbook.Path & "\441_Architecture\" & ActiveSheet.Name, vbDirectory) <> vbNullString Then
                    Else
                        MkDir (ThisWorkbook.Path & "\441_Architecture\" & ActiveSheet.Name)
                    End If

C'est vraiment la fonction Dir et MkDir qui ne comprend pas le chemin puisque j'ai tenter uniquement :

MkDir (ThisWorkbook.Path & "\441_Architecture\" & ActiveSheet.Name)

Pour voir ce que ça donnait et ça ne marche pas, mais si j'utilise seulement :

ThisWorkbook.Path & "\441_Architecture\" & ActiveSheet.Name

Ça fonctionne!

C'est dommage qu'il ne créer plus le dossier par lui-même, mais ça sera un moindre mal que de le faire avant, ça évitait également les erreurs de transcription.

Rechercher des sujets similaires à "chemin acces internet lieu local"