Spécification et ouverture d'un fichier Excel par macro [Résolu/Fermé]

Signaler
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014
-
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014
-
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.

21 réponses

Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
Bonjour,

X et Y ayant des noms aléatoires et comment l'utilisateur connait ces noms ????
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

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.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
Re,

enregistré par l'utilisateur via une extraction action faite dans le meme fichier excel que la recherche ???
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

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.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
Re,

Non, il manque le comment votre macro peut connaitre le fichier a chercher, puisque deux appli differentes !!!
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

La macro va "simplement" demander à l'utilisateur d'aller le chercher (par une fonction parcourir j'imagine) dans le répertoire le contenant.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
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 !!!!!!
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

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.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
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 ????
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

Le fichier est une compilation de colonnes de données texte.
Ensuite ce fichier sera utilisé pour remplir certains champs d'un autre fichier.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
Re,

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

Quel excel avez-vous ??
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

Oui pas de soucis.
J'arrive à lire un code et à le déchiffrer "convenablement"

Excel 2010
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
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+
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

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.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
Re,

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

A+
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

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.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
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+
Messages postés
47
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
11 mars 2014

Excuse moi j'ai du passer cette question...
Le fichier cible possède une extension .xls

Et de nouveau merci pour ce code.
Messages postés
15732
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2021
1 481
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+