Bonjour,

Après avoir longuement parcouru la toile et essayer de nombreuses tentatives, je ne parviens à exporter de requêtes vers excel.

Soit il m'indique qu'il manque un argument (cas où j'utilise une requête existante), soit il m'indique une incompatibilité de type dans le cas présent ou je fais une requête temporaire.

La requête est filtrée à l'aide du résultat d'une liste déroulante d'un formulaire.

Voici le code :

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Private Sub Modifiable5_AfterUpdate()
'DoCmd.OpenReport "etat_Projets", acViewPreview
 
 
 
DoCmd.OpenQuery ("qryprojets")
 
    Dim xlApp As Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook
    Dim I As Long, J As Long
    Dim t0 As Long, t1 As Long
 
    t0 = Timer
    Dim rec As Recordset
    Dim qd As QueryDef
 
 
    Set qd = CurrentDb.CreateQueryDef("Requete_Temp", "SELECT NomProjet, DescriptionProjet" & _
            " FROM Projets " & _
            "WHERE Nom_Client = " & "'" & Forms!saisie_prospect_etat!Modifiable5() & "';")
    Set rec = CurrentDb.OpenRecordset(qd, dbopendynset)
 
    'Initialisations
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
 
    'Ajouter une feuille de calcul
    Set xlSheet = xlBook.Worksheets.Add
    xlSheet.Name = "Tutoriel"
 
    ' le titre
    '  écriture dans la cellule de ligne 1 et de colonne 1
    xlSheet.Cells(1, 1) = "Export d'une table Access"
 
 
    ' les entetes
    '  .Fields(Index).Name renvoie le nom du champ
    For J = 0 To rec.Fields.Count - 1
        xlSheet.Cells(2, J + 1) = rec.Fields(J).Name
        ' Nous appliquons des enrichissements de format aux cellules
        With xlSheet.Cells(2, J + 1)
            .Interior.ColorIndex = 15
            .Interior.Pattern = xlSolid
            .Borders(xlEdgeBottom).LineStyle = xlContinuous
            .Borders(xlEdgeBottom).Weight = xlThin
            .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
 
            .WrapText = True
        End With
            xlSheet.Columns("C:C").ColumnWidth = 32
            xlSheet.Columns("B:B").ColumnWidth = 40
    Next J
 
    ' recopie des données à partir de la ligne 3
    I = 3
    Do While Not rec.EOF
        For J = 0 To rec.Fields.Count - 1
            ' .Fields(Index).Type renvoie le type du champ
            '   si c'est un Texte (dbText) nous insérons "'" pour
            '   qu'il soit reconnu par Excel comme du Texte
            If rec.Fields(J).Type = dbText Then
                xlSheet.Cells(I, J + 1) = "'" & rec.Fields(J)
            Else
                xlSheet.Cells(I, J + 1) = rec.Fields(J)
            End If
        Next J
        I = I + 1
        rec.MoveNext
    Loop
 
 
 
 
    ' code de fermeture et libération des objets
    xlBook.SaveAs "C:\Documents and Settings\Default User\Local Settings\Temp\Feuille.xls"
'   Ouverture du fichier
    xlApp.Visible = True
'   Fermeture de excel si souhaité
'   xlApp.Quit
    rec.Close
 
    Set rec = Nothing
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
 
 
 
    t1 = Timer
    Debug.Print I & " enregistrements", Format(t1 - t0, "0") & " secondes"
DoCmd.Close acForm, "saisie_prospect_etat"
DoCmd.DeleteObject acQuery, "Requete_Temp"
 
End Sub
Merci de votre coup de main.

Bonne journée.