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 :

Recherche de fichier, avec Joker [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut Recherche de fichier, avec Joker
    bonjour, j'ai plusieurs fichiers dans un même dossier qui respectent la syntaxe suivante : blabla2008, blabla2009, blabla2010.
    J'ai trouvé ici : http://frederic.sigonneau.free.fr/co...hierExiste.txt
    quelques fonctions utiles pour mon problème.
    Je souhaiterais savoir si par exemple dans les fonctions suivantes il serait possible de caler un joker du style blabla*.xls
    c'est que j'ai besoin de tous les ouvrir pour pouvoir rechercher ce que je veux dedans. Ces fichiers contiennent des calendrier prévisionnels, et si des délai sont modifiés, je peux être amener à supprimer certaines éléments pour les mettre à jour. C'est assez problématique si qq chose est prévu en décembre, et que le délai est modifié pour janvier. Il me faut donc ouvrir tous les fichiers blabla*.xls quel que soit l'année.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Function FileExists(S As String) As Boolean
    'le classique (et le plus court)
      FileExists = Dir(S) <> ""
    End Function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function IsExisting(strFileName As String) As Boolean
        On Error Resume Next
        IsExisting = Not FileLen(strFileName)
    End Function
    Merci pour votre aide.

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Regardes si cette discussion ne peut pas t'aider, dans ce cas c'est un seul fichier mais l'adaptation devrait être facile.

    http://www.developpez.net/forums/d76...erche-dossier/

    A+

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour, Qwerty111,

    La formulation de ta question ne permet pas de savoir si les fichiers recherchés sont tous présents dans un seul dossier (sous-répertoire) de chemin connu.

    Si tel est le cas, la solution est facile à mettre en oeuvre ...

    Qu'en est-il donc ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    J'ai modifié ce que Fvandermeulen m'a filé, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sub OuvreXLS()
    REp =Cells(1,2).value
    dim theFile as string
     
    theFile = Dir(Rep & "*.xls")
    While theFile <> ""
    	if Left(theFile, 6) =Cells(2,2).value then
    		Workbooks.open(Rep & theFile)
    	end if
    theFile = Dir
    Wend
    End sub
    En cells(1,2), le chemin.
    En Cells(2,2), le critère.
    Mais cela ne marche pas.

    Tous les fichiers sont bien dans un même dossier. Je veux bien la solution facile

  5. #5
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Qu'est-ce qui ne marche pas ?

    Vérifie qu'il y a bien un slash à la fin dans rep, sinon utilises le débugger pas à pas pour voir ou ça cloche.

    Sinon un exemple perso :
    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
    Dim Fichier As String, Repertoire As String, MonFilename As String
    Dim wb As Workbook
    Dim CellAri As Range
    ' Nom du repertoire dans cette cellule
    Set CellAri = CArhistote.Cells(2, 2)
     
    Repertoire = CellAri.Hyperlinks(1).Address
    If Right(Repertoire, 1) <> "\" Then
        Repertoire = Repertoire & "\"
    End If
     
     Fichier = Dir(Repertoire & "*.xls")
     
    Do While Len(Fichier) > 0
         Workbooks.Open Filename:= repertoire & fichier
         Fichier = Dir() 
    Loop

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,
    Par expérience le chemin est souvent la source du problème...vérifie bien qu'il contient bien un "\" pour terminer.

    Edit: Salut Aalex38 intéressant ton exemple perso.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Il y a bien un slash.
    Le problème, c'est que j'ai deux fichiers correspondant à mon critère dans le dossier, et un seul est ouvert.

    Je vais tester l'exemple d'aalex_38.
    L'exemple d'alex, jsuis pas assez doué pour l'adapter en fait :p Je bloque quand on déclare le lien.

    J'ai fait du pas à pas sur ma macro, c'est bien ça, il en ouvre qu'un seul.

  8. #8
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Je bloque quand on déclare le lien.
    il ne faut pas déclarer de lien, je réecris le code et je le met ici :

    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
    Sub Ouvrir_excel()
    On Error GoTo fin
     
    Dim Fichier As String, Repertoire As String, MonFilename As String
    Dim wb As Workbook
    Dim MACell As Range
     
    ' Nom du repertoire dans cette cellule
    Set MACell = worksheets("Nomdemafeuille").Cells(1, 1) 
    Repertoire = MACell.Value
    If Right(Repertoire, 1) <> "\" Then
        Repertoire = Repertoire & "\"
    End If
     
    Fichier = Dir(Repertoire & "*.xls")
     
    Workbooks.Open Filename:=Repertoire & Fichier
     
    Do While Len(Fichier) > 0
         Fichier = Dir()
         If Fichier = Empty Then
             Exit Do
         End If
         DoEvents
         Workbooks.Open Filename:=Repertoire & Fichier
     
     Loop
    fin:
    End Sub

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    c'est ça que je pige pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Repertoire = CellAri.Hyperlinks(1).Address

  10. #10
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par Qwerty111 Voir le message
    Il y a bien un slash.
    Le problème, c'est que j'ai deux fichiers correspondant à mon critère dans le dossier, et un seul est ouvert.

    ...

    J'ai fait du pas à pas sur ma macro, c'est bien ça, il en ouvre qu'un seul.
    Je te laisse tester l'exemple d'Aalex_38 mais juste pour comprendre...
    Quand tu as fait le pas à pas il n'a donc trouver qu'un fichier correspondant à ton critère, il n'est pas sorti de boucle ?
    Si il n'est pas sorti il faut vérifier si ta comparaison est OK, c'est vrai que j'ai pas prévu la casse dans cette exemple car le post initial utilisait des nombres...

  11. #11
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Je viens de coller le code plus haut dans mon poste, testes le d'abord en remplacant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Repertoire = MACell.Value
    par le nom en dur du repertoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Repertoire = "C:\...\..." ' ici le nom de ton répertoire
    Dans le code que je t'ai donné le nom du répertoire est inscrit dans une cellule.

    Edit: Salut Aalex38 intéressant ton exemple perso.
    Merci Fvandermeulen, je te rend ton salut


    Edit : je viens de tester et même s'il y a mieux mon code fonctionne.

    Edit2 :
    c'est ça que je pige pas :
    Repertoire = CellAri.Hyperlinks(1).Address
    C'est tiré d'un exemple perso, j'ai un lien hypertext dans mon document pour accéder à un répértoire, donc j'utilise l'adresse du lien pour indiquer le chemin, ce n'est pas utile dans ton cas.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Lorsque l'on passe sur le premier fichier correspondant au critère, on rentre bien dans le if, et le fichier s'ouvre. Lorsque juste après il passe sur le second fichier, dont le nom n'est qu'un copié collé avec juste le dernier caractère qui change, ce qui importe peu puisque je test que sur les 6 premiers, et bien on ne rentre pas dans le if, et le fichier ne s'ouvre donc pas.

    -En cours de test du code de mon canard.-
    Le code d'aalex marche bien

  13. #13
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    je test que sur les 6 premiers
    Cela n'est pas absolument nécéssaire tu peux faire sur le premier dir avant la boucle (123456 représentent ici les 6 ^premiers caractères à remplacer par tes 6 premiers) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichier = Dir(Repertoire & "123456*.xls")

    En cours de test du code de mon canard

  14. #14
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par Qwerty111 Voir le message
    Lorsque l'on passe sur le premier fichier correspondant au critère, on rentre bien dans le if, et le fichier s'ouvre. Lorsque juste après il passe sur le second fichier, dont le nom n'est qu'un copié collé avec juste le dernier caractère qui change, ce qui importe peu puisque je test que sur les 6 premiers, et bien on ne rentre pas dans le if, et le fichier ne s'ouvre donc pas.

    En cours de test du code de mon canard.
    Je viens de tester chez moi (avec ton code adapté) ça fonctionne, il m'ouvre deux fichiers !! C'est vraiment étrange !!!
    Es tu absolument certain de la correspondance des 6 premiers caratères?

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Et bien je crois que c'est bon ce coup ci

    Merci beaucoup.

    Citation Envoyé par Fvandermeulen Voir le message
    Je viens de tester chez moi (avec ton code adapté) ça fonctionne, il m'ouvre deux fichiers !! C'est vraiment étrange !!!
    Es tu absolument certain de la correspondance des 6 premiers caratères?

    Oui oui oui, sûr et certain, c'est bien pour ça que je ne comprend pas.

    Et pour ceux qui aurait le même problème et qui passerait sur ce topic dans le futur, voilà ce que j'ai fait ensuite. Pour pourvoir retrouver et windows.activer les fichiers ouverts par cette macro, il suffit de stocker dans un tableau dynamique et de le redimensionner au fur et à mesure qu'on trouve des fichiers correspondants.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    bonjour les gens

    J'ai fait ça, et je ne comprend absolument pas pourquoi le fichier ne s'affiche pas.
    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
    Sub Ouvrir_excel()
    On Error GoTo fin
     
    Dim Fichier As String, Repertoire As String, MonFilename As String
    Dim wb As Workbook
    Dim MACell As Range
    Dim tabStrt() As String
    'Dim tableng As Integer
     
    ' Nom du repertoire dans cette cellule
    Set MACell = Cells(1, 2)
    Repertoire = MACell.Value
    If Right(Repertoire, 1) <> "\" Then
        Repertoire = Repertoire & "\"
    End If
    
    Fichier = Dir(Repertoire & "*.xls")
    If Left(Fichier, 6) = Cells(2, 2).Value Then
        Workbooks.Open Filename:=Repertoire & Fichier
        ReDim tabStrt(0)
        tabStrt(0) = Fichier
    End If
    
    Do While Len(Fichier) > 0
         Fichier = Dir()
         If Fichier = Empty Then
             Exit Do
         End If
         DoEvents
         If Left(Fichier, 6) = Cells(2, 2).Value Then
            Workbooks.Open Filename:=Repertoire & Fichier
            'tableng = Len(tabStrt) + 1
            ReDim Preserve tabStrt(UBound(tabStrt) + 1)
            tabStrt(UBound(tabStrt)) = Fichier
         End If
     Loop
    fin:
    End Sub
    Ce que j'ai mis en gras, c'est le problème. Le if semble être zappé. Je vérifie le nom de ce qui est stocké dans mes variables, et LE IF EST BON si mon fichier est TOTOTO, et la condition TOTOTO, il devrait rentrer dans le boucle, c'est sûr à 200%. Mon petit cerveau est plus puissant que ce PC de mes deux, je vois bien que ça correspond bordel. Mais ça ne veut pas rentrer dans la boucle, et ouvrir mon fichier, ça va en end if direct. et je ne suis pas foutu de comprendre pourquoi.
    Je craque
    En dépression

    A l'aide.

  17. #17
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Désolé mais ton petit cerveau est moins fort que l'ordinateur (comme nous tous sauf si Rain man est parmi nous ), lui n'a jamais tort il se contente de faire ce qui lui est demandé. Je ne sais plus de qui est cette phrase (vu régulièrement posté par un des membre du forum et cité de mémoire)
    "L'ordinateur fait toujours ce qu'on lui demande de faire et parfois ce que l'on veux qu'il fasse"

    avant ton if essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim test as boolean
    test= Left(Fichier, 6) = Cells(2, 2).Value 
    msgbox test
    if test then
    regarde la valeur de test, essaye d'enlever le value ou de mettre , etc
    Tan que test sera faux ton if ne s'exécutera pas

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Ben pour le coup, il a pas fait ce qu'il aurait voulu que je fasse. Mais je persiste, tout ce qu'il sait faire, c'est parce qu'un cerveau humain lui a appris avant
    Mais on va pas philosopher à 10:00 du mat', jsuis même pas encore réveillé moi

    Alors, j'ai trouvé d'où venait le problème, j'ai eu une illumination en essayant de contourner le problème.
    Lorsque je test ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(Fichier, 6) = Cells(2, 2).Value Then
    Et bien si un fichier a déjà était ouvert dans mon dossier, c'est celui ci qu'à le focus, d'où un test complètement daubé, et qui en effet sera faux. Du coup, il faudrait juste stocker le valeur de Cells(2,2) [dans mon cas] dans une variable, plutôt que de tester comme un goret.
    Moi vu que j'étais parti sur autre chose, j'ai juste décidé de stocker tous les noms de fichiers dans un tableau que j'agrandis à chaque nouveau nom de fichier que j'entre (redim tableau(Ubound(Tableau+1)), truc du genre). Et ensuite, faire défiler mon tableau, et n'ouvrir que ceux qui correspondent à mon critère. Mais c'est parce que je me suis aperçu que cela serait plus pratique replacé dans mon projet global.

    //Fin de roman

  19. #19
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Pour contourner le problème et ne pas faire de if, tu pourrais faire comme je t'ai indiqué plus haut.

    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichier = Dir(Repertoire & "*.xls")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichier = Dir(Repertoire & cells(2,2).value & "*.xls")
    en faisant comme ça la commande dir ne va parcourir que les fichiers qui commencent par tes critères.

    edit : sinon tu peux toujours préciser dans quel classeur et quel feuille se trouve ta cellule de référence, quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thisworkbook.worksheets("nomdelafeuille").cells(2,2).value

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Oui, exact ...

    En tout cas, merci à tous.
    Je passe en résolu.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/01/2013, 09h36
  2. Recherche de fichiers avec filtre
    Par mimic50 dans le forum MFC
    Réponses: 1
    Dernier message: 24/10/2007, 22h58
  3. Suppression de fichiers avec joker
    Par defluc dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2007, 18h28
  4. Recherche de fichier avec joker
    Par defluc dans le forum Langage
    Réponses: 1
    Dernier message: 15/10/2007, 13h27
  5. Recherche des fichiers avec ksh
    Par mzt.insat dans le forum Linux
    Réponses: 3
    Dernier message: 15/05/2006, 23h51

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