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

VBA Outlook Discussion :

[VBA-O] Procédure recherche de fichiers sur le disque via Outlook


Sujet :

VBA Outlook

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Points : 58
    Points
    58
    Par défaut [VBA-O] Procédure recherche de fichiers sur le disque via Outlook
    Bonsoir,

    VBA - Outlook 2003

    Après de nombreuses recherches infructueuses. Je me retourne vers vous.

    Voici ce que je cherche à faire.

    A la réception d'un mail, enregistrer le fichier qui se trouve en pièce jointe dans un répertoire (jusque là rien de bien nouveau) MAIS AVANT FAIRE UNE RECHERCHE sur le disque, si le fichier en pj existe déjà dans un répertoire alors on ne l'enregistre pas.

    Concernant la procédure pour enregistrer la pièce jointe d'un mail, ce problème est réglé.

    Par contre je n'ai rien trouvé sur une méthode qui permet de rechercher un fichier hors Outlook. Filesearch, LooKin, etc, ne servent exclusivement qu'à des recherches dans les répertoires et sous-répertoires d'outlook.

    Dans Excel, Word et Access, les méthodes type filesearch, seek ... servent à rechercher des fichiers sur le disque. Mais dans Outlook il semble que ses méthodes ne s'appliquent que pour les collections d'objets de l'application.

    Faut-il utiliser des complèments COM, une dll particulière, une librairie, etc ?

    Par avance merci.

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Voici une fonction récursive qui utilise la référence "Microsoft Scripting Runtime"

    Elle est probablement améliorable (avis aux amateurs !!), notamment parce qu'elle ne prend pas en compte les dossier dont le chemin contient plus de 255 caractères.

    Elle peut être relativement lente à l'exécution.

    Fonctionnement: La fonction recherche le fichier dans le dossier spécifié. Si le troisième paramètre est True, elle s'appelle elle-même pour chaque sous-dossier, et chaque sous-dossier du sous-dossier...

    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
    Function FichierExiste(Nomfichier As String, NomDossier As String, ChercheDansArborescence As Boolean) As Boolean
     
        Dim fs As New Scripting.FileSystemObject
        Dim Dossier As Scripting.Folder
        Dim SousDossier As Scripting.Folder
        Dim Fichier As Scripting.File
     
        Nomfichier = UCase(Nomfichier)
     
        Set Dossier = fs.GetFolder(NomDossier)
        ' Recherche dans le dossier
        If Len(Dossier.Path) > 255 Then Exit Function
        For Each Fichier In Dossier.Files
            If UCase(Fichier.Name) = Nomfichier Then
                FichierExiste = True
                GoTo Fin
            End If
        Next Fichier
     
        ' Recherche dans les sous-dossiers
        If ChercheDansArborescence Then
            For Each SousDossier In Dossier.SubFolders
                If FichierExiste(Nomfichier, SousDossier.Path, ChercheDansArborescence) Then
                    FichierExiste = True
                    GoTo Fin
                End If
            Next SousDossier
        End If
     
    Fin:
        Set Fichier = Nothing
        Set SousDossier = Nothing
        Set Dossier = Nothing
        Set fs = Nothing
     
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Points : 58
    Points
    58
    Par défaut
    Salut

    Merci Pierre, ça fonctionne . Mais effectivement c'est un peu lent (plus de 2 minutes pour faire une recherche sur un espace disque peut encombré) .

    Je ne connaissais pas la bibliothèque Scripting Runtine. Pour ceux que ça intéresse pour la charger : aller dans VB Editor puis Outils/Référence puis faire défiler la liste des bibliothèques jusque Miscrosoft Scripting Runtime, cocher, ok.

    Je me permet de ne pas mettre tout de suite le tag Résolu. Je laisse un petit délai histoire de voir si je peux améliorer cette fonction.

    Bonne journée !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Points : 58
    Points
    58
    Par défaut
    Pour poursuivre

    Avant de poster ma question, j'ai tenté de faire fonctionner un exemple proposé par l'Aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    With Application.FileSearch
        .LookIn = "C:\My Documents"
        .FileName = "cmd*"
        If .Execute(SortBy:=msoSortByFileName, _
        SortOrder:=msoSortOrderAscending) > 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 Wit
    Pourquoi dans le cas de FileSearch, l'objet Application n'est plus défini alors que juste avant il peut l'être, par exmple avec la méthode ActiveExplorer ?


    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 AppInf()
        MsgBox "Welcome, " & Application.GetNamespace("MAPI").CurrentUser
        Application.ActiveExplorer.WindowState = olMaximized
     
    With Application.FileSearch
        .LookIn = "C:\My Documents"
        .FileName = "cmd*"
        If .Execute(SortBy:=msoSortByFileName, _
        SortOrder:=msoSortOrderAscending) > 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
     
    End Sub

    J'aimerai comprendre quelque chose de fondemmental : FileSearch, est-ce un objet ou une méthode ? Selon l'aide c'est un objet mais alors si c'est un objet comment l'initialisé dans ce cas précis ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Comment rechercher des fichiers sur un disque.
    Par vijeo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/08/2017, 10h17
  2. Rechercher un fichier sur le disque dur
    Par michelp3 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 14/05/2012, 15h04
  3. [Toutes versions] Recherche de fichiers sur le disque
    Par ZeitnotZatopek dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 22/10/2009, 12h52
  4. Comment rechercher un fichier sur le disque ?
    Par SOPSOU dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2007, 13h30
  5. Rechercher un fichier sur le disque dur et le sup.
    Par Kysers95 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/09/2007, 00h38

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