VBA Chemin d'accès d'un fichier stocké sous SharePoint ou Microsoft Teams
Pour le premier, peux-tu essayer sans le bloc if (en mettant en commentaire la ligne if dir et la ligne end if correspondante). Mais j'ai bien peur que tu obtiennes une erreur ensuite
J'ai essayé avec ta variante => Ca marche sans message d'erreur et ca ferme proprement
Par contre ca me transfert aussi tous les onglets
Le code ci-dessous :
Option Explicit
Sub EXTRACT_X_DRCL_28032021_2() 'Macro 16
Dim DerLig As Long, DLig As Long
Dim Ws As Worksheet
Dim chemin As String, Onglet As String, dossier As String
DerLig = 8
Onglet = Range("I2").Value 'Fait référence ici à la cellule I2 pour le choix de l'onglet
chemin = Range("D2").Value 'Fait référence ici à la cellule D2 du chemin complet vers le fichier source
Set Ws = ThisWorkbook.ActiveSheet
chemin = ConvertURLSharePoint2013(Ws.Range("D2").Value) 'on part du nom de chemin complet (brut) en D2
'If Dir(chemin) <> "" Then 'test existence
With Workbooks.Open(chemin)
With .Sheets(Onglet)
DLig = .cells(Rows.Count, 1).End(xlUp).Row
Ws.cells(DerLig, 1).Resize(DLig - 1, 9).Value = .Range("$A$2:$J$" & DLig).Value
End With
.Close False
End With
'End If
End Sub
'*****************************************************
Function ConvertURLSharePoint2013(slien$) As String
slien = Replace(slien, "https://", "")
slien = Replace(slien, "%20", " ")
ConvertURLSharePoint2013 = "\\" & Replace(Replace(slien, Split(slien, "/")(0), Split(slien, "/")(0) & "@SSL"), "/", "\")
End Function
'*****************************************************Pourtant l'onglet est déclaré via :
Onglet = Range("I2").ValueErreur de ma part, je n'avais pas effacer les info auparavant dans le fichier Cible
3GB >>>> Tu as réussi
Bon, je n'ai plus qu'à trouver une solution pour soit utiliser les adresses en Local , soit les adresses sous SharePoint, du genre :
Si l'adresse en D2 contient "https:" , on utilise la Macro 1, sinon la Macro 2
Ou alors je crées 2 Boutons (mais ce n'est pas tip top à mon gout pour les utilisateurs)
Super !
Je suis vraiment content que ça marche mais tout de même un peu déçu qu'on ne soit pas parvenus à utiliser la fonction Dir et à trouver une solution plus "universelle".
Donc, pour récapituler, tu ouvres le fichier correctement mais tu ne peux pas préalablement tester son existence avec la fonction Dir et la fonction d'Excel-Malin AssainirURL produit le contraire du résultat espéré... Ca mériterait quand même des essais.
Pour ton dernier souci, une simple condition devrait faire l'affaire. J'aurais tendance à la mettre directement dans la fonction :
Function ConvertURLSharePoint2013(slien$) As String
if slien like "https://*" then
slien = Replace(slien, "https://", "")
slien = Replace(slien, "%20", " ")
ConvertURLSharePoint2013 = "\\" & Replace(Replace(slien, Split(slien, "/")(0), Split(slien, "/")(0) & "@SSL"), "/", "\")
else
ConvertURLSharePoint2013 = slien
end if
End Function
'************Si le lien commence par https://, la fonction renvoie le lien converti, sinon elle renvoie le lien brut.
Et pour la Bretagne, je te prends au mot, surtout si tu vis dans le Morbihan, il arrive que j'y passe de temps en temps...
Trop bien oui
Je suis vraiment content que ça marche mais tout de même un peu déçu qu'on ne soit pas parvenus à utiliser la fonction Dir et à trouver une solution plus "universelle"
Ce qui est sure c'est que du coup le code a été sérieusement épuré
Pour mon souci N°2 : (j'aurai du clore le post précédent en résolu avant du coup), la ligne ci-dessous reste en rouge
if slien like "https://*" then<ej data-image="1f37e" style="background:url(https://forum.excel-pratique.com/template/img/emojis/1f37e.svg)"></ej>1) c'est quoi la partie ci-dessous, un émoticône ?
ej data-image="1f37e"2) si je laisse le code tel que, pour l'utiliser avec une adresse locale, et donc du coup, devoir utiliser : chemin, fichier, onglet ... la condition va surement évoluer
On va surement avoir un souci, mais ca vaut vraiment le coup d'essayer, je m'y colle
Et pour la Bretagne, je te prends au mot, surtout si tu vis dans le Morbihan, il arrive que j'y passe de temps en temps..
Cool je tiens le pari , j'y serai en retraite, pas de suite
1/ Oui, c'est l'émoticône bouteille de champagne (enfin de cidre) qui n'est pas passé et s'est en fait retrouvé dans le code sans que je le remarque
2/ La condition dans la fonction permet de ne remplacer que les liens https et de renvoyer les chemins locaux sans transformation. Ca devrait bien marcher.
L'idéal serait de pouvoir utiliser la fonction Dir avec les liens sharepoint et ainsi de pouvoir boucler sur les dossiers. J'imagine qu'il faut l'utiliser au bon moment (soit avant soit après "l'assainissement").
D'accord, je note ça dans mon agenda : crêpes et cidre à volonté dans 21 mois
1/ Oui, c'est l'émoticône bouteille de champagne (enfin de cidre) qui n'est pas passé et s'est en fait retrouvé dans le code sans que je le remarque
J'ai quand même eu un doute
D'accord, je note ça dans mon agenda : crêpes et cidre à volonté dans 21 mois
Comptes sur moi, je te le rappellerai avec grand plaisir en plus
2/ La condition dans la fonction permet de ne remplacer que les liens https et de renvoyer les chemins locaux sans transformation. Ca devrait bien marcher.
Les utilisateurs vont mettre le chemin en D2 ci-dessous :
\\srsdc107184x010\LR_PTF1\GPE\02_Design\B-Système\10. DR reviews\FBS 2.4 [CLM] Provide proper climate\SDRPour appeler par exemple le fichier via le .xls :
ENG-RSC-EN-SR-FRM-0015 2.4 Provide Proper Climate-26-03-2019.xlsxPour retrouver nos petits, il faudrait , je pense, alors "concaténer" Chemin suivant D2 + " \" + le fichier en .xls quelque part, genre :
slien = chemin & "\" & "*.xls"Du coup, j'ai tenté ca dans la fonction :
Function ConvertURLSharePoint2013(slien$) As String
Dim chemin As String
chemin = Range("D2").Value
If slien Like "https://*" Then
slien = Replace(slien, "https://", "")
slien = Replace(slien, "%20", " ")
ConvertURLSharePoint2013 = "\\" & Replace(Replace(slien, Split(slien, "/")(0), Split(slien, "/")(0) & "@SSL"), "/", "\")
Else
ConvertURLSharePoint2013 = slien
slien = chemin & "\" & "*.xls"
End If
End FunctionEt là : Erreur d'exécution 1004 : Excel ne peut pas accéder à "SDR" . Le document est peut être en lecture seule ou chiffré
Hors, je pouvais l'extraire avant via Macro
Salut Bernard,
La concaténation chemin & "\*.xls" s'utilise en argument de la fonction Dir afin de réaliser une filtre textuel sur les noms de fichiers contenus dans le répertoire chemin. Sinon, * est interprété comme un caractère normal...
De plus, la fonction ConvertURL ne tient jamais vraiment compte de la variable chemin dans ton code. Donc elle renvoie probablement slien (qu'il y ait transofrmation ou pas). J'imagine que slien a pour valeur le contenu de D2 qui est un chemin de répertoire, d'où l'erreur 1004.
Je te conseille de laisser la fonction telle qu'elle est et de ne pas y saisir d'éléments en dur autres que ceux permettant la conversion (https, %20 et @SSL en l'occurrence).
On sait que tu as une version qui permet d'ouvrir le fichier directement (donc avec un lien "trouvable"). C'est avec cette version qu'il faut faire des essais sur Dir (pour l'instant sur le chemin du fichier complet).
chemin = Range("D2").Value 'Fait référence ici à la cellule D2 du chemin complet vers le FICHIER SOURCE
Set Ws = ThisWorkbook.ActiveSheet
chemin = ConvertURLSharePoint2013(Ws.Range("D2").Value) 'on part du nom de chemin complet (brut) en D2
If Dir(chemin) <> "" Then msgbox "Dir fonctionne" else msgbox "Dir échoue"
With Workbooks.Open(chemin)
With .Sheets(Onglet)
DLig = .cells(Rows.Count, 1).End(xlUp).Row
Ws.cells(DerLig, 1).Resize(DLig - 1, 9).Value = .Range("$A$2:$J$" & DLig).Value
End With
.Close False
End With
End SubTu peux essayer de passer la ligne If Dir avant la ligne chemin = convertURL pour voir.
Si un de tes essais fonctionnait, on pourrait alors utiliser Dir sur le dossier avec le filtre...
Bonjour 3GB,
La concaténation chemin & "\*.xls" s'utilise en argument de la fonction Dir afin de réaliser une filtre textuel sur les noms de fichiers contenus dans le répertoire chemin. Sinon, * est interprété comme un caractère normal...
De plus, la fonction ConvertURL ne tient jamais vraiment compte de la variable chemin dans ton code. Donc elle renvoie probablement slien (qu'il y ait transofrmation ou pas). J'imagine que slien a pour valeur le contenu de D2 qui est un chemin de répertoire, d'où l'erreur 1004.Encore un truc de bon à savoir
Tu peux essayer de passer la ligne If Dir avant la ligne chemin = convertURL pour voir.
Si un de tes essais fonctionnait, on pourrait alors utiliser Dir sur le dossier avec le filtre...Je n'ai pas réussi à mettre au point cette condition, l'outil est déjà pas mal et on a super bien avancé
Je vais prévoir les 2 Macro à dispo, pour le "Local" ou pour "SharePoint" , je vais juste essayer de rassembler les 2 onglets d'extraction suivante , sur chacune de ces 2 premiers boutons, histoire d'éviter trop de clic à l'utilisateur
Je viens de travailler le fichier et visuellement ce n'est pas mal et c'est assez explicite
Je vais tenter avec ce type de code, je n'ai pas encore essayé :
Sub QUICK_MACRO_Local()
Call EXTRACT_X_DRCL 'Macro 11
Call EXTRACT_X_DRCL_OVERVIEW_23 'Macro 12
Call OIL_DR1 'Module 5
End Subil y a encore 4 autres Macro (j'commence à être un Geek
Je considère le post comme largement " Résolu" , et en profite pour encore te remercier de l'énorme aide que tu m'as apporté
Vraiment trop Top et en plus c'était très sympa nos discussions
Je teste la Macro "QUICK_MACRO_Local" et je reviens vers toi
Salut Bernard,
Je te remercie ! Oui, c'était un échange agréable et un sujet intéressant ! Désolé de ne pas avoir su répondre parfaitement à la demande (je suis un peu frustré, j'ai le sentiment que l'on était pas loin^^).
Sinon, je pense que ta macro QUICK_MACRO_Local fonctionnera correctement, surtout si les feuilles auxquelles appartiennent les éventuelles cellules manipulées sont bien indiquées.
Pour tes 4 macros qui dépendent d'un choix texte de OIL_DR1 : tu le sais peut-être déjà mais il est possible d'attribuer aux macros des paramètres, c'est-à-dire de rendre la macro fonction d'une ou plusieurs variables. Alors, ces macros paramétrées (qui sont comme des fonctions mais sans renvoyer de résultat) ne s'exécutent pas seules, elles doivent être appelées par une procédure parente.
Ex :
Sub macroparam(choixtexte as string)
msgbox choixtexte
end sub
sub main()
dim choix$
choix = inputbox("choix du texte")
call macroparam(choix)
end subCa permet de rendre le code dynamique en mettant tous les paramètres dont il dépend en variable. Ainsi l'exécution est cadrée et ses variations dépendent uniquement des valeurs rentrées en argument.
Par exemple, c'est un peu le cas avec la fonction ConvertURL. Et je pense qu'en mettant la bonne condition au sein de cette fonction, ça te permettra d'éviter la double macro et d'en avoir une seule valable en toutes circonstances.
Mais sinon, 2 macros, c'est très bien. C'est quand on commence à en avoir plusieurs qui font la même chose qu'il faut recourir à ce genre de solutions.
A bientôt,
Bonjour 3GB
Je te remercie ! Oui, c'était un échange agréable et un sujet intéressant ! Tout à fait, j'ai beaucoup appris durant ces agréables échanges
Désolé de ne pas avoir su répondre parfaitement à la demande (je suis un peu frustré, j'ai le sentiment que l'on était pas loin^^).Perso, je ne suis pas frustré, bien au contraire, on n'est pas loin c'est vrai et je vais essayer de faire "murir" mon outil , de part les utilisateurs et leurs ressentis . Pour ma part , tu as parfaitement répondu à mes problématiques
Sinon, je pense que ta macro QUICK_MACRO_Local fonctionnera correctement, surtout si les feuilles auxquelles appartiennent les éventuelles cellules manipulées sont bien indiquéesLà c'est un autre point du coup , je dois avoir des conflits avec certaines Macro utilisées sur les 2 Boutons "Quick macro 1" et "Quick macro 2" . Je pense que si je duplique et renomme certaines utilisées 2 fois, ca passera, pour le moment ce n'est pas encore le cas ; D'ailleurs tu le pressent trés bien avec ton commentaire ci-dessous :
Mais sinon, 2 macros, c'est très bien. C'est quand on commence à en avoir plusieurs qui font la même chose qu'il faut recourir à ce genre de solutionsMais bon, à ce jour c'est déjà superbe
Un grand Merci encore une fois à toi et à ce forum, ce type d'échange donne envie de pouvoir aider les autres