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 dans une plage dans des fichiers fermés


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut recherche dans une plage dans des fichiers fermés
    Voilà mon souci, dans un répertoire j’ai une liste de fichiers fermés ou non, je dois faire plusieurs recherches de cas d’emploi
    1) j’ai réussi à récupérer la liste des fichiers fermés contenant une propriété perso, le problème si un de ces fichiers est ouvert je tombe en échec,il y a-t-il une solution ?
    Dans ma liste il m’affiche le chemin complet, peut on récupérer que le nom du fichier

    code :

    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
    Sub recherchefichier()
    Set fs = Application.FileSearch
    With fs
        .LookIn = "C:\Mes Documents\Nomenclature"
        .Filename = "*.xls"
        If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
            For i = 1 To .FoundFiles.Count
                    Dim DSO As DSOFile.OleDocumentProperties
                    Set DSO = New DSOFile.OleDocumentProperties
                    DSO.Open sfilename:=.FoundFiles(i)
                    DSO.SummaryProperties.Comments = "plan montage"
                    If planmontage = DSO.CustomProperties.Item("plan montage").Value Then
                        casdemploi.AddItem (.FoundFiles(i))
                    End If
                    DSO.Close
            Next i
        Else
            MsgBox "Pas de fichiers"
        End If
    End With
    2) Je dois faire aussi la liste des fichiers ouverts ou non qui contiennent une valeur donnée par exemple « plan » dans une cellule d’une plage « A1 :M500 » dans toutes les feuilles de ces classeurs, je joint mon code qui est incomplet et qui ne marche pas non plus

    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
    Private Sub recherchevaleur_Click()
    Set fs = Application.FileSearch
    With fs
        .LookIn = "C:\Mes Documents\Nomenclature"
        .Filename = "*.xls"
        If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
            For i = 1 To .FoundFiles.Count
                Set plagecellule = .FoundFiles(i).Sheets(1).Range("a1:m500")
                    For j = 1 To plagecellule.Cells.Count
                        If plagecellule(j).Text = planmontage Then
                            casdemploi.AddItem (.FoundFiles(i))
                        End If
                    Next j
                'casdemploi.AddItem (.FoundFiles(i))
            Next i
        Else
            MsgBox "Pas de fichiers"
        End If
    End With
    End Sub

    3) Encore une chose,je n’arrive pas à trouver comment lister les fichiers ouverts d’un répertoire donné.

    Merci à vous

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je réponds à ta seconde question, n'ayant pour la première que des url à te donner http://silkyroad.developpez.com/VBA/ClasseursFermes/ ou http://www.developpez.net/forums/sho...d.php?t=509555
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim CL as workbook, Tablo() as variant, Rep as string, i as integer
         Rep = "C:\Mes Documents\Nomenclature"
    For each Cl in Application.workbooks
         If CL.Path = Rep then
              i = i + 1
              Redim Preserve Tablo(i)
              Tablo(i) = CL.name
          endif
    Next
    End sub
    (Pas testé)Tu peux sans doute utiliser nbf = Application.workbooks.count pour avoir le nombre de fichiers ouverts et "For i = 1 to nbf" mais le code n'est pas plus court
    Tu dis
    A+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    question1
    apparement on ne peu pas rechercher des valeurs si le fichier est ouvert, donc je vais faire le test si le fichier est fermé j'utilise mon code sinon je fais une recherche + simple

    question2
    là je peche, d'apres mes lectures on a du mal à faire des recherche sur + de 8 lignes (plantage manque memoire etc....). quelqu'un peu m'éclairer si il y a une solution? pour l'instant j'essaye de tout assembler mon code

    Question3 , là nickel c'est résolu

    Désolé de ma réponse tardive, mais je rame.....

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par kikuyu
    question1
    apparement on ne peu pas rechercher des valeurs si le fichier est ouvert
    Où as-tu vu ça ? Il est plus "basique" de travailler sur un fichier ouvert que fermé.
    Par contre, dans ta procédure, tu ouvres un fichier puis tu utilises une méthode adapté à la lecture d'un fichier fermé. C'est soit l'un, soit l'autre.

    Pour lister les fichiers d'un répertoire connu, inutile de passer par fso
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ListerFichiers()
    Dim Chemin, NomFich As Variant
        Chemin = "C:\Mes Documents\Nomenclature\"
        NomFich = Dir(Chemin & "*.xls")
        If NomFich = "" Then Exit Sub 'fichier non trouvé
        Do While NomFich <> ""
            recherche Chemin, NomFich 'appel de la procédure de recherche
            NomFich = Dir
        Loop
    End Sub
    Citation Envoyé par kikuyu
    question2
    là je peche, d'apres mes lectures on a du mal à faire des recherche sur + de 8 lignes (plantage manque memoire etc....).
    Alors tu as mal lu. Si tu as un plantage lors d'une recherche sur plus de 8 lignes pour un problème de mémoire, alors soit ton PC n'a aucune mémoire ni disque dur... soit tu as une procédure "défaillante". Et j'opte pour la seconde option.
    Pour cette recherche, tu ouvres le fichier et tu parcours chaque feuille
    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
    Sub recherche(Chemin as string, NomFich as string)
    Dim LaFeuille as worksheet, c as range
         Workbooks.Open Chemin + NomFich
         DoEvents
         For each LaFeuille in ActiveWorkbook.worksheets
              With LaFeuille.Range("a1:m500")
                   Set c = .find("plan montage", LookIn:=xlValues, Lookat:=xlwhole)
                   if not c is nothing then
                        casdemploi.AddItem NomFich
                   endif
              End with
         Next
         Activeworkbook.close
         DoEvents
    End sub
    ... si "plan montage" est bien le mot que tu cherches...
    Pas testé, mais si tu as un bug, tu demandes
    Bonne journée

Discussions similaires

  1. [XL-2007] Recherche d'une valeur dans une plage entre deux intervals
    Par jean bapt' dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/09/2012, 10h13
  2. Réponses: 6
    Dernier message: 21/06/2012, 16h13
  3. [XL-2003] Rechercher une variable dans une plage de données
    Par gandalf20000000 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/11/2009, 11h56
  4. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  5. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13

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