Ouverture fichier

Tequillaman -  
 tequillaman -
Bonjour,
Je souhaite ouvrir un fichier dont je ne connais que partiellement le nom.
Voila mon code
Dim chemin as string
Chemin = " x:\doc\"
Workbooks.open filename:=chemin & menu.saisie.text & "*.xls*"

Menu.saisie.text c'est le champs du userform utilisé pour taper le nom du fichier

J'ai une erreur a chaque fois a cause des * qui se mettent dans le nom au lieu de servir a accepter que le nom du fichier continu.
Si je saisi doc1 il recherche doc1*.xls* alors que je veut doc1_fab.xlsx

Merci pour vos lumières

4 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Y a un message d'erreur ou pas ???

    Rectification, pas possible d'ouvrir un fichier avec le nom incomplet
    0
    1. Tequillaman
       
      Oui, erreur d'exécution 1004 doc1*.xls* introuvable
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Tequillaman
         
        Re,

        Donc, avoir le nom complet...
        0
    2. Tequillaman
       
      La fin du nom est aleatoire, seul la première partie est connu, c'est pourquoi je voulais utiliser les asterisk comme en recherche pour windows. C'est pas possible?
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour à tous,

    Si la 1ère partie du nom est connu, voici une macro qui va t'afficher le nom de tous les fichier commençant par ce nom dans un répertoire que tu auras choisi. Ensuite avec un double clic tu pourras ouvrir le classeur qui t’intéresse.

    Mettre dans la feuille où vont s'afficher les données:

    Option Explicit
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    nom = Target.Value
    If Range("C1") = "" Then Exit Sub
    chemin = Range("C1") & "\"
     Workbooks.Open chemin & nom 'on ouvre le classeur si existant
    End Sub
    


    Dans un module standard:

    Option Explicit
    Public chemin As String, nom As String


    Insérer un UserForm y mettre un bouton avec ce code:

    Option Explicit
    Private Sub CommandButton1_Click()
     'Nécessite d'activer la référence "Microsoft Scripting RunTime"
        'allez dans Outils Références et cocher "Microsoft Scripting RunTime"
        
        Dim Fso As Scripting.FileSystemObject
        Dim FileItem As Scripting.File
        Dim Tableau()
        Dim Plage As Range
        Dim m As Integer, i As Integer
        Dim z As Byte, Valeur As Byte
        Dim Cible As Variant
    SelectionDossier_source
    nom = Application.InputBox("Entrez le nom")
      nom = Dir(chemin & "\\" & nom & "*")
       Range("C1") = chemin & "\"
      'Boucle sur les fichiers
        Do
      m = m + 1
            ReDim Preserve Tableau(1 To 2, 1 To m)
            Tableau(1, m) = nom
     
            Set Fso = CreateObject("Scripting.FileSystemObject")
            Set FileItem = Fso.GetFile(chemin & "\" & nom)
     
            'Récupère la date de création
            Tableau(2, m) = Left(FileItem.DateCreated, 10)
            'Pour récupérer la date de dernière modification
            'Tableau(2, m) = Left(FileItem.DateLastModified, 10)
            'Pour récupérer la taille du fichier
            'Tableau(2, m) = Left(FileItem.Size, 10)
     
            nom = Dir
        Loop Until nom = ""
     
     
        '---Trie les fichiers par ordre décroissant de création ---
        Do
            Valeur = 0
            For i = 1 To m - 1
                If CDate(Tableau(2, i)) < CDate(Tableau(2, i + 1)) Then
                    For z = 1 To 2
                        Cible = Tableau(z, i)
                        Tableau(z, i) = Tableau(z, i + 1)
                        Tableau(z, i + 1) = Cible
                    Next z
     
                    Valeur = 1
                End If
            Next i
        Loop While Valeur = 1
     
     
        '--- Transfère les données dans la feuille de calcul ---
        Set Plage = Worksheets("Feuil1").Range("A1")
        Set Plage = Plage.Resize(UBound(Tableau(), 2), UBound(Tableau()))
        Plage = Application.Transpose(Tableau())
     Worksheets("Feuil1").Columns("A:B").AutoFit
    End Sub
    Sub SelectionDossier_source()
    With Application.FileDialog(msoFileDialogFolderPicker)
            'Définit un titre pour la boîte de dialogue
            .Title = "Choisissez le dossier des classeurs à rechercher"
            'Affiche la boîte de dialogue
            .Show
     'Affiche le nom du dossier sélectionné
            If .SelectedItems.Count > 0 Then
                chemin = .SelectedItems(1)
              End If
       End With
    End Sub
    


    Voir le fichier exemple:

    http://www.cjoint.com/c/FDDqB41cWQQ

    @+ Le Pivert
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Voici un autre exemple, ouvre le classeur aux modifications les plus récentes:

    http://www.cjoint.com/c/FDEgIuFbyUQ
    0
  4. tequillaman
     
    Merci pour ta réponse mais je voudrais que ce soit transparent pour les utilisateurs. donc je voudrais que si il écrit dans le userform 61117, que sa poursuive ma macro et que sa ouvre le fichier 61117 9lnw33.xlsx, que ma macro copie les données voulue et referme le fichier après. de plus, je peut avoir des fichiers en xls ou xlsx c'est pour cela que je voulais utiliser l'asterisk.

    Private Sub Valider_Click()
    Dim CHEMIN As String
    Dim FICHIER As String
    CHEMIN = "C:\Users\xx\Documents\premiers tests\test recup\test\New folder\"
    FICHIER = CHEMIN & menu.saisie.Text & ".xlsx"
    ' Dim choix
    ' vérification de l'existance du fichier
    If Dir(FICHIER) = "" Then
    ' message erreur si il n'existe pas
    MsgBox "le fichier est introuvable"
    ' Si ok ouverture du fichier
    Else
    Workbooks.Open Filename:=FICHIER

    ' copie et colle cellules

    Sheets("RESUM").Select
    Range("A2,B2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2,p2,q2,r2,s2,t2,u2,v2,w2,x2,y2,Z2").Select
    Selection.Copy
    Windows("test.xls").Activate
    Range("A65000").End(xlUp).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    ' Pour fermer le fichier .xls
    Workbooks(menu.saisie.Text & ".xlsx").Close SaveChanges:=False

    End If
    End Sub


    mon code fonctionne si je tape le nom complet et que mon fichier est bien un .xlsx
    mais j'ai des fichiers .xls
    0