[Access VBA] Erreur générer rapport rtf

Maxime -  
blux Messages postés 5031 Date d'inscription   Statut Modérateur Dernière intervention   -
Voici ma fonction :
Private Sub Commande4_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim BaseSQL As String
Dim strSQL As String
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("SELECT DISTINCT [Dealer/Distributor Number] FROM Query_Active_Dealer_List_Update")
Set qdf = dbs.QueryDefs("Query_Active_Dealer_List_Update")
BaseSQL = qdf.SQL
With rst
Do Until .EOF
strSQL = Left(BaseSQL, Len(BaseSQL) - 3) & " WHERE [Dealer/Distributor Number] =" & ![Dealer/Distributor Number]
qdf.SQL = strSQL
DoCmd.OutputTo acOutputReport, "Main_Report", "RichTextFormat", "C:\Documents and Settings\larocma\Dealer_Scorecards\" & ![Dealer/Distributor Number] & ".doc"

.MoveNext
Loop
.Close
End With
qdf.SQL = BaseSQL
Set qdf = Nothing
Set rst = Nothing
Set dbs = Nothing

End Sub

Le problème se situe dans la ligne strSQL = Left(BaseSQL, Len(BaseSQL) - 3) & " WHERE [Dealer/Distributor Number] =" & ![Dealer/Distributor Number]

Si je laisse ![Dealer/Distributor Number] comme ca j'obtient une erreur et aucun rapport n'est généré. Par contre, si je met "[Dealer/Distributor Number]" comme ca en paramètre et que j'entre manuellement les numeros de dealer, j'obtient des fichiers correctement.

Quelqu'un peut m'aider à résoudre ce probleme ?

Max

4 réponses

  1. blux Messages postés 5031 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    Je pense qu'il faut que tu mettes des '' pour indiquer que la comparaison se fait sur une chaîne. Et n'oublie pas non plus de fermer le SQL par un ;
    Mets des simple quote ('), c'est plus lisible que d'empiler les double quotes (guillemets """").
    Si [Dealer/Distributor Number] est numérique, alors rajoute seulement le ;
    Ca donnerait ça (selon moi):
    strSQL = Left(BaseSQL, Len(BaseSQL) - 3) & " WHERE [Dealer/Distributor Number] = '" & ![Dealer/Distributor Number] & "';"
    
    Attention cependant si [Dealer/Distributor Number] contient un nom avec une ou plusieurs simple quotes, c'est l'explosion assurée ! ;-)
    0
  2. Maxime
     
    J'ai essayé ton code mais maintenant j'obtient une erreur différente et je ne connais pas sa provenance.

    Voici le code modifié :
    Private Sub Commande4_Click()

    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim qdf As DAO.QueryDef
    Dim BaseSQL As String
    Dim strSQL As String
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("SELECT DISTINCT [Dealer/Distributor Number] FROM Query_Active_Dealer_List_Update")
    Set qdf = dbs.QueryDefs("Query_Active_Dealer_List_Update")
    BaseSQL = qdf.SQL
    With rst
    Do Until .EOF
    strSQL = Left(BaseSQL, Len(BaseSQL) - 3) & " WHERE [Dealer/Distributor Number] = '" & ![Dealer/Distributor Number] & "';"
    qdf.SQL = strSQL
    DoCmd.OutputTo acOutputReport, "Main_Report", "RichTextFormat", "C:\Documents and Settings\larocma\Dealer_Scorecards\" & ![Dealer/Distributor Number] & ".doc"

    .MoveNext
    Loop
    .Close
    End With
    qdf.SQL = BaseSQL
    Set qdf = Nothing
    Set rst = Nothing
    Set dbs = Nothing

    End Sub

    Erreur d'exécution '3126': Mise entre crochets non valide du nom '[Dealer/Distributor Nub
    WHERE [Dealer/Distributor Number]'
    0
  3. Maxime
     
    Si vous voulez jeter un coup d'oeil j'ai uploadé mon travail sur www.mlaroche.com/scorecards/scorecards.zip

    Le bouton est sur le Formulaire1

    Maxime
    0
  4. blux Messages postés 5031 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Je n'arrive pas à faire fonctionner, il me met : impossible de créer un fichier...

    Serait-il possible qu'il n'aime pas le / dans le nom du champ ?
    0