Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ouverture de documents en mulitselect

3 réponses
Avatar
Miguel
Bonjour à tous
voilà j'utilise la routine que j'ai récupéré chez
http://access.seneque.free.fr/ouverture_document.htm

qui est celle là

Option Compare Database
Option Explicit

Public Const OFN_AllowMultiSelect = &H200
Public Const OFN_CreatePrompt = &H2000
Public Const OFN_EnableHook = &H20
Public Const OFN_EnableTemplate = &H40
Public Const OFN_EnableTemplateHandle = &H80
Public Const OFN_EXPLORER = &H80000
Public Const OFN_ExtensionDifferent = &H400
Public Const OFN_FileMustExist = &H1000
Public Const OFN_HideReadOnly = &H4
Public Const OFN_LongNames = &H200000
Public Const OFN_NoChangeDir = &H8
Public Const OFN_NoDeReferenceLinks = &H100000
Public Const OFN_NoLongNames = &H40000
Public Const OFN_NoNetWorkButton = &H20000
Public Const OFN_NoReadOnlyReturn = &H8000
Public Const OFN_NoTestFileCreate = &H10000
Public Const OFN_NoValiDate = &H100
Public Const OFN_OverWritePrompt = &H2
Public Const OFN_PathMustExist = &H800
Public Const OFN_ReadOnly = &H1
Public Const OFN_ShareAware = &H4000
Public Const OFN_ShareFallThrough = 2
Public Const OFN_ShareNoWarn = 1
Public Const OFN_ShareWarn = 0
Public Const OFN_ShowHelp = &H10
Public Dialogue As OpenFileName

Public strFiltre As String
Public strFile As String
Public strNomFile As String
Public RetVal As Long


Public Type OpenFileName
lStructSize As Long
hwndOwner As Long
Instance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustomFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpRépertoire_initial As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Public Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OpenFileName) As Long

Public Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OpenFileName) As Long

Public Function OpenFile(Répertoire_initial As String) As String

OpenFile = ""

strFiltre = "Fichiers Word" & Chr$(0) & "*.doc;*txt" & Chr$(0) & _
"Fichiers Access" & Chr$(0) & "*.mdb" & Chr$(0) & _
"Fichiers Excel" & Chr$(0) & "*.xls" & Chr$(0) & _
"Tous les fichiers" & Chr$(0) & "*.*"

With Dialogue
.lStructSize = Len(Dialogue)
.lpstrFilter = strFiltre
.lpstrFile = Space(254)
.nMaxFile = 255
.lpstrFileTitle = Space(254)
.nMaxFileTitle = 255
.lpRépertoire_initial = Répertoire_initial
.lpstrTitle = "Recherche d'un fichier"
' ' ' ' ' .Flags = 6148 mono selection
.Flags = 6148 Or OFN_FileMustExist Or OFN_EXPLORER Or OFN_AllowMultiSelect
End With

RetVal = GetOpenFileName(Dialogue)

If RetVal >= 1 Then
OpenFile = Trim(Dialogue.lpstrFile)
Else
OpenFile = ""
Exit Function
End If

End Function

Public Function SaveFile(Répertoire_initial As String) As String

SaveFile = ""

strFiltre = "Fichiers Access" & Chr$(0) & "*.mdb" & Chr$(0) & _
"Fichiers Excel" & Chr$(0) & "*.xls" & Chr$(0) & _
"Fichiers Word" & Chr$(0) & "*.doc" & Chr$(0) & _
"Tous les fichiers" & Chr$(0) & "*.*"

With Dialogue
.lStructSize = Len(Dialogue)
.lpstrFilter = strFiltre
.lpstrFile = Space(254)
.nMaxFile = 255
.lpstrFileTitle = Space(254)
.nMaxFileTitle = 255
.lpRépertoire_initial = Répertoire_initial
.lpstrTitle = "Sauvegarde d'un fichier"
.Flags = 6148
End With

RetVal = GetSaveFileName(Dialogue)

If RetVal >= 1 Then
SaveFile = Trim(Dialogue.lpstrFile)
Else
SaveFile = ""
Exit Function
End If

End Function


et si j'ouvre trop de doctuments en multiselect je n'ai rien en retour
je pense que c'est par rapport à la taille de .lpstrFile = space(254)
mais si je passe audessus la procedure ne marche plus
c'est embetant car je voudrais avoir la liste d'un bonne cinquantaine de
fichier d'un coup et je n'arrive pas à trouver le truc

Merci à tous

Miguel

3 réponses

Avatar
Raymond [mvp]
Bonjour.

cette api est l'api généralement utilisé ( surtout en mono sélection) qui ne
gère que 256 caractères et il n'est pas possible de la changer car c'est la
procèdure qu'il faut changer (elle est complètement différente )

pour ton info tu peux faire :
.lpstrFile = Space(4094)
.nMaxFile = 4095
.lpstrFileTitle = Space(4094)
.nMaxFileTitle = 4095

lpstrFile est le nom du fichier affiché à l'ouverture de la fenêtre.
nMaxFile est la longueur du buffer précédent.
lpstrFileTitle contient le nom et extension du fichier sans le chemin.
nMaxFileTitle est la longueur du buffer précédent

ce qui ne change rien car non géré.
je vais reprendre l'api complète pour voir, je laisserai un message si je
trouve quelque chose.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Miguel" a écrit dans le message de
news:407fd971$0$21178$
Bonjour à tous
voilà j'utilise la routine que j'ai récupéré chez
http://access.seneque.free.fr/ouverture_document.htm

et si j'ouvre trop de doctuments en multiselect je n'ai rien en retour
je pense que c'est par rapport à la taille de .lpstrFile = space(254)
mais si je passe audessus la procedure ne marche plus
c'est embetant car je voudrais avoir la liste d'un bonne cinquantaine de
fichier d'un coup et je n'arrive pas à trouver le truc

Merci à tous

Miguel


Avatar
Miguel
Salut Miguel,

Peut être faut t'il t'y prendre autrement.

En récupérant tous les documents qui sont dans un dossier en utilisant une fenetre de choix de dossier avec un Shell.

'Je cree un shell
Set sh = New Shell
'Je recupere un dossier
Set dossier = sh.BrowseForFolder(Screen.ActiveForm.hwnd, "Choisir un dossier pour récupérer les documents", 0)


Ensuite tu récupère tous les fichiers dudossier que tu met dans une table locale et puis tu affiche un formulaire ou l'utilisateur devra confirmer s'il importe ou pas le fichier.

Ensuite tu applique ce que tu veux comme action sur ces fichiers.

Bon courage.
Merci à tous pour vos réponses



Miguel

Avatar
Raymond [mvp]
Bonsoir Miguel.

Pour l'instant je n'ai pas trouvé de solution mais j'en ai profité pour
améliorer l'api actuelle entre la mono-sélection et la multi-sélection et
les valeurs retournées.
tu trouveras cette nouvelle api sur la page :
http://access.seneque.free.fr/ouverture_document.htm
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Miguel" a écrit dans le message de
news:407ffb5d$0$21164$