Ouverture fichier

Fermé
Tequillaman - 28 avril 2016 à 12:21
 tequillaman - 2 mai 2016 à 16:13
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



A voir également:

4 réponses

f894009 Messages postés 17240 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 18 février 2025 1 713
Modifié par f894009 le 28/04/2016 à 14:13
Bonjour,

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

Rectification, pas possible d'ouvrir un fichier avec le nom incomplet
0
Oui, erreur d'exécution 1004 doc1*.xls* introuvable
0
f894009 Messages postés 17240 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 18 février 2025 1 713 > Tequillaman
28 avril 2016 à 17:13
Re,

Donc, avoir le nom complet...
0
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié par cs_Le Pivert le 29/04/2016 à 18:28
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
30 avril 2016 à 08:35
Voici un autre exemple, ouvre le classeur aux modifications les plus récentes:

http://www.cjoint.com/c/FDEgIuFbyUQ
0
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