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 :

Choisir le répertoire de sauvegarde pour une exportation [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut Choisir le répertoire de sauvegarde pour une exportation
    Bonjour le forum,

    Je voudrais laisser à mes utilisateurs le choix de choisir le fichier vers lequel ils veulent exporter des formulaires. En fouinant un peu, j'ai trouvé ce code (mille excuses à l'auteur dont j'ai effacé le nom et que je ne retrouve pas).

    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
    Function ChoisirDossierDeSauvegarde()
     
    '------ Cette fonction demande à l'utilisateur de choisir le répertoire dans lequel il veut sauvegarder son exportation.
     
    Dim ObjShell As Object, ObjFolder As Object
    Dim Message As String, strChemin As String
     
    Message = "Choisissez le répertoire dans lequel vous voulez sauvegarder le fichier:"
     
    Set ObjShell = CreateObject("Shell.Application")
    Set ObjFolder = ObjShell.BrowseForFolder(&H0&, Message, 1)
     
    On Error Resume Next 'Si on sort sans sélection
    strChemin = ObjFolder.ParentFolder.ParseName(ObjFolder.Title).Path & ""
    ChoisirDossierDeSauvegarde = strChemin
     
    End Function
    Au clic sur un bouton, j'obtiens cette fenêtre et l'utilisateur choisit son répertoire, puis le reste de mon code fait l'exportation.
    Le problème est que si mon utilisateur clique sur "Mes Documents", la fonction renvoie une variable strChemin vide, et que je ne comprends pas pourquoi.
    Est-ce que ça vous est déjà arrivé? Ou est-ce que vous avez un autre code qui me permettrait en plus de laisser à l'utilisateur de choisir le nom de l'exportation (Dossier machin.xls, par exemple)?
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Essaie en remplaçant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChemin = ObjFolder.ParentFolder.ParseName(ObjFolder.Title).Path & ""
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChemin = ObjFolder.Self.Path

    Pour ta dernière question essaie (Access 2002 minimum)
    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
    Function EnregistrerSous(Optional sTitre As String, _
                              Optional sDossier As String, _
                              Optional sFichier As String) As String
     
    Dim fdlg As Object
    Dim strFichEnrSous As String
    ' Remarque : Pas de filtres possibles en mode SaveAs
    '            il n'y a que *.*
    Set fdlg = Application.FileDialog(2)  ' 2 = msoFileDialogSaveAs
    ' Mode vue liste
    fdlg.InitialView = 1 ' 1 = msoFileDialogViewList
    ' Paramètres - Valeurs par défaut
    If Len(sTitre) = 0 Then sTitre = "Exporter sous"
    If Len(sDossier) = 0 Then sDossier = CurrentProject.Path
    If Len(sFichier) = 0 Then sFichier = "Nom Par Defaut.csv"
    ' Chemin et nom par défaut
    fdlg.InitialFileName = sDossier & "\" & sFichier
    ' Titre de la boîte de dialogue
    fdlg.Title = sTitre
    ' Ouverture de la boîte de dialogue
    If fdlg.Show Then
       strFichEnrSous = fdlg.SelectedItems(1)
    End If
    ' Valeur de retour de la fonction
    EnregistrerSous = strFichEnrSous
    ' Liberation variable objet
    Set fdlg = Nothing
    End Function
    A+

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Bonjour,

    Super, ton code me convient parfaitement. C'est bien mieux que ma solution actuelle. Merci.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par LedZeppII Voir le message
    Bonjour,

    Essaie en remplaçant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChemin = ObjFolder.ParentFolder.ParseName(ObjFolder.Title).Path & ""
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChemin = ObjFolder.Self.Path

    Pour ta dernière question essaie (Access 2002 minimum)
    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
    Function EnregistrerSous(Optional sTitre As String, _
                              Optional sDossier As String, _
                              Optional sFichier As String) As String
     
    Dim fdlg As Object
    Dim strFichEnrSous As String
    ' Remarque : Pas de filtres possibles en mode SaveAs
    '            il n'y a que *.*
    Set fdlg = Application.FileDialog(2)  ' 2 = msoFileDialogSaveAs
    ' Mode vue liste
    fdlg.InitialView = 1 ' 1 = msoFileDialogViewList
    ' Paramètres - Valeurs par défaut
    If Len(sTitre) = 0 Then sTitre = "Exporter sous"
    If Len(sDossier) = 0 Then sDossier = CurrentProject.Path
    If Len(sFichier) = 0 Then sFichier = "Nom Par Defaut.csv"
    ' Chemin et nom par défaut
    fdlg.InitialFileName = sDossier & "\" & sFichier
    ' Titre de la boîte de dialogue
    fdlg.Title = sTitre
    ' Ouverture de la boîte de dialogue
    If fdlg.Show Then
       strFichEnrSous = fdlg.SelectedItems(1)
    End If
    ' Valeur de retour de la fonction
    EnregistrerSous = strFichEnrSous
    ' Liberation variable objet
    Set fdlg = Nothing
    End Function
    A+
    Bonjour LedZeppII, quel est la différence entre ton code et celui donné par neiluj26 ? Je n'ai pas bien saisi la question de neiluj26 ?
    Je te demande ça car je dois aussi afficher une boite de dialog pour choisir un repertoire.

    Merci

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Bonjour,

    Il faut sûrement adapter, mais j'ai ajouté cette ligne de code à la fin au cas où mon utilisateur efface l'extension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(InStrRev(strFichEnrSous, "\", , vbTextCompare), strFichEnrSous, ".", vbTextCompare) = 0 Then strFichEnrSous = strFichEnrSous & ".xlsx"
    Quant à la différence entre les deux codes... mon code ne faisait qu'ouvrir une fenêtre de sélection de répertoire assez moche, et ne permettait pas de trouver le nom donné au fichier à sauvegarder.
    La solution de LedZeppII permet d'ouvrir la fenêtre Enregistrer Sous "habituelle" et de pouvoir retrouver le nom donné au fichier sauvegardé par l'utilisateur. C'est bien plus complet.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par neiluj26 Voir le message
    Bonjour,

    Il faut sûrement adapter, mais j'ai ajouté cette ligne de code à la fin au cas où mon utilisateur efface l'extension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(InStrRev(strFichEnrSous, "\", , vbTextCompare), strFichEnrSous, ".", vbTextCompare) = 0 Then strFichEnrSous = strFichEnrSous & ".xlsx"
    Quant à la différence entre les deux codes... mon code ne faisait qu'ouvrir une fenêtre de sélection de répertoire assez moche, et ne permettait pas de trouver le nom donné au fichier à sauvegarder.
    La solution de LedZeppII permet d'ouvrir la fenêtre Enregistrer Sous "habituelle" et de pouvoir retrouver le nom donné au fichier sauvegardé par l'utilisateur. C'est bien plus complet.
    OK merci Neiluj26

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Bonjour, devant utiliser la fonctionnalité qui consiste a choisir le dossier de sauvegarde, je me penche sur la question, et en parcourant le forum, j'ai trouvé ce post :
    http://www.developpez.net/forums/d17...s/explorateur/

    Le code du lien ci-dessus est un peu plus complexe, je me demande donc quelle différence y a t-il avec celui de neiluj pour savoir lequel je dois utiliser ?

    Il utilise des librairie alors que celui de neiluj non. Est ce que celui de neiluj fonctionnera sur n'importe quel type de windows de versions access etc...

    Merci de votre aide.
    a bientot.

    David

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Pour moi, les deux codes pour choisir un dossier sont identiques.

    Argyronet fait appel aux fonctions de l'API Windows.
    Cela nécessite des déclarations (Private Declare ...) pour que VBA sache comment appeler les fonctions et dans quelle dll les trouver.

    neiluj26 fait appel à l'objet Shell.Application (Microsoft Shell Controls And Automation) qui inclut une méthode pour appeler, vraisemblablement, la même fonction.
    Le travail est "prémaché" et plus simple en VBA avec Shell.Application.
    neiluj26 n'utilise pas de référence VBA, mais on peut en mettre une à "Microsoft Shell Controls And Automation".
    Au lieu d'écrire ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ObjShell As Object
     
    Set ObjShell = CreateObject("Shell.Application")
    ... on écrirait (avec la référence VBA) ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ObjShell As Shell32.Shell
     
    Set ObjShell = New Shell32.Shell

    Les deux méthodes sont, à mon avis, sensibles à la version de Windows.

    A+

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par LedZeppII Voir le message
    Les deux méthodes sont, à mon avis, sensibles à la version de Windows.
    Bonjour LedZeppII, est-ce que cela veut dire que selon la version de windows, ces deux codes peuvent ou non fonctionner?
    Si oui lequel de ces deux codes fonctionnera sur tous les windows.
    J'avoue avoir une préférence pour le code de neiluj bien plus simple...
    Merci

  10. #10
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour _developpeur_,

    J'aurai une préférence pour la méthode de neiluj, moi aussi.
    Elle est plus simple.
    Elle est peut-être moins dépendante de la version de Windows, mais ça je ne peut pas le vérifier.
    Ce dont je suis un peu plus sûr, c'est que la version avec API fonctionne avec un Windows 32-bits,
    mais risque de pas fonctionner avec un Windows 64-bits et Acces 64-bit (voir Développer avec Office 64 bits).

    Il y a une autre possiblité.
    A partir d'Access 2003 (à vérifier; Ok avec 2007) on peut utiliser FileDialog.
    L'affichage est un peu différent de celui de BrowseForFolder.

    En ajoutant une référence VBA à Microsoft Office xx.x Object Library :
    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
    Function ChoisirDossier(Optional sTitre As String, _
                            Optional sDossier As String) As String
    Dim fdlg As Office.FileDialog
    Dim strDossier As String
     
    Set fdlg = Application.FileDialog(msoFileDialogFolderPicker)
    ' Paramètres - Valeurs par défaut
    If Len(sTitre) = 0 Then sTitre = "Sélectionnez un dossier"
    If Len(sDossier) = 0 Then sDossier = CurrentProject.Path & "\"
    ' Chemin par défaut
    fdlg.InitialFileName = sDossier
    ' Titre boîte de dialogue
    fdlg.Title = sTitre
    ' Interdire sélection multiple
    fdlg.AllowMultiSelect = False
    ' Ouvrir boîte de dialogue
    If fdlg.Show Then
       strDossier = fdlg.SelectedItems(1)
    End If
    ' Libérer variable objet
    Set fdlg = Nothing
    ' Valeur de retour de la fonction
    ChoisirDossier = strDossier
    End Function
    Sans référence VBA à Microsoft Office xx.x Object Library :
    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
    Function ChoisirDossier(Optional sTitre As String, _
                            Optional sDossier As String) As String
    Dim fdlg As Object
    Dim strDossier As String
     
    Set fdlg = Application.FileDialog(4) ' 4 = msoFileDialogFolderPicker
    ' Paramètres - Valeurs par défaut
    If Len(sTitre) = 0 Then sTitre = "Sélectionnez un dossier"
    If Len(sDossier) = 0 Then sDossier = CurrentProject.Path & "\"
    ' Chemin par défaut
    fdlg.InitialFileName = sDossier
    ' Titre boîte de dialogue
    fdlg.Title = sTitre
    ' Interdire sélection multiple
    fdlg.AllowMultiSelect = False
    ' Ouvrir boîte de dialogue
    If fdlg.Show Then
       strDossier = fdlg.SelectedItems(1)
    End If
    ' Libérer variable objet
    Set fdlg = Nothing
    ' Valeur de retour de la fonction
    ChoisirDossier = strDossier
    End Function
    A+

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Bonjour LedZepp, merci beaucoup je vais prendre ta dernière solution sans références.
    Encore merci

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

Discussions similaires

  1. Choisir le répertoire par défaut pour
    Par junior76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/11/2008, 18h03
  2. [XSLT] Le format XML pour une exportation de données
    Par petchos dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 03/04/2008, 09h40
  3. Réponses: 13
    Dernier message: 18/03/2008, 15h17
  4. Réponses: 11
    Dernier message: 08/05/2007, 14h24
  5. Réponses: 6
    Dernier message: 11/05/2006, 18h33

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