Consolidation plusieurs fichiers - Chemin d'accès
Bonjour,
Je débute en VBA et j'ai quelques difficultés pour terminer ma macro.
Voici en quelques mots ce que je souhaite faire :
J'ai plusieurs fichiers Excel qui sont regroupés à un seul et même endroit (même dossier), qui ont la même architecture (même nombre de colonnes avec intitulés de colonnes identiques, cependant le nombre de lignes varie).
Je souhaiterai consolider dans un seul et même fichier Excel les données de tous les fichiers.
Le problème que je n'arrive pas à solutionner concerne le chemin d'accès car mes fichiers sont regroupés sur un serveur commun.
En effet, j'ai fait un fichier avec une macro (enregistré sur mon bureau) qui vient récupérer l'ensemble des données de plusieurs fichiers d'un dossier également enregistré sur mon bureau. La macro fonctionne. (en pièce jointe le document "Consolidation").
Le code est le suivant :
ChDir "C:\Users\simonf\Desktop\Test macro"
NomClasseur = Dir("C:\Users\simonf\Desktop\Test macro\*.xlsm")
While Len(NomClasseur) > 0
Application.DisplayAlerts = False
Workbooks.Open NomClasseur ' ouverture du classeur
LigneTotal = ActiveSheet.UsedRange.Rows.Count ' je récupère le nombre de lignes de données
Range("A4:AZ100").Copy ' je copie toutes les données de la feuille active
Workbooks("Consolidation.xlsm").Activate ' je reviens sur le classeur de départ
DerLigne = ActiveSheet.UsedRange.Rows.Count ' je recherche la dernière ligne vide de la feuille
Range("A" & DerLigne).Select ' je me positionne sur la dernière ligne vide
ActiveSheet.Paste ' je colle les données
Workbooks(NomClasseur).Close ' fermeture du classeur
NomClasseur = Dir ' je passe au prochain classeur
Wend
Ensuite j'ai essayé de modifier cette macro avec le chemin d'accès vers notre serveur. Et là impossible de trouver le bon code. (en pièce jointe le document "Consolidation_collab").
Voici le code:
Workbooks.Open Filename:= _
"
"
NomClasseur = Workbooks.Open("
")
Je joins également deux exemples de fichiers que je souhaite consolider (BMC et Bergamont).
Si quelqu'un a une solution je suis preneuse.
A dispo pour tout renseignement complémentaire car ce n'est peut être pas clair.
Merci d'avance pour votre aide.
Fanny
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Le "FileName" de la méthode Open doit indiquer le chemin complet du fichier à partir d'une unité disponible sur votre PC.
Cette unité peut être un lecteur local (par exemple, C:) ou un lecteur réseau (par exemple X:) qui correspond à un des serveurs de votre entreprise.
"
... Forms/Test" n'est pas un chemin de fichier mais une URL avec laquelle vous pouvez éventuellement télécharger le fichier sur votre PC et le placer dans l'emplacement de votre choix. Une fois cette opération effectuée, vous pouvez ouvir votre fichier à partir de l'emplacement que vous avez choisi.
Le plus simple est tout de même de disposer du lecteur réseau.
Bonjour,
Merci pour votre retour. Je ne trouve pas de lecteur réseau car cela est géré via internet.
Cependant, votre solution me convient, je téléchargerai les fichiers nécessaires sur l'URL pour les copier dans un dossier lorsque j'aurai besoin de lancer la macro.
Cordialement
Bonjour,
Je me permets de revenir sur ce sujet.
J'essaye de télécharger sur une url plusieurs fichiers d'un même dossier.
J'ai écris le code ci-dessous :
Sub telecharger()
Dim strURL As String
strURL = "
"
Workbooks.Open Filename:=strURL
End Sub
mais cela m'ouvre un fichier avec un message d'erreur "Sorry, something went wrong"
Le code focntionne si je lui demande d'ouvrir un dossier précis sur l'url ou si les documents que je souhaite ouvrir se trouvent sur mon PC.
Merci d'avance pour votre aide.
Cordialement
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Vous ne pouvez télécharger qu'un seul fichier à la fois.
ci-dessous exemple de code pour
1- télécharger le fichier et l'enregistrer en local dans "Mes Documents" sous le nom "votre_fichier.xlsm"
2- ouvrir dans votre classeur le fichier enregistré en local
Option Explicit
#If VBA7 Then
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As Long
#Else
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#End If
Sub Trait_fichier()
Dim emplacement As String, URL As String, nom_fichier As String
Dim code_retour As Integer
'// Assignation URL et emplacement
URL = "https://collabcenter.amersports.com/int ... st/fichier.xlsm"
emplacement = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
'// Téléchargement fichier
nom_fichier = emplacement & "\" & "votre_fichier.xlsm"
code_retour = URLDownloadToFile(0, URL, nom_fichier, 0, 0)
If code_retour = 0 Then MsgBox "Téléchargement effectué" Else Exit Sub
'// Ouverture fichier
Workbooks.Open Filename:=nom_fichier
End SubBonjour,
Merci pour votre retour. J'ai essayé le code mais j'ai un message d'erreur sur " code_retour = URLDownloadToFile(0, URL, nom_fichier, 0, 0)".
Si nous ne pouvons télécharger qu'un seul fichier à la fois, est-il possible de faire une boucle pour les ouvrir jusqu'au dernier ?
Merci
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Quel est le message d'erreur ?Merci pour votre retour. J'ai essayé le code mais j'ai un message d'erreur sur " code_retour = URLDownloadToFile(0, URL, nom_fichier, 0, 0)".
Si nous ne pouvons télécharger qu'un seul fichier à la fois, est-il possible de faire une boucle pour les ouvrir jusqu'au dernier ?
Bien sûr, mais il faudra à chaque itération, préciser le nom du fichier à télécharger.
"Quel est le message d'erreur ?
A mon avis, l'URL doit intégrer nom utilisateur et mot de passe."
=> la ligne est surlignée en jaune
"Si nous ne pouvons télécharger qu'un seul fichier à la fois, est-il possible de faire une boucle pour les ouvrir jusqu'au dernier ?"
le nom du 1er fichier, nombre de fichiers, l'ordre, etc n'est pas connu initialement et peut évoluer.
Est-il possible éventuellement d'avoir une macro qui ouvre le premier fichier du dossier sans que le nom soit spécifié ?
Merci d'avance
Fanny
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Est-il possible éventuellement d'avoir une macro qui ouvre le premier fichier du dossier sans que le nom soit spécifié ?
Compliqué avec une URL de type https://.... Le problème serait sans doute différent avec une URL de type ftp://...
[quote=Fannysi
post_id=704838 time=1541770498 user_id=59128]
j'ai un message d'erreur sur " code_retour = URLDownloadToFile(0, URL, nom_fichier, 0, 0)".
[/quote]
A priori, l'accès au fichier est conditionné par une identification (utilisateur + mot de passe) qui n'est pas enregistré sur votre PC.
Si c'est le cas, utiliser alors ce code en renseignant les informations d'indentification :
Sub OpenFileFromURL()
Dim emplacement As String, URL As String, nom_fichier As String
Dim WHTTP As Object
Dim no_fichier As Long
'// Assignation URL et emplacement
URL = "https://collabcenter.amersports.com/int ... st/fichier.xlsm"
emplacement = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
'// Téléchargement du fichier
Set WHTTP = CreateObject("Microsoft.XMLHTTP")
utilisateur = "": mot_de_passe = ""
WHTTP.Open "GET", URL, False, utilisateur, mot_de_passe
WHTTP.Send
'// Enregistrement du fichier à l'emplacement choisi si téléchargement OK
If WHTTP.Status = 200 Then
no_fichier = FreeFile()
nom_fichier = emplacement & "\" & "votre_fichier.xlsm"
Open nom_fichier For Binary Access Write As no_fichier
Put no_fichier, 1, WHTTP.ResponseBody
Close no_fichier
Set WHTTP = Nothing
Else
MsgBox "Echec téléchargement": Exit Sub
End If
'// Ouverture fichier
Workbooks.Open Filename:=nom_fichier
End SubBonjour,
merci pour le retour.
La manip ne fonctionne pas. J'ai vu avec notre service informatique et celui-ci a mis une sécurité supplémentaire pour les téléchargements sur le site.
Je vais opter pour un copier/coller des fichiers du serveur disponible en url dans un dossier de mon bureau et ensuite lancer la macro.
Cordialement