Ouvrir un fichier Excel ayant une extension particulière [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
samedi 5 décembre 2015
Statut
Membre
Dernière intervention
17 janvier 2016
-
Messages postés
7
Date d'inscription
samedi 5 décembre 2015
Statut
Membre
Dernière intervention
17 janvier 2016
-
Bonjour,
Je n’arrive pas à ouvrir un fichier parmi d’autres dans un répertoire.
Ce fichier est au format « N° de série » + _jj_mm/aaaa ex : 666666_05_06_2015.
Le fichier recherché ne sera probablement pas enregistré à la date du jour.
Ma première recherche à consisté à rechercher le fichier concerné dans plusieurs sous dossiers et envoyer une boite de dialogue afin de savoir s’il existe et ça fonctionne mais ensuite je n’arrive pas à l’ouvrir, pouvez vous m’aider SVP?

Voici le début du code

Sub CommandButton1_Click()
Dim i As Long
Dim nom As String
Dim fs
Set fs = Application.FileSearch

'je recherche dans le dossier de tête parmi les sous dossiers existants avec Application.FileSearch

With fs
    .LookIn = "C:\Documents and Settings\xxxxxxx" 
    .SearchSubFolders = True

'je renseigne mon n° de fichier sans l'extension "DATE _jj_mm_aaaa" ex: 666666

    .Filename = Application.InputBox("Entrez le numéro de série") 
    If .Execute() > 0 Then
    MsgBox "There were " & .FoundFiles.Count & _
         " file(s) found."
        For i = 1 To .FoundFiles.Count
            MsgBox .FoundFiles(i)
        Next i
    Else
        MsgBox "There were no files found."
    End If
End With


'jusque cette fin de première partie le programme fonctionne mais ensuite, comment faire pour ouvrir le fichier "666666_jj_mm_aaaa" existant

Workbooks.Open Filename:=?????

End Sub

Merci

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

5 réponses

Messages postés
14717
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 septembre 2020
249
Arrives-tu déjà à trouver le nom du fichier qui t'intéresse ?
Messages postés
302
Date d'inscription
vendredi 20 février 2009
Statut
Membre
Dernière intervention
29 juillet 2020
10
Bonjour,
Ah j'avais mal lu, le problème est d'effectuer la sélection du fichier parmi ceux trouvés.
Pour faire cela en exploitant le code écrit ci-dessus, il faut créer une boîte de dialogue avec une liste déroulante.
Peut-être que ceci peut aider :
http://boisgontierjacques.free.fr/pages_site/formulairebases.htm#Lescontroles

Cela étant dit, il est plus habituel de faire sélectionner le fichier avec la boîte de dialogue système de sélection de fichier pour ouverture :
Application.GetOpenFileName


Au besoin ensuite consulter l'aide de Workbooks.Open pour voir si il y a quelque chose à dire d'autre que le nom du fichier (cela pour réagir au titre : fichier Excel ayant une extension particulière).

Souvent on met le nom du fichier dans une variable pour le cas où on ait un autre traitement à faire dessus avant l'ouverture.

Dim strCheminFichier As String
strCheminFichier = Application.GetOpenFileName()
If Nz(strCheminFichier, "")<>""
    WorkBooks.Open strCheminFichier
End IF


Sinon on pourrait concevoir le code :

WorkBooks.Open Application.GetOpenFileName()


mais avec ceci le cas où l'utilisateur a cliqué sur annuler est plus difficile à gérer proprement, d'où le passage par une variable chaîne de caractères.
Messages postés
7
Date d'inscription
samedi 5 décembre 2015
Statut
Membre
Dernière intervention
17 janvier 2016

pour information, le nom du fichier est connu partiellement avant de lancer la recherche, les 6 premiers chiffres sont connus, seule la seconde partie associée au format "date" n'est pas connue:
EX: 543764_03_12_2015 >> n'ayant pas la date précise de l'enregistrement "03_12_2015", je ne peux lancer cette recherche que sur la base "543764".
La recherche se fait dans plusieurs sous dossiers et plusieurs centaines de fichiers au même format.
Je voulais seulement pouvoir utiliser une Msgbox, y renseigner les 6 premiers chiffres seulement et arriver au final à ouvrir le fichier avec sa date associée mais ça ne marche pas.
le numéro à 6 chiffres correspond à un numéro de série et est unique.
Messages postés
302
Date d'inscription
vendredi 20 février 2009
Statut
Membre
Dernière intervention
29 juillet 2020
10
Bonjour,

A vérifier avec la doc : le filtre est à fournir dans le premier argument de GetOpenFileName.

Dim NumSer As String

NumSer = InputBox("Entrez le numéro de série : ")
strCheminFichier = GetOpenFileName("Fichiers de série " + NumSer, NumSer + "*.*")

Si on veut faire un contrôle de validité sur le numéro de série on peut faire une boucle mais on obtiendra un meilleur résultat en créant un formulaire de saisie (à la place de InputBox).
Messages postés
6919
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 septembre 2020
548
Bonjour,

Pour chercher un fichier, je t'ai déjà répondu ici:

https://forums.commentcamarche.net/forum/affich-32891349-comment-eviter-les-doublons-de-fichiers-au-format-date#1

il suffit juste de l'adapter comme ceci:

Dim chemin As Variant
Dim nom, result As String
chemin = "C:\Documents and Settings\"
nom = Application.InputBox("Entrez le numéro de série")
result = chemin & Dir(chemin & "\\" & nom & "*")
On Error Resume Next 'si pas de fichier existant
    Workbooks.Open result 'on ouvre le classeur si existant

Messages postés
7
Date d'inscription
samedi 5 décembre 2015
Statut
Membre
Dernière intervention
17 janvier 2016

Merci pour tout,
j'ai adapté le code de façon à pour aller ouvrir un fichier sans avoir le sous répertoire connu (parmi plusieurs sous répertoires existants) et ça fonctionne:

Voici le code

Sub import_Click()

'Ne pas ouvrir complètement la fenêtre pour copier les données
Application.ScreenUpdating = False

'rechercher dans tous les sous dossiers la fiche correspondante (fiche ou colis)
With Application.FileSearch
.NewSearch
.LookIn = "C:\Documents and Settings\xxxxxxxx" 'répertoire de recherche
.SearchSubFolders = True 'inclure les sous-dossiers
.Filename = Application.InputBox("Entrez le numéro du colis:", "IMPORT DES DONNEES") 'nom du fichier à ouvrir
.MatchTextExactly = True
.FileType = msoFileTypeExcelWorkbooks 'fichiers de type excel
If .Execute = 0 Then
MsgBox "Aucun colis correspondant." 'Si aucun colis correspondant alors message et sortie
Exit Sub
ElseIf .Execute = 1 Then 'si un colis alors

Workbooks.Open .FoundFiles(1) 'ouvrir la fiche du colis

Else
MsgBox "Vous devez saisir un numéro de colis!" ‘ Message si inputbox non renseigné et sortie
Exit Sub
End If
End With

'copie des données en partant de la fiche recherchée initialement
Sheets("xxxxxxxxx").Select ‘ouverture de la feuille où sont les données à copier
ActiveSheet.Range("A2:W2").Select
Selection.Copy
classeur1 = ActiveWorkbook.Name 'donner un nom au fichier afin de pouvoir le refermer plus tard

‘Dans le fichier déjà ouvert, dans lequel est cette macro (fichier : toto)
Workbooks("toto.xls").Activate
Sheets("blabla").Select ‘feuille blabla

'a partir de la ligne indiquée et vide, coller les données de la fiche
Range("A13").Select
Do While ActiveCell <> ""
ActiveCell.Offset(1, 0).Select
Loop
ActiveSheet.Select
ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

'refermer la fiche ouverte
Workbooks(classeur1).Activate
Workbooks(classeur1).Close

Application.ScreenUpdating = True
End Sub