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 Access Discussion :

Sélection de plusieurs fichiers [Toutes versions]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut Sélection de plusieurs fichiers
    Bonjour,

    Pour sélectionner un fichier dans un répertoire, j'ai le code qui va bien, trouvé dans la FAQ (à base de GetOpenFileName).

    Je voudrais pouvoir sélectionner plusieurs fichiers de la même façon.
    C'est possible ?

    Merci

    Edit : Après re-recherche, j'ai trouvé dans la FAQ.
    Par contre, je n'arrive pas à avoir le même affichage de la fenêtre de sélection quand j'ai (version originale) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .flags = OFN_HIDEREADONLY
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .flags = OFN_ALLOWMULTISELECT
    Comment faire ?

    Re-edit : Voici la fonction qui va bien :
    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
    Private Const OFN_EXPLORER = &H80000
    Public Function OuvrirPlusieursFichiers(Handle As Long, _
                                            Titre As String, _
                                            TypeRetour As Byte, _
                                            Optional TitreFiltre As String, _
                                            Optional TypeFichier As String, _
                                            Optional RepParDefaut As String) As String()
    'OuvrirPlusieursFichiersest la fonction à utiliser dans votre formulaire pour ouvrir la boîte de dialogue de sélection de plusieurs fichiers.
    ' La fonction renvoie un tableau de chaine
    'Explication des paramètres
    'Handle = le handle de la fenêtre (Me.Hwnd)
    'Titre = Titre de la boîte de dialogue
    'TypeRetour (Définit si le chemin est renvoyé par la fonction ou pas)
    '1 = le chemin est renvoyé dans le 1er élément du tablau
    '2 = le chemin n'est pas renvoyé
    'TitreFiltre = Titre du filtre
    'Exemple: Fichier Access
    'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
    'TypeFichier = Extention du fichier (Sans le .)
    'Exemple: MDB
    'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
    'RepParDefaut = Répertoire d'ouverture par defaut
    'Exemple: C:\windows\system32
    'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application
     
    Dim StructFile                As OPENFILENAME
    Dim sFiltre                   As String
    Dim iStr()                    As String
    Dim iStr1()                    As String
    Dim i                         As Integer
    Dim j                         As Integer
     
        'Construction du filtre en fonction des arguments spécifiés
        If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
            sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
        End If
        sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)
        'sFiltre = "StoMo (StoMo*.mdb)" & Chr$(0) & "StoMo*.mdb" & Chr$(0)
     
        'Configuration de la boîte de dialogue
        With StructFile
            .lStructSize = Len(StructFile)    'Initialisation de la grosseur de la structure
            .hwndOwner = Handle    'Identification du handle de la fenêtre
            .lpstrFilter = sFiltre    'Application du filtre
            .lpstrFile = String$(254, vbNullChar)    'Initialisation du fichier '0' x 254
            .nMaxFile = 254    'Taille maximale du fichier
            .lpstrFileTitle = String$(254, vbNullChar)    'Initialisation du nom du fichier '0' x 254
            .nMaxFileTitle = 254  'Taille maximale du nom du fichier
            .lpstrTitle = Titre    'Titre de la boîte de dialogue
            .flags = OFN_ALLOWMULTISELECT + OFN_EXPLORER 'OFN_HIDEREADONLY & 'Option de la boite de dialogue
            If IsNull(RepParDefaut) Or RepParDefaut = "" Then
                RepParDefaut = CurrentDb.Name
                PathStripPath (RepParDefaut)
                .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid(RepParDefaut, 1, InStr(1, RepParDefaut, vbNullChar) - 1)))
            Else
                .lpstrInitialDir = RepParDefaut
            End If
        End With
     
        If GetOpenFileName(StructFile) Then    'Si un fichier est sélectionné
            iStr = Split(StructFile.lpstrFile, Chr(0))
            j = UBound(iStr)
            For i = 0 To j
                If Len(Trim(iStr(i))) <> 0 Then
                    Select Case TypeRetour
                        Case 1
                            ReDim Preserve iStr1(i)
                            iStr1(i) = iStr(i)
                        Case 2
                            If i <> 0 Then
                                ReDim Preserve iStr1(i - 1)
                                iStr1(i - 1) = iStr(i)
                            End If
                    End Select
                Else
                    i = j
                End If
            Next
        End If
    End Function
    1/ récupérer le code de la FAQ pour voir les bonnes déclarations.
    2/ ajouter le code présent.
    [Access] Les bases du débogage => ici

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour Kloun,

    Ta proposition m’intéresse, mais je ne parviens pas à l’utiliser.

    Avec 1 seul fichier à la fois, j’utilise la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Chemin = OuvrirUnFichier(Me.Hwnd, "UN", 1)
    En Supposant que l’utilisateur ait sélectionné 2 fichiers avec OuvrirPlusieursFichiers, quelle serait la syntaxe pour récupérer chaque chemin dans Me.chemin1 et Me.chemin2 ?

    J’ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me. Chemin1 = OuvrirPlusieursFichiers(Me.Hwnd, "plusieurs", 1)(0)
    ---> erreur 9 : L’indice n’appartient pas à la sélection

    En fait, je ne comprends pas
    La fonction renvoie un tableau de chaîne
    Peux-tu adapter mon bout de code ?
    Merci déjà.

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Tests du matin, chagrin => plusieurs modifs.
    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
    Public Function OuvrirPlusieursFichiers(Handle As Long, _
                                            Titre As String, _
                                            TypeRetour As Byte, _
                                            Optional TitreFiltre As String, _
                                            Optional TypeFichier As String, _
                                            Optional RepParDefaut As String) As String()
    'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir la boîte de dialogue de sélection de plusieurs fichiers.
    ' La fonction renvoie un tableau de chaine
    'Explication des paramètres
    'Handle = le handle de la fenêtre (Me.Hwnd)
    'Titre = Titre de la boîte de dialogue
    'TypeRetour (Définit si le chemin est renvoyé par la fonction ou pas)
    '1 = le chemin est renvoyé dans le 1er élément du tablau
    '2 = le chemin n'est pas renvoyé
    'TitreFiltre = Titre du filtre
    'Exemple: Fichier Access
    'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
    'TypeFichier = Extention du fichier (Sans le .)
    'Exemple: MDB
    'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
    'RepParDefaut = Répertoire d'ouverture par defaut
    'Exemple: C:\windows\system32
    'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application
     
    Dim StructFile                As OPENFILENAME
    Dim sFiltre                   As String
    Dim iStr()                    As String
    Dim iStr1()                   As String
    Dim i                         As Integer
    Dim j                         As Integer
    Dim iStr_Chemin               As String
     
        'Construction du filtre en fonction des arguments spécifiés
        If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
            sFiltre = TitreFiltre & " (." & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
        End If
        sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)
     
        'Configuration de la boîte de dialogue
        With StructFile
            .lStructSize = Len(StructFile)    'Initialisation de la grosseur de la structure
            .hwndOwner = Handle    'Identification du handle de la fenêtre
            .lpstrFilter = sFiltre    'Application du filtre
            .lpstrFile = String$(254, vbNullChar)    'Initialisation du fichier '0' x 254
            .nMaxFile = 254    'Taille maximale du fichier
            .lpstrFileTitle = String$(254, vbNullChar)    'Initialisation du nom du fichier '0' x 254
            .nMaxFileTitle = 254  'Taille maximale du nom du fichier
            .lpstrTitle = Titre    'Titre de la boîte de dialogue
            .flags = OFN_ALLOWMULTISELECT + OFN_EXPLORER '& 'Option de la boite de dialogue
            If IsNull(RepParDefaut) Or RepParDefaut = "" Then
                RepParDefaut = CurrentDb.Name
                PathStripPath (RepParDefaut)
                .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid(RepParDefaut, 1, InStr(1, RepParDefaut, vbNullChar) - 1)))
            Else
                .lpstrInitialDir = RepParDefaut
            End If
        End With
     
        If GetOpenFileName(StructFile) Then    'Si un fichier au moins est sélectionné
            iStr = Split(StructFile.lpstrFile, Chr(0))
            j = UBound(iStr)
            For i = 0 To j
                If Len(Trim(iStr(i))) <> 0 Then
                    Select Case TypeRetour
                        Case 1
                            ReDim Preserve iStr1(i)
                            iStr1(i) = iStr(i)
                        Case 2
                            If i <> 0 Then
                                ReDim Preserve iStr1(i - 1)
                                iStr1(i - 1) = iStr(i)
                            End If
                    End Select
                Else
                    i = j
                End If
            Next
            If UBound(iStr1) = 0 Then
                ReDim Preserve iStr1(1)
                iStr_Chemin = Left(iStr1(0), InStrRev(iStr1(0), "\"))
                iStr1(1) = Right(iStr1(0), Len(iStr1(0)) - Len(iStr_Chemin))
                iStr1(0) = iStr_Chemin
            End If
        Else
            ReDim iStr1(1)
            iStr1(0) = ""
            iStr1(1) = ""
        End If
        OuvrirPlusieursFichiers = iStr1
    [Access] Les bases du débogage => ici

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Matin, chagrin.
    Pour ce soir, espoir ?

    sans doute encore une imperfection.

    Dans c:\MesDocuments, je choisis successivement select1.doc, select2.doc, select3.doc

    j'exécute ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim resultat() As String
    resultat = OuvrirPlusieursFichiers(Me.Hwnd, "plusieurs", 1, , , "c:\MesDocuments")
    Debug.Print "1: " & resultat(0) & " | 2: " & resultat(1) & " | 3: " & resultat(2)
    J'obtiens ceci :

    1: C:\MesDocuments | 2: select3.doc | 3: select1.doc


    Je ne suis pas trop à l'aise dans ton code --> je ne peux pas proposer une correction.

    En tout cas merci.

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    C'est le résultat attendu (en tout cas pour moi)
    Si tu avais mis tu aurais eu le dernier fichier sélectionné.

    Si le 3ème paramètre de la fonction est 1, le 1er élément du tableau est le répertoire (sauf si annulation lors de la sélection auquel cas le 1er élément = "")
    Ensuite, les éléments du tableau sont les noms des fichiers (sauf si annulation lors de la sélection auquel cas le 2nd élément = "").

    Si le 3ème paramètre de la fonction est 2, on a tout de suite les noms des fichiers (sauf si annulation lors de la sélection auquel cas les 2 1ers éléments = "").
    [Access] Les bases du débogage => ici

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/06/2009, 09h17
  2. Réponses: 0
    Dernier message: 08/06/2009, 13h57
  3. Sélection plusieurs fichiers pour Upload
    Par SALISTASE dans le forum ASP.NET
    Réponses: 7
    Dernier message: 05/05/2009, 18h12
  4. Réponses: 2
    Dernier message: 30/08/2007, 23h15
  5. Réponses: 5
    Dernier message: 01/06/2007, 12h28

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