Forum Clubic

Recuperer l'extension d'un fichier avec l'API GetSaveFileName

Bonjour,
Je me développe un petit truc sous access en vba, et j’aimerais avoir l’aide de quelqu’un :stuck_out_tongue:
Voila, j’ai une fonction qui me permet d’exporter ma base dans un fichier en ouvrant la boite de dialogue “Enregistrer sous” via l’API GetSaveFileName! J’arrive a recuperer le chemin du fichier où l’on veut enregistrer le fichier, mais pas le format (extension) choisi.

Voici mon code :
Dans un module:


'------------------------------------EXPLORATEUR DE FICHIER------------------------------------------
Type OPENFILENAME
lStructSize As Long                  'taille de la structure
hwndOwner As Long                    'descripteur de la fenêtre parent de la boîte de dialogue
hInstance As Long                    'instance de l 'application courante
lpstrFilter As String                'définit les extensions affichées dans la b. de dialogue.
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long                 'index du filtre à utiliser par défaut.
lpstrFile As String                  'nom du fichier affiché à l'ouverture de la fenêtre
nMaxFile As Long                     'taille du tampon mémoire précédent
lpstrFileTitle As String             'contient le nom et extension du fichier sans le chemin
nMaxFileTitle As Long                'taille du tampon mémoire précédent
lpstrInitialDir As String            'répertoire initial de la boîte de dialogue
lpstrTitle As String                 'titre de la fenêtre
flags As Long                        'ensemble de constantes désignant les caractéristiques de la fenêtre
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String                'extension ajoutée par défaut si l'usager l'omet
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
'Constantes pour l'ouverture ou la sauvegarde d'un fichier
Public Const OFN_ALLOWMULTISELECT = &H200      'Autorise la sélection multiple de fichiers
Public Const OFN_CREATEPROMPT = &H2000         'Affiche une fenêtre de confirmation de création de fichier
Public Const OFN_ENABLEHOOK = &H20 'Public Const OFN_ENABLESIZING
Public Const OFN_ENABLETEMPLATE = &H40
Public Const OFN_ENABLETEMPLATEHANDLE = &H80
Public Const OFN_EXPLORER = &H80000               'Donne le style "Explorer" à la boîte de dialogue (par défaut)
Public Const OFN_EXTENSIONDIFFERENT = &H400   'Indique que l 'usager a choisi une extension différente de celle par défaut
Public Const OFN_HIDEREADONLY = &H4           'Case à cocher "Lecture seule" invisible
Public Const OFN_FILEMUSTEXIST = &H1000       'Seuls les fichiers existants peuvent être saisis
Public Const OFN_LONGNAMES = &H200000         'Gestion des noms longs pour les b. de dialogue n'ayant pas le Style "Explorer"
Public Const OFN_NOCHANGEDIR = &H8            'Conserve le répertoire d 'origine à la fermeture de la fenêtre
Public Const OFN_NODEREFERENCELINKS = &H100000 'La b. dialogue prendra le nom et le chemin du raccourci sélectionné
Public Const OFN_NOLONGNAMES = &H40000        'Utilise les noms de fichiers courts (sans effet sur les fenêtres du type "Explorer"
Public Const OFN_NONETWORKBUTTON = &H20000    'Désactive le bouton "Réseau"
Public Const OFN_NOREADONLYRETURN = &H8000    'Ne sélectionne pas la case à cocher "Lecture seule"
Public Const OFN_NOTESTFILECREATE = &H10000   'Le fichier ne sera pas créé avant la fermeture de la fenêtre
Public Const OFN_NOVALIDATE = &H100           'Ne vérifie pas la validité de la saisie (validité du nom de fichier)
Public Const OFN_OVERWRITEPROMPT = &H2        'Afficher un msg de confirmation d 'écrasement de fichier si celui-ci existe déjà
Public Const OFN_PATHMUSTEXIST = &H800        'Les chemins et fichiers saisis doivent exister
Public Const OFN_READONLY = &H1               'La case "Lecture seule" est cochée à la création de la fenêtre
Public Const OFN_SHAREAWARE = &H4000          'Ignorer les erreurs de partage réseau
Public Const OFN_SHOWHELP = &H10              'Afficher le bouton "Aide" dans la boîte de dialogue
Public Const OFN_SHAREFALLTHROUGH = 2
Public Const OFN_SHARENOWARN = 1
Public Const OFN_SHAREWARN = 0
'Ouvrir la boîte de dialogue permettant d'ouvrir un fichier sans passer par un contrôle ActiveX fichier sans passer par un contrôle ActiveX
Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pSavefilename As OPENFILENAME) As Long
'-------------------------------------------------------------------------------------------------------------------

La fonction qui me permet d’exporter:


Private Sub exporter_Click()
Dim source As String
Dim fichier As String
Dim extension As String
Dim filtre As String
Dim dlgFichier As OPENFILENAME
Dim RetVal As Long

Select Case liste
    Case "1": source = "SELECT * FROM rq_tous"
    Case "2": source = "SELECT * FROM rq_incomplets"
    Case "3": source = "SELECT * FROM rq_empruntés"
End Select


'Objectif: obtenir la boîte de dialogue de Windows "Enregistrer sous" sans contrôle ActiveX
filtre = "Page Web (*.html)" & vbNullChar & "*.html" & vbNullChar & "CSV (séparateur: point-virgule) (*.csv)" & vbNullChar & "*.csv" & vbNullChar & "Fichier texte (*.txt)*.txt" & vbNullChar & vbNullChar
dlgFichier.lStructSize = Len(dlgFichier)
dlgFichier.hwndOwner = Me.Hwnd
dlgFichier.hInstance = 0
dlgFichier.lpstrFilter = filtre
dlgFichier.nFilterIndex = 1 'par défaut liste la 1ère extension définie dans le filtre
dlgFichier.lpstrFile = String(254, vbNullChar)
dlgFichier.nMaxFile = 255
dlgFichier.lpstrFileTitle = String(254, vbNullChar)
dlgFichier.nMaxFileTitle = 255
dlgFichier.lpstrInitialDir = "C:\"
dlgFichier.lpstrTitle = "Enregistrer sous"
dlgFichier.flags = OFN_FILEMUSTEXIST ' Or OFN_PATHMUSTEXIST Or OFN_HIDEREADONLY Or 0
RetVal = GetSaveFileName(dlgFichier)
If RetVal >= 1 Then
   fichier = dlgFichier.lpstrFile
   fichier = Replace(fichier, vbNullChar, "", , , vbTextCompare)
Else
   fichier = ""
End If

If fichier <> "" Then
    Select Case Format
        Case "1": MakeTXT source, fichier
        Case "2": MakeCSV source, fichier
        Case "3": MakeHTML source, fichier
    End Select
End If

DoCmd.Close acForm, "export"
End Sub

Ce que j’aimerais, c’est récuperer l’extension du fichier que l’utilisateur a choisi parmis les 3 proposées dans le filtre pour envoyer le chemin complet du fichier (extension comprise) dnas mes fonction makecsv, makehtml et maketxt, car actuellemnt la fonction me retourne le chemin complet sans les extensions (.html .txt ou .csv)
Voila :slight_smile:

Et ça : dlgFichier.nFilterIndex ?

(avec le commentaire qui suit)

C’est bon , c’était bien nFilterIndex qui contenant bien l’index du filtre choisi ! Merci :slight_smile: