OVH Cloud OVH Cloud

Sélection multiple avec OpenFile

7 réponses
Avatar
Stéphane Lavergne
Bonjour,

Grâce à l'exemple disponible sur :
http://perso.wanadoo.fr/access2000/dialogue1.htm
du site à Raymond,

j'utilise la fonction GetOpenFileName de l'API CommonDialog
avec la fonction de Raymond "OpenFile(répertoire)"

J'aimerais également utiliser cette fonction mais avec sélection multiple.

Je remarque qu'il existe 1 constante
Public Const OFN_AllowMultiSelect = &H200

mais je ne sais pas comment l'utiliser.

Je ne sais pas s'il y a 1 rapport avec
.Flags = 6148
qui cumulerait peut-être toutes les constantes.

Merci d'avance
Stéphane

7 réponses

Avatar
Stéphane Lavergne
Désolé...
Je vous ai dérangé pour rien.
En cherchant de plus près,
le flag 6148 est bien égal à 1804 en hexadécimal
qui est la somme des constantes
OFN_FileMustExist

OFN_HideReadOnly

OFN_PathMustExist


Je n'ai plus qu'à rajouter
.flags48 or OFN_AllowMultiSelect

Cordialement
Stéphane

"Stéphane Lavergne" a écrit dans le
message de news:
Bonjour,


Avatar
Stéphane Lavergne
Bonjour,

En effet.. j'ai vu ca : si le nom contient 1 espace, il met le nom court car
apparement à cause du résultat renvoyé par la fonction qui est séparé par
des espaces entre chaque fichier (chemin espace fichier1 espace fichier
suivant etc).
Je vais essayer d'ajouter la constante OFN_LongNames. Je vais aussi voir ce
que fait OFN_EXPLORER.

Cordialement,
Stéphane

"Anor" a écrit dans le message de
news:3f1da007$0$15310$
Bonjour


| Désolé...
| Je vous ai dérangé pour rien.
| Je n'ai plus qu'à rajouter
| .flags48 or OFN_AllowMultiSelect

euh tu as réussi ?
moi aussi, mais ça m'ouvre la boite de dialogue de winfile !!
La sélection multiple fonctionne, mais côté noms longs, ce n'est pas top
!!


--
à+
Arnaud
----------------------------------------------
Conseils d'utilisation, sites recommandés :
http://users.skynet.be/mpfa/
Access Memorandum - Les tablettes d'Anor
www.anor.fr.st
----------------------------------------------




Avatar
Stéphane Lavergne
Bonjour,

J'ai trouvé pour sélectionner les noms longs :
il faut bien rajouter les 2 constantes OFN_LongNames et OFN_EXPLORER.

.flags48 or OFN_AllowMultiSelect or OFN_LongNames or OFN_EXPLORER

La fonction retourne LeChemin & chr(0) & LeFichier1 & chr(0) &
LeFichierSuivant & chr(0) & LeFichierSuivant & chr(0) etc...

Je fais 1 morceau de code pour récupérer LeChemin et LesFichiers

Cordialement,
Stéphane

"Anor" a écrit dans le message de
news:3f1da007$0$15310$
Bonjour
moi aussi, mais ça m'ouvre la boite de dialogue de winfile !!
La sélection multiple fonctionne, mais côté noms longs, ce n'est pas top
!!


Avatar
Stéphane Lavergne
ouioui... c bien 6148 :)

Stéphane

"Jessy SEMPERE" a écrit dans le message de
news:bfll22$g13$
Génial ça ;-)))))

Juste une remarque mais je pense que c'est une erreur de frappe...
Chez moi il faut mettre :
.Flags = 6148 Or OFN_AllowMultiSelect Or OFN_LongNames Or OFN_EXPLORER

Merci
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Stéphane Lavergne" a écrit dans le
message news: #
Bonjour,
.flags48 or OFN_AllowMultiSelect or OFN_LongNames or OFN_EXPLORER




Avatar
Stéphane Lavergne
Si ca peut intéresser, pour récupérer le chemin et les fichiers

Cordialement,
Stéphane

dim nom_du_chemin_et_des_fichiers as string
dim i as integer
Dim nb_fichier As Byte
Dim début_fichier As Integer
Dim fichier() As String
Dim code_caractère As Integer

nom_du_chemin_et_des_fichiers = OpenFile("c:")

If nom_du_chemin_et_des_fichiers > "" Then

début_fichier = 1
nb_fichier = 0

'! ne pas etre en option base 1
'fichier(0) contient le chemin
'fichier(n) contient les n fichiers
For i = 1 To Len(nom_du_chemin_et_des_fichiers )
code_caractère = Asc(Mid(nom_du_chemin_et_des_fichiers , i, 1))
If code_caractère = 0 Then
ReDim Preserve fichier(nb_fichier)
fichier(nb_fichier) = Mid(nom_du_chemin_et_des_fichiers ,
début_fichier, i - 1)
nb_fichier = nb_fichier + 1
début_fichier = i + 1
End If
Next i

'pour regarder le resultat
For i = 0 To nb_fichier - 1
MsgBox "Fichier " & i & " sur " & nb_fichier & " =" & fichier(i)
Next i
Avatar
Stéphane Lavergne
Erratum

Remplacer :
fichier(nb_fichier) = Mid(nom_du_chemin_et_des_fichiers, début_fichier, i -
1)

par :
fichier(nb_fichier) = Mid(nom_du_chemin_et_des_fichiers, début_fichier, i -
début_fichier)

Stéphane

"Stéphane Lavergne" a écrit dans le
message de news:%
Si ca peut intéresser, pour récupérer le chemin et les fichiers


Avatar
Jessy SEMPERE
Re,
Si ca peut intéresser, pour récupérer le chemin et les fichiers


Oh ben moi tout m'interresse... ;-)
Pour info perso j'avais fait de cette manière, pour obtenir
un message il faut lancer : OpenMultiFile_EXE
sinon en lançant OpenMultiFile, tu remplis la variable
tableau tabFile().

****************************************
Public TabFile() As String

Public Function OpenMultiFile_EXE()
Dim strMsg As String
Dim intfile As Integer
OpenMultiFile
If UBound(tabFile) = 1 Then
strMsg = "Le fichier sélectionné est :" & vbCrLf
strMsg = strMsg & vbCrLf & vbTab & tabFile(0)
Else
strMsg = "Les fichiers sélectionnés sont :" & vbCrLf
For intfile = 0 To UBound(tabFile) - 1
strMsg = strMsg & vbCrLf & vbTab & tabFile(intfile)
Next
End If
MsgBox strMsg
End Function

Public Function OpenMultiFile()
Dim strDir As String
Dim strFile As String
Dim intfile As Integer
Dim nb%

strFile = OpenFile("d:")

If strFile <> "" Then
nb = InStr(1, strFile, Chr(0))
Do While nb > 0
intfile = intfile + 1
nb = InStr(nb + Len(Chr(0)), strFile, Chr(0))
Loop
If intfile <= 2 Then
intfile = 1
ReDim tabfile(1)
tabfile(0) = Left(strFile, InStr(1, strFile, Chr(0)) - 1)
Else
intfile = intfile - 2
nb = InStr(1, strFile, Chr(0))
strDir = Left(strFile, nb - 1)
ReDim tabfile(intfile)
For intfile = 0 To UBound(tabfile) - 1
tabfile(intfile) = strDir & Mid(strFile, nb + 1, _
InStr(nb + Len(Chr(0)), strFile, Chr(0)) - (nb + 1))
nb = InStr(nb + Len(Chr(0)), strFile, Chr(0))
Next
End If
End If
End Function
****************************************

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
Cordialement,
Stéphane

dim nom_du_chemin_et_des_fichiers as string
dim i as integer
Dim nb_fichier As Byte
Dim début_fichier As Integer
Dim fichier() As String
Dim code_caractère As Integer

nom_du_chemin_et_des_fichiers = OpenFile("c:")

If nom_du_chemin_et_des_fichiers > "" Then

début_fichier = 1
nb_fichier = 0

'! ne pas etre en option base 1
'fichier(0) contient le chemin
'fichier(n) contient les n fichiers
For i = 1 To Len(nom_du_chemin_et_des_fichiers )
code_caractère = Asc(Mid(nom_du_chemin_et_des_fichiers , i, 1))
If code_caractère = 0 Then
ReDim Preserve fichier(nb_fichier)
fichier(nb_fichier) = Mid(nom_du_chemin_et_des_fichiers ,
début_fichier, i - 1)
nb_fichier = nb_fichier + 1
début_fichier = i + 1
End If
Next i

'pour regarder le resultat
For i = 0 To nb_fichier - 1
MsgBox "Fichier " & i & " sur " & nb_fichier & " =" & fichier(i)
Next i