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 .xls


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut recherche de fichier .xls
    BONJOUR, suite à la contribution : http://www.developpez.net/forums/sho...d.php?t=196395

    je débute en fonction API , et je ne suis pas un pro des forums, mais j'essaye de me perfectionner.

    d'abord merci pour le code et votre aide, j'ai néanmoins un problème , le code fonctionne pour ouvrir un répertoire , mais ne trouve ni les fichiers .doc , ni les fichiers .xls, le sablier reste et je suis obligé de faire un controle alt suppr pour finir la tache, surtout pour les fichiers .xls , car les .doc j'ai le message pas trouvé.


    je travail sous VB excel 2000


    Comment faire pour que le programme trouve les fichiers?


    MERCI , et désolé pour le dérangement

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonsoir,
    recherche les fonctions qui te sont nécessaires sur ce cite
    A+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut FONCTION API RECHERCHE FICHIER
    merci , je vais regarder , mais la fonction je l'ai déjà , ce que je ne comprends pas , c'est pourquoi elle marche pour la recherche des répertoires, mais pas pour la recherche des fichiers ex .xls

    merci a+




    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
    Public Function ShellEx(ByVal sFile As String, _
            Optional ByVal eShowCmd As EShellShowConstants = zouSW_SHOWDEFAULT, _
            Optional ByVal sParameters As String = "", _
            Optional ByVal sDefaultDir As String = "", _
            Optional sOperation As String = "open", _
            Optional Owner As Long = 0 _
        ) As Boolean
    Dim lR As Long
    Dim lErr As Long, sErr As String
        If (InStr(UCase$(sFile), ".EXE") <> 0) Then
            eShowCmd = 0
        End If
        On Error Resume Next
        If (sParameters = "") And (sDefaultDir = "") Then
            lR = ShellExecuteForExplore(Owner, sOperation, sFile, 0, 0, zouSW_SHOWNORMAL)
        Else
            lR = ShellExecute(Owner, sOperation, sFile, sParameters, sDefaultDir, eShowCmd)
        End If
        'MsgBox lR
        If (lR < 0) Or (lR > 32) Then
            ShellEx = True
        Else
            lErr = vbObjectError + 1048 + lR
            Select Case lR
            Case 0
                lErr = 7: sErr = "Dépassement de mémoire"
            Case ERROR_FILE_NOT_FOUND
                lErr = 53: sErr = "Fichier non trouvé"
            Case ERROR_PATH_NOT_FOUND
                lErr = 76: sErr = "Chemin inconnu"
            Case ERROR_BAD_FORMAT
                sErr = "L'exécutable n'est pas valide ou est corrompu"
            Case SE_ERR_ACCESSDENIED
                lErr = 75: sErr = "Erreur/ accès au répertoire ou au fichier"
            Case SE_ERR_ASSOCINCOMPLETE
                sErr = "Ce type de fichier est sans association valable"
            Case SE_ERR_DDEBUSY
                lErr = 285: sErr = "Le fichier n'a pu être ouvert car en cours d'utilisation. Recommencez plus tard SVP."
            Case SE_ERR_DDEFAIL
                lErr = 285: sErr = "Le fichier n'a pu être ouvert car la transaction DDE a failli.  Recommencez plus tard SVP."
            Case SE_ERR_DDETIMEOUT
                lErr = 286: sErr = "Le fichier n'a pu être ouvert (délai max dépassé).  Recommencez plus tard SVP."
            Case SE_ERR_DLLNOTFOUND
                lErr = 48: sErr = "Impossible de trouver la DLL spécifiée."
            Case SE_ERR_FNF
                lErr = 53: sErr = "Fichier non trouvé"
            Case SE_ERR_NOASSOC
                sErr = "Aucune association définie pour ce type de fichier"
            Case SE_ERR_OOM
                lErr = 7: sErr = "Mémoire épuisée"
            Case SE_ERR_PNF
                lErr = 76: sErr = "Chemin inconnu"
            Case SE_ERR_SHARE
                lErr = 75: sErr = "Violation de partage !."
            Case Else
                sErr = "Une erreur a surgi au moment d'essayer d'ouvrir ou d'éditer le fichier choisi."
            End Select
     
            MsgBox "Error n°" & CStr(lErr) & Chr(13) & sErr & " sur ouverture  : " & Chr(13) & sFile, vbCritical
            ShellEx = False
        End If
    End Function

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut FONCTIO API FICHIER EXCEL
    Désolé , je mets le code d'origine


    merci

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    Option Explicit
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    'La fonction ShellExecute ouvre ou édite le fichier spécifié.
    'Ce fichier peut être un fichier exécutable ou un document.
    'En cas de succès, la valeur retournée par la fonction est le handle de l'application lancée
    ' ou celui de l'application DDE/serveur
    'En cas d'échec, la valeur retournée par la fonction est un n° d'erreur inférieur ou égal à 32.
    'je vous fais grâce des erreurs possibles, que vous verrez plus bas (constantes auto-explicites)
    '=====================================Les paramètres=============================================
    '=== hwnd : spécifie le handle de la fenêtre parent. Cette fenêtre est celle qui reçoit
    ' les boites de message générées par l'application (donc également les messages d'erreur)
    '=== lpOperation : représente un pointeur vers une chaîne de caractères terminée par un NULL
    ' et qui spécifie l'opération à exécuter. Sont valables les chaines suivantes :
    ' ---open : la fonction ouvre le fichier (qui peut être un fichier
    ' exécutable ou un document, mais également un répertoire à
    ' ouvrir), spécifié par lpfile.
     
    ' ---print : La fonction édite le fichier spécifié par lpfile, fichier qui ne peut alors
    ' qu'être un document
    ' Si toutefois, le fichier est finalement un exécutable, la fonction ouvre ce
    ' fichier comme si "open" avait été utilisé au lieu de "Print"
     
    ' ---Explore : la fonction explore le répertoire spécifié par lpfile
     
    ' le paramètre lpOperation peut être un NULL. Dans un tel cas, la fonction ouvre le fichier
    ' spécifié par lpfile.
    '=== lpFile : représente un pointeur vers une chaîne de caractères terminée par un NULL et qui
    ' spécifie le fichier à ouvrir ou éditer ou le répertoire à ouvrir ou explorer.
    ' La fonction peut ouvrir un exécutable ou un fichier document. Elle peut éditer un
    ' fichier document.
    '=== lpParameters : représente un pointeur vers une chaîne de caractères terminée par un NULL, qui
    ' spécifie les paramètres à passer à l'application (si lpfile est un exécutable
    ' uniquement)
    ' Si lpfile n'est pas un exécutable, le paramètre lpParameters doit être un NULL.
    '=== lpDirectory : représente un pointeur vers une chaîne de caractères terminée par un NULL et
    ' qui spécifie je répertoire par défaut.
     
     
    '=== nShowCmd : Spécifie la façon dont l'application doit être montrée à l'ouverture, si lpfile
    ' est un exécutable uniquement
    ' Ce pâramètre peut recevoir l'une des valeurs suivantes :
     
    ' SW_HIDE (pour cacher la fenêtre et en activer une autre) - SW_MAXIMIZE (pour "maximiser"
    'l'affichage de la fenêtre) - SW_MINIMIZE (pour "minimiser" l'affichage de la fenêtre et
    'activer la fenêtre suivante en respectant le "zorder") - SW_RESTORE (pour activer et afficher la
    'fenêtre. Si celle-ci est "maximisée" ou "minimisée", Windows la restitue dans ses dimensions et
    'position d'origine. A spécifier donc pour restaurer) - SW_SHOW (pour activer la fenêtre et l'afficher
    'dans ses dimensions et position en cours) - SW_SHOWDEFAULT (règle l'état d'affichage sur la base
    'du flag SW_... spéciifié dans la structure STARTUPINFO passée à la fonction CreateProcess
    'par le programme ayant démarré l'application. Une application doit appeler ShowWindow avec ce
    '"flag" pour définir l'état initial d'affichage de sa fenêtre principale) - SW_SHOWMAXIMIZED (pour
    'activer la fenêtre et l'afficher à ses dimensions maximum) - SW_SHOWMINIMIZED (pour activer la
    ' fenêtre et l'afficher à ses dimensions minimum) - SW_SHOWMINNOACTIVE (pour afficher la fenêtre
    ' comme une fenpetre réduite, la fenêtre restant active) - SW_SHOWNA (pour afficher dans les dimensions
    'position en cours, la fenêtre restant active) - SW_SHOWNOACTIVATE (pour afficher la fenêtre dans
    'ses plus récentes dimensions et position,la fenêtre restant active) - SW_SHOWNORMAL (pour afficher
    'et activer une fenêtre. Si cette dernière est "maximisée" ou "minimisée", Windows la restaure
    'dans ses dimensions et position d'origine. Une application doit spécifier ce "flag" lors du premier
    'affichage d'une fenêtre)
    'Si lpFile désigne un fichier document, nShowCmd doit avoir la valeur 0 (zero).
     
     
    Private Declare Function ShellExecuteForExplore Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, lpParameters As Any, lpDirectory As Any, ByVal nShowCmd As Long) As Long
    Public Enum EShellShowConstants
    zouSW_HIDE = 0
    zouSW_MAXIMIZE = 3
    zouSW_MINIMIZE = 6
    zouSW_SHOWMAXIMIZED = 3
    zouSW_SHOWMINIMIZED = 2
    zouSW_SHOWNORMAL = 1
    zouSW_SHOWNOACTIVATE = 4
    zouSW_SHOWNA = 8
    zouSW_SHOWMINNOACTIVE = 7
    zouSW_SHOWDEFAULT = 10
    zouSW_RESTORE = 9
    zouSW_SHOW = 5
    End Enum
    Private Const ERROR_FILE_NOT_FOUND = 2&
    Private Const ERROR_PATH_NOT_FOUND = 3&
    Private Const ERROR_BAD_FORMAT = 11&
    Private Const SE_ERR_ACCESSDENIED = 5 ' accès interdit
    Private Const SE_ERR_ASSOCINCOMPLETE = 27
    Private Const SE_ERR_DDEBUSY = 30
    Private Const SE_ERR_DDEFAIL = 29
    Private Const SE_ERR_DDETIMEOUT = 28
    Private Const SE_ERR_DLLNOTFOUND = 32
    Private Const SE_ERR_FNF = 2 ' Fichier non trouvé
    Private Const SE_ERR_NOASSOC = 31
    Private Const SE_ERR_PNF = 3 ' chemin inconnu
    Private Const SE_ERR_OOM = 8 ' dépassement de mémoire
    Private Const SE_ERR_SHARE = 26
     
    Public Function ShellEx(ByVal sFile As String, _
    Optional ByVal eShowCmd As EShellShowConstants = zouSW_SHOWDEFAULT, _
    Optional ByVal sParameters As String = "", _
    Optional ByVal sDefaultDir As String = "", _
    Optional sOperation As String = "open", _
    Optional Owner As Long = 0 _
    ) As Boolean
    Dim lR As Long
    Dim lErr As Long, sErr As String
    If (InStr(UCase$(sFile), ".EXE") <> 0) Then
    eShowCmd = 0
    End If
    On Error Resume Next
    If (sParameters = "") And (sDefaultDir = "") Then
    lR = ShellExecuteForExplore(Owner, sOperation, sFile, 0, 0, zouSW_SHOWNORMAL)
    Else
    lR = ShellExecute(Owner, sOperation, sFile, sParameters, sDefaultDir, eShowCmd)
    End If
    'MsgBox lR
    If (lR < 0) Or (lR > 32) Then
    ShellEx = True
    Else
    lErr = vbObjectError + 1048 + lR
    Select Case lR
    Case 0
    lErr = 7: sErr = "Dépassement de mémoire"
    Case ERROR_FILE_NOT_FOUND
    lErr = 53: sErr = "Fichier non trouvé"
    Case ERROR_PATH_NOT_FOUND
    lErr = 76: sErr = "Chemin inconnu"
    Case ERROR_BAD_FORMAT
    sErr = "L'exécutable n'est pas valide ou est corrompu"
    Case SE_ERR_ACCESSDENIED
    lErr = 75: sErr = "Erreur/ accès au répertoire ou au fichier"
    Case SE_ERR_ASSOCINCOMPLETE
    sErr = "Ce type de fichier est sans association valable"
    Case SE_ERR_DDEBUSY
    lErr = 285: sErr = "Le fichier n'a pu être ouvert car en cours d'utilisation. Recommencez plus tard SVP."
    Case SE_ERR_DDEFAIL
    lErr = 285: sErr = "Le fichier n'a pu être ouvert car la transaction DDE a failli. Recommencez plus tard SVP."
    Case SE_ERR_DDETIMEOUT
    lErr = 286: sErr = "Le fichier n'a pu être ouvert (délai max dépassé). Recommencez plus tard SVP."
    Case SE_ERR_DLLNOTFOUND
    lErr = 48: sErr = "Impossible de trouver la DLL spécifiée."
    Case SE_ERR_FNF
    lErr = 53: sErr = "Fichier non trouvé"
    Case SE_ERR_NOASSOC
    sErr = "Aucune association définie pour ce type de fichier"
    Case SE_ERR_OOM
    lErr = 7: sErr = "Mémoire épuisée"
    Case SE_ERR_PNF
    lErr = 76: sErr = "Chemin inconnu"
    Case SE_ERR_SHARE
    lErr = 75: sErr = "Violation de partage !."
    Case Else
    sErr = "Une erreur a surgi au moment d'essayer d'ouvrir ou d'éditer le fichier choisi."
    End Select
     
    MsgBox "Error n°" & CStr(lErr) & Chr(13) & sErr & " sur ouverture : " & Chr(13) & sFile, vbCritical
    ShellEx = False
    End If
     
    End Function
     
     
    Private Sub Command1_Click()
    If ShellEx("c:\tmp") Then MsgBox "Ouverture repertoire OK" ' pour ouvrir, si possible, le répertoire de ce chemin
    If ShellEx("c:\tmp\toto.txt") Then MsgBox "Ouverture fichier texte ok" 'pour ouvrir, si possible, le fichier de ce chemin
    If ShellEx("c:\tmp\Liste.xls") Then MsgBox "Ouverture excel avec fichier liste.xls OK"
     
    'etc..
    'selon l'extension, etc...
    End Sub

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Il y à des codes source en VB6 qui pourront presque certainement allez en VBA
    A savoir, entre autre..
    Comment obtenir le contenu d'un répertoire ?
    Comment scanner un répertoire et tous ses sous-répertoires ?
    Tu trouverras le code de ces fonctions Ici

    A+
    EDIT:
    Je n'avais pas bien compris ta question, en fait tu écrit dans ton code
    1°) le nom du répertoir
    2°) le nom complet du fichier avec sont extention
    Je ne vois pas ton problème, chez moi ta fonction va impecable
    Répertoir ouvert : OK
    Fichier lier ouvert :OK avec un projet VB6
    Fichier lier ouvert :OK avec un document Word
    Fichier lier ouvert :OK avec un BMP
    Par contre, avec un fichier xls, impossible d'ouvrir, probablement parce que l'appel vient de l'appli, en plusil bloque pendant quelque minute.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut
    MERCI beaucoup , je vais tester

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

Discussions similaires

  1. [XL-2010] Recherche données dans plusieurs fichiers XLS avec argument
    Par gregory.d dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/08/2014, 14h34
  2. Réponses: 26
    Dernier message: 07/02/2012, 10h33
  3. Réponses: 37
    Dernier message: 15/11/2011, 11h41
  4. Macro pour rechercher un fichier xls et importer des données
    Par ThSPB dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/03/2011, 16h03
  5. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07

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