Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Outlook > VBA Outlook
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2006, 23h44   #1
Membre du Club
 
Inscription : 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 : 52
Points : 52
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.
choucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 09h08   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 199
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 199
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
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 :
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)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h36   #3
Membre du Club
 
Inscription : 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 : 52
Points : 52
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 !
choucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h54   #4
Membre du Club
 
Inscription : 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 : 52
Points : 52
Pour poursuivre

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

Code :
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 :
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 ?
choucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h12.


 
 
 
 
Partenaires

Hébergement Web