Spécification et ouverture d'un fichier Excel par macro

Résolu/Fermé
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014 - 8 oct. 2013 à 18:27
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014 - 9 oct. 2013 à 16:21
Bonjour,

Ne maîtrisant pas vraiment le codage VBA, je me permets une nouvelle fois à faire appel à vos services.

J'essaye de mettre au point une macro qui me permettrai de demander (par msgbox) à l'utilisateur d'un classeur excel d'aller chercher sur un répertoire X un fichier Y (X et Y ayant des noms aléatoires)

Voici ce que j'ai tenté mais je me retrouve avec un soucis lors de la spécification de l'emplacement du fichier cible : en effet je ne peux spécifier que le dossier contenant ce fichier.
Ce qui m'intéresserai serait plutôt d'aller chercher directement le fichier cible.

Sub Acces

Dim Repertoire As FileDialog

Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)

If Repertoire.Show Then

Range("U26") = Repertoire.SelectedItems(1)

Else
Exit Sub
End If

End Sub

Auriez vous une idée de correction ?

Merci par avance.
A voir également:

21 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2013 à 11:49
Re,

question: l'extension du fichier .txt ou ???

code a mettre dans un module:

Sub MaProcedure()
Dim NomFichier As String

NomFichier = RechercheFichier()
If NomFichier = "" Then
MsgBox "Vous n'avez sélectionné aucun fichier"
Else
'Workbooks.Open NomFichier
End If
End Sub

Function RechercheFichier() As String
Dim fd As FileDialog
Dim NomFichier As String

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "fichier txt", "*.txt"
.Title = "Recherche de fichier"
'mettre le chemin du repertoire
.InitialFileName = "d:\_cles\"
End With
If fd.Show = -1 Then NomFichier = fd.SelectedItems(1)

RechercheFichier = NomFichier
Set fd = Nothing
End Function
1
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2013 à 08:11
Bonjour,

X et Y ayant des noms aléatoires et comment l'utilisateur connait ces noms ????
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 08:21
Bonjour,

X est le dossier conteneur du fichier cible.
Y est le fichier cible préalablement enregistré par l'utilisateur via une extraction d'une autre appli.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2013 à 08:30
Re,

enregistré par l'utilisateur via une extraction action faite dans le meme fichier excel que la recherche ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 08:44
Pour faire simple :

Un utilisateur extrait des données (classeur excel) via une application autre que MSO.
Ces données sont enregistrées sur un classeur Excel (Y) dans un répertoire (X).

Le but c'est que la macro (insérée dans un classeur (Z)) puisse demander à un utilisateur "autre" d'aller chercher ce fichier (qui je rappelle à un nom aléatoire) dans le répertoire concerné.

J'espère que l'explication est assez claire pour compléter ma demande.

Merci par avance.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2013 à 08:59
Re,

Non, il manque le comment votre macro peut connaitre le fichier a chercher, puisque deux appli differentes !!!
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 09:06
La macro va "simplement" demander à l'utilisateur d'aller le chercher (par une fonction parcourir j'imagine) dans le répertoire le contenant.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2013 à 09:22
Re,

Vous ne repondez pas a la question. La macro ne peut pas demander de chercher un fichier si informatiquement elle ne le connait pas !!!!!!
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 09:28
Re,

Ne serait il pas possible qu'une macro ouvre une boite de dialogue demandant à un utilisateur de parcourir "manuellement" son disque local ou réseau afin d'y aller chercher un fichier donné à choisr là aussi "manuellement" ?

Désolé pour les explications non fructueuses.

Et encore merci pour votre patience.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 9/10/2013 à 09:36
Re,

Désolé pour les explications non fructueuses. Y a pas de lezard.

Oui, c'est faisable.

Question subsidiaire: le fichier a ouvrir est de quel type ??? texte ou ???? et que voulez-vous en faire: simple consultation ou ????
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 09:39
Le fichier est une compilation de colonnes de données texte.
Ensuite ce fichier sera utilisé pour remplir certains champs d'un autre fichier.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 9/10/2013 à 09:42
Re,

Ne maîtrisant pas vraiment le codage VBA vous apprenez vite et sans probleme ????

Quel excel avez-vous ??
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 09:46
Oui pas de soucis.
J'arrive à lire un code et à le déchiffrer "convenablement"

Excel 2010
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2013 à 10:09
Re,

Deux phases: recherche et ensuite import

1/pour chercher un fichier (une des facon de faire, adaptez le type de fichier):

https://www.developpez.net/forums/d485262/logiciels/microsoft-office/excel/macros-vba-excel/getopenfilename-nom-fichier-format/

dans l'exemple, il n'y a pas le dossier par defaut, nous verrons apres. Le fichier ne sera pas a ouvrir mais a importer.

2/ pour importer un fichier: utilisez l'enregistreur de macro en faisant une importation avec Donnees, importation a partir du texte et modifiez le code avec le resultat de la recherche.

commencez par ces sujets. Je dois m'absenter une heure ou deux, si vous le voulez je vous retrouve pour la suite.

A+
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 10:58
Merci pour ce lien très utile.

Ma macro donne donc ceci :

Sub Acces()

Dim Repertoire As FileDialog
Dim NomFichier As String

Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)

If Repertoire.Show = -1 Then NomFichier = Repertoire.SelectedItems(1)

RechercheFichier = NomFichier
Set Repertoire = Nothing

End Sub

Par contre je ne vois toujours pas les fichiers contenus dans le repertoire choisi.
J'ai bien testé avec la manip de la touche F5, mais rien n'y fait...

Auriez vous une solution à cette difficulté ?

Merci par avance.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2013 à 11:42
Re,

Les raccourcis c'est bien, mais faut un juste milieu. Je vous complete un exemple de code.

A+
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 14:38
Parfait le code est juste ce qu'il me fallait.
Merci beaucoup.

Par contre comment puis-je faire pour que le fichier selectionné s'ouvre et reste actif ?

J'ai l'impression que la macro ne "stocke" pas le nom du fichier et du coup je n'arrive pas à passer par un code du type :

Workbooks.Open Filename:="*.xls"

Auriez vous la solution finale à ce sujet ?

Merci encore pour votre aide.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 9/10/2013 à 14:59
Re,

je repete la question: l'extension du fichier .txt ou ???


pas passer par workbooks.open. Nommez un onglet Affichage de votre fichier excel. Le fichier "texte" sera importe voir Sub Import_Fichier(Rep_Fich, Chemin_Complet), sera surement a adapter.

Code plus evolue:

Sub MaProcedure()
Dim Chemin_et_Fichier As String, Fichier As String, Rep_Fichier As String

'recuperation du chemin et nom de fichier
Chemin_et_Fichier = RechercheFichier(Rep_Fichier)
'extraction du nom de fichier
Fichier = Right(NomFichier, Len(Chemin_et_Fichier) - Len(Rep_Fichier))
If Chemin_et_Fichier = "" Then
MsgBox "Vous n'avez sélectionné aucun fichier"
Else
'import fichier
Call Import_Fichier(Rep_Fichier, Chemin_et_Fichier)
End If
End Sub

Sub Import_Fichier(Rep_Fich, Chemin_Complet)
'penser a nommer un onglet Affichage"
Worksheets("Affichage").Activate
'Efface le contenu de toutes les cellules de l'onglet actif
Cells.ClearContents

'Importation du fichier texte a afficher, premiere cellule a remplir: A2
'la base du code est obtenu avec l'enregistreur de macro et travaile en fonction
'du besoin: noms de ficher et repertoire changeant en fonction de la date
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Chemin_Complet, Destination:=Range("$A$1"))
.Name = Fichier
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False 'pas d'ajustement des colonnes
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlMSDOS 'format txt msdos
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSpaceDelimiter = True 'delimiteur espace
.TextFileColumnDataTypes = Array(xlTextFormat) 'definition format colonnes
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub

Function RechercheFichier(Rep_Fich) As String
Dim fd As FileDialog
Dim NomFichier As String

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "fichier txt", "*.txt"
.Title = "Recherche de fichier"
'mettre le chemin du repertoire
.InitialFileName = "d:\_cles\"
End With
If fd.Show = -1 Then
NomFichier = fd.SelectedItems(1)
Rep_Fich = fd.InitialFileName
End If

RechercheFichier = NomFichier
Set fd = Nothing
End Function

A+
0
Tom 44 Messages postés 47 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 11 mars 2014
9 oct. 2013 à 15:08
Excuse moi j'ai du passer cette question...
Le fichier cible possède une extension .xls

Et de nouveau merci pour ce code.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 9/10/2013 à 15:25
Re,

le code importation ne marchera pas pour un ficher xls

code adapter pour fichier xls


Sub MaProcedure()
Dim Chemin_et_Fichier As String, Fichier As String, Rep_Fichier As String

'recuperation du chemin et nom de fichier
Chemin_et_Fichier = RechercheFichier(Rep_Fichier)
If Chemin_et_Fichier = "" Then
MsgBox "Vous n'avez sélectionné aucun fichier"
Else
'ouverture ficher selectionne
Workbooks.Open (Chemin_et_Fichier)
End If
End Sub

Function RechercheFichier(Rep_Fich) As String
Dim fd As FileDialog
Dim NomFichier As String

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "fichier xls", "*.xls"
.Title = "Recherche de fichier xls"
'mettre le chemin du repertoire
.InitialFileName = "d:\_cles\"
End With
If fd.Show = -1 Then
NomFichier = fd.SelectedItems(1)
Rep_Fich = fd.InitialFileName
End If

RechercheFichier = NomFichier
Set fd = Nothing
End Function

A+
0