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

Résolu
Tom 44 Messages postés 47 Statut Membre -  
Tom 44 Messages postés 47 Statut Membre -
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

  • 1
  • 2
  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    X et Y ayant des noms aléatoires et comment l'utilisateur connait ces noms ????
    0
  3. Tom 44 Messages postés 47 Statut Membre
     
    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
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    enregistré par l'utilisateur via une extraction action faite dans le meme fichier excel que la recherche ???
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Tom 44 Messages postés 47 Statut Membre
     
    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
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Non, il manque le comment votre macro peut connaitre le fichier a chercher, puisque deux appli differentes !!!
    0
  8. Tom 44 Messages postés 47 Statut Membre
     
    La macro va "simplement" demander à l'utilisateur d'aller le chercher (par une fonction parcourir j'imagine) dans le répertoire le contenant.
    0
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  10. Tom 44 Messages postés 47 Statut Membre
     
    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
  11. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  12. Tom 44 Messages postés 47 Statut Membre
     
    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
  13. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

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

    Quel excel avez-vous ??
    0
  14. Tom 44 Messages postés 47 Statut Membre
     
    Oui pas de soucis.
    J'arrive à lire un code et à le déchiffrer "convenablement"

    Excel 2010
    0
  15. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  16. Tom 44 Messages postés 47 Statut Membre
     
    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
  17. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

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

    A+
    0
  18. Tom 44 Messages postés 47 Statut Membre
     
    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
  19. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  20. Tom 44 Messages postés 47 Statut Membre
     
    Excuse moi j'ai du passer cette question...
    Le fichier cible possède une extension .xls

    Et de nouveau merci pour ce code.
    0
  21. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  • 1
  • 2