IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouvrir un fichier Excel dont le nom a une partie fixe et une autre variable


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Ouvrir un fichier Excel dont le nom a une partie fixe et une autre variable
    Bonjour,

    Je suis actuellement en stage ; Je dois faire du VBA et je ne peux pas faire autrement car il y a des milliers de fichiers :

    J'ai un petit problème car je souhaite ouvrir un fichier qui se trouve dans un répertoire et qui commence toujours par PKR_HIJ_1.xls ou PKR_HIJ_2.xls ou PKR_HIJ_3.xls ou PKR_HIJ_4.xls .
    Or Le terme HIJ peut changer mais il est toujours composé de 3 lettres mais j'ai déjà réglé ce problème. Le souci vient du fait que certaines personnes veulent rajouter des commentaires à la fin des fichiers comme par exemple : PKR_HIJ_1___(escalier).xls ; Je suis donc bloqué car j'ai fait une boucle qui fait varier le chiffre de 1 à 4 mais je ne peux pas trouver un fichier s' il y a un commentaire entre paranthèses. Est-il possible de faire une recherche approximative avec juste le début du fichier et ensuite d'ouvrir tous les fichiers qui commencent par PKR_HIJ_1....?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    regarde l'aide sur la méthode DIR dans ton VBA, et l'exemple qui va avec

    Tu peux utiliser PKR_HIJ_1* voir PKR_HIJ_* pour tes recherches, en fonction de l''existence ou non de fichier à ne pas sélectionner (PKR_HIJ_9 par exemple).

    Bonne journée.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    salut
    merci pour ta réponse , j'ai essayé avec l'étoile mais ça ne fonctionne pas...ou ma synthaxe n'est pas bonne , je ne sais pas!

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Alors pense à montrer ton code.... en utilisant les balises codes pour ce faire (Voir rêgles du forum).

    Parce que aider sans voir le code c'est
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    vOILa mon code VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for  ChiffreUnderscore = 1 to 4
    chantier = HIJ
     
    nomP3L = "P3L_" & Chantier & "_" & ChiffreUnderscore
     
    With Application.FileSearch
     
       For iSearch = 1 To .FoundFiles.Count ' la  boucle continuera tant qu'on trouve des fichiers P3L sur le disque programme
     
         If GetFileNameFromPath(.FoundFiles(iSearch)) Like "nomP3L*" Then ' si on trouve le fichier recherché
     
             Workbooks.Open Filename:=.FoundFiles(iSearch), UpdateLinks:=0, ReadOnly:=True

    merci d'avance pour ta réponse

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    A première vue, il manque les quotes autour de Hij, qui comme cela ne vaudra rien car cette variable n'existe pas.

    Donc Nomp3l vaudra P3L__1 !!!
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    oui désolé je les ai oubliées autour de HIJ car je l'ai rajouté aprés , mais ça c'est bon , le problème ne vient pas de là!

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Sans avoir vérifié l'usage de GetFileNameFromPath, petite correction pour ton Like:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If GetFileNameFromPath(.FoundFiles(iSearch)) Like nomP3L & "*" Then
    Je suis d'ailleurs étonné que tu n'aies pas suivi le conseil qui t'a été donné d'utiliser Dir.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, Une remarque pour DonGosma : je vois que tu utilises FileSearch, il serait peut-être prudent de ne pas l'utiliser car FileSeacrh n'est plus disponible à partir d'Excel 2007 et ainsi anticiper une migration possible de ton projet dans la boite ou tu fais ton stage
    voir http://silkyroad.developpez.com/vba/classefilesearch/ , il existe également des approches plus simples en adaptant par exemple http://www.developpez.net/forums/d20...feuille-excel/

  10. #10
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    FileSearch, il serait peut-être prudent de ne pas l'utiliser car FileSeacrh n'est plus disponible
    et pose des problèmes avec certaines options de XP sur les versions antérieures...


    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  11. #11
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Un petit exemple avec une fonction récursive pour la recherche des fichiers. Il est possible d'indiquer si la recherche doit être faite ou non dans les sous-dossiers. Un exemple à adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
    Sub Test()
     
        Dim I As Integer
        Dim T() As String
     
        T = DossierRecursif("D:\", "PKR_HIJ_1", True)
     
        For I = 1 To UBound(T)
        'adapter ici pour le traitement des fichiers
            Debug.Print T(I)
        Next I
     
    End Sub
     
    Function DossierRecursif(Dossier As String, _
                             DebutFichier As String, _
                             AvecSousDossier As Boolean) As String()
     
        Dim Tbl() As String
        Dim Fso As Object
        Dim Dos As Object
        Dim SousDos As Object
        Dim D As Object
        Dim DosParent As String
        Dim I As Integer
        Dim Fichier As Object
     
        'mémorise le chemin du dossier
        DosParent = Dossier
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        If Fso.FolderExists(Dossier) = False Then Exit Function
     
        Set Dos = Fso.GetFolder(Dossier)
     
        'recherche dans les fichiers du dossiers en cours
        For Each Fichier In Dos.Files
     
            If Dir(Fichier) = Dir(DebutFichier & "*") Then
                I = I + 1
                ReDim Preserve Tbl(1 To I)
                Tbl(I) = Fichier
                'si juste le nom sans le chemin
                'Tbl(I) = Fichier.Name
            End If
     
        Next Fichier
     
        'si la recherche doit aussi être faite dans les sous-dossiers
        If AvecSousDossier = True Then
     
            Set SousDos = Dos.SubFolders
     
            'boucle sur les dossiers
            For Each D In SousDos
     
                'évite l'erreur des dossiers interdits
                On Error Resume Next
     
                'cherche les fichiers
                For Each Fichier In D.Files
     
                    If Dir(Fichier) = Dir("PKR_HIJ_1*") Then
                    I = I + 1
                    ReDim Preserve Tbl(1 To I)
                    Tbl(I) = Fichier
                'si juste le nom sans le chemin
                'Tbl(I) = Fichier.Name
                    End If
     
                Next Fichier
     
                'recherche dans les sous dossiers
                DossierRecursif DosParent & "\" & D.Name, _
                                DebutFichier, _
                                AvecSousDossier
     
            Next D
     
        End If
     
        DossierRecursif = Tbl()
     
    End Function
    Hervé.

Discussions similaires

  1. [Débutant] ouvrir un fichier .txt dont le nom n'est qu'en parti connu
    Par larose29 dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 11/06/2012, 13h20
  2. Réponses: 2
    Dernier message: 08/10/2010, 11h15
  3. ouvrir un fichier word dont on ne connait qu'une partie du nom
    Par renaud7 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/11/2009, 11h41
  4. Ouvrir un fichier Excel avec nom variable
    Par Mechsangoku dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2009, 12h36
  5. Ouvrir un fichier excel dont le workbook est protégé
    Par PoichOU dans le forum Documents
    Réponses: 3
    Dernier message: 21/04/2009, 13h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo