Exportation d'une requête Access avec un nom spécifique

Anonyme
2023-11-29T15:54:26+00:00

Bonjour,

J’ai créé une base qui me permet de gérer des périodes de stage en entreprise. Je souhaiterais exporter une requête sur une période et une classe données. Lorsqu’il s’agit d’un état, je sais écrire le code VBA pour obtenir un fichier au nom spécifique selon les champs voulus. J’ai tenté de l’adapter pour exporter une requête. L’exportation se fait bien avec la période et la classe voulue dans le fichier désigné mais je n’arrive pas à lui ajouter dans le nom les variables.

Je reporte ici le code que j’ai tenté :

Dim Directory As String, fileName As String, filePath As String, SaisirVal As String

DoCmd.OpenQuery "nom de la requête"

Directory = "chemin de destination"

SaisirVal = [classe] & "-" &[période]

fileName = "stage" & SaisirVal & ".xls"

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "nom de la requête", Directory & fileName, False

DoCmd.Close acQuery, "nom de la requête", acSaveNo

Les champs entre crochets ne sont pas reconnus. Si je mets des guillemets, c’est le mot qui est repris et non la valeur du champ.

D'avance, merci à la personne qui saura éclairer ma lanterne !

Emma.

Microsoft 365 et Office | Access | Other | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

5 réponses

  1. Anonyme
    2023-11-30T14:36:52+00:00

    Salut,

    Désolé, je ne comprends toujours pas d'où proviennent concrètement ces deux valeurs.

    Peut-être que quelqu'un d'autre comprendra mieux la description.

    Servus
    Karl
    ****************
    Access Forever
    Access News
    Access DevCon
    Access-Entwickler-Konferenz AEK

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  2. Anonyme
    2023-11-29T17:12:25+00:00

    Salut,

    1. Où se trouve le code?
    2. Que sont exactement ces deux "champs" ?

    Des colonnes dans la requête ou des contrôles dans un formulaire ou des champs dans une table ou ... ?

    Servus
    Karl
    ****************
    Access Forever
    Access News
    Access DevCon
    Access-Entwickler-Konferenz AEK

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  3. Anonyme
    2023-12-03T18:27:16+00:00

    Bonjour,

    après de nombreux échanges avec Chat GPT, j'ai réussi à exporter des requêtes en fonction de certains critère, en l'occurence date et classe.

    Je vous reporte ici le code utilisé qui pourra être utile à d'autres :

    ' Référence à la bibliothèque Microsoft Excel nécessaire

    Dim db As DAO.Database 
    
    Dim rs As DAO.Recordset 
    
    Dim xlApp As Object 
    
    Dim xlWb As Object 
    
    Dim xlWs As Object 
    
    Dim queryName As String 
    
    Dim exportFileName As String 
    
    Dim selectedDate As Date 
    
    Dim selectedClass As String 
    
    ' Nom de la requête à exporter 
    
    queryName = "nom de la requete" 
    
    ' Initialiser Access 
    
    Set db = CurrentDb 
    
    ' Vérifier si la requête existe 
    
    If Not RequeteExiste(db, queryName) Then 
    
        MsgBox "La requête n'existe pas.", vbExclamation 
    
        Exit Sub 
    
    End If 
    
    ' Récupérer la date et la classe depuis les contrôles du formulaire 
    
    selectedDate = Me![deb] 
    
    selectedClass = Me![classe] 
    
    ' Construire le filtre pour la requête 
    
    Dim filter As String 
    
    filter = "[deb] = #" & Format(selectedDate, "yyyy-mm-dd") & "# AND [classe] = '" & selectedClass & "'" 
    
    ' Ouvrir la requête avec le filtre 
    
    Set rs = db.OpenRecordset("SELECT \* FROM " & queryName & " WHERE " & filter) 
    
    ' Vérifier si l'enregistrement a été trouvé 
    
    If Not rs.EOF Then 
    
        ' Obtenir dynamiquement le nom du champ (supposons que vous voulez le 5e champ) 
    
        Dim selectedFieldName As String 
    
        selectedDate = rs.Fields(1).Value 'colonne 2 
    
        selectedFieldName = rs.Fields(5).Value ' 5e champ (indice 4) 
    
        ' Nom du fichier Excel à exporter avec le nom du champ 
    
        exportFileName = "chemin et nom\_" & Format(selectedDate, "dd-MM-yy") & "\_" & selectedFieldName & ".xlsx" 
    
        ' Initialiser Excel 
    
        Set xlApp = CreateObject("Excel.Application") 
    
        Set xlWb = xlApp.Workbooks.Add 
    
        Set xlWs = xlWb.Worksheets(1) 
    
        ' Copier les en-têtes de colonnes dans Excel 
    
        For i = 1 To rs.Fields.Count 
    
            xlWs.Cells(1, i).Value = rs.Fields(i - 1).Name 
    
        Next i 
    
        ' Copier les données dans Excel 
    
        xlWs.Range("A2").CopyFromRecordset rs 
    
        ' Désactiver le message de confirmation pour écraser le fichier existant 
    

    xlApp.DisplayAlerts = False

        ' Sauvegarder le fichier Excel avec un nom spécifique 
    
        xlWb.SaveAs exportFileName 
    
        ' Fermer les objets Excel 
    
        xlWb.Close 
    
        xlApp.Quit 
    
        ' Libérer la mémoire 
    
        Set xlWs = Nothing 
    
        Set xlWb = Nothing 
    
        Set xlApp = Nothing 
    
    Else 
    
        MsgBox "Aucun enregistrement correspondant trouvé.", vbInformation 
    
    End If 
    
    ' Libérer la mémoire 
    
    rs.Close 
    
    Set rs = Nothing 
    
    Set db = Nothing 
    

    End Sub

    Function RequeteExiste(db As DAO.Database, queryName As String) As Boolean

    ' Vérifier si la requête existe dans la base de données 
    
    On Error Resume Next 
    
    Dim qdf As DAO.QueryDef 
    
    Set qdf = db.QueryDefs(queryName) 
    
    On Error GoTo 0 
    
    RequeteExiste = Not (qdf Is Nothing) 
    

    End Function

    Merci à ceux qui ont pris le temps de me lire et de m'aider Je mets cette discussion en résolu en validant via la réponse de Karl.

    Bonne soirée

    Emma.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2023-11-30T18:44:12+00:00

    Merci Karl d'avoir tenté de m'aider.

    j'ai fait un essai sur une base bidon. Voilà à quoi ressemble ma requête:

    j'ai positionné un bouton s''action sur un formulaire qui reprend les dates de départ en stage

    Si je clique sur le bouton, j'ai bien les données qui correspondent à la période voulue, par exemple, la 1e ligne du formulaire me donne bien la liste des 3 élèves concernés

    et je voudrais donc exporter ce choix dans un excel déposé dans un dossier en partage avec le collègue concerné par ces classes et périodes.

    J'arrive à extraire dans le bon fichier mais je n'arrive pas à lui donner le nom voulu: un mot générique "stage " et derrière le nom de la classe et la période.

    J'ai fait une impression d'écran de 2 fichiers excels: le 2e est celui a été généré par le bouton avec donc un nom générique. Et celui du haut est ce que j'aimerais pouvoir obtenir.

    Il parait qu'une image vaut plus que 1.000 mots. Voyons si c'est bien vrai !

    D'avance, merci.

    Emma.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. Anonyme
    2023-11-30T07:29:26+00:00

    Bonjour,

    merci pour votre réponse.

    1. le code est sur un bouton au clic, positionné dans un formulaire qui reprend les périodes de stage existantes :

    Image

    .

    1. les 2 champs classe et périodes sont des champs dans une table et une requête.

    La visualisation de l'extraction de la requête et la sauvegarde correspondent bien aux critères (classe et périodes). C'est bien la sauvegarde avec un nom spécifique qui coince. Tout de suite, je vais avoir "suivi stage.xlx" et j'aimerais "suivi stage_ classe_periode.xls" pour ne pas écraser les fichiers existants.

    Merci et bonne journée

    Emma.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire