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

Access Discussion :

[Publipostage] Critère de sélection en dur = ok, en paramètre = pas ok


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 24
    Points : 16
    Points
    16
    Par défaut [Publipostage] Critère de sélection en dur = ok, en paramètre = pas ok
    Bonjour à tous !

    Je vais essayer d'être clair.

    Via un bouton, j'exécute une requête qui me fusionne un document Word avec l'enregistrement en cours et crée un nouveau fichier .doc. Ca fonctionne bien, sauf sur un point.

    Mon problème se situe au niveau de la liaison avec l'enregistrement en cours.

    Si je rentre le numéro manuellement comme critère dans ma requête, tout fonctionne bien, le document se crée et s'enregistre sans intervention de la part de l'utilisateur.

    Mais si j'utilise une syntaxe du style : Forms!MonFormulaire!MonChamp, a chaque fois à l'ouverture du document je dois sélectionner la requête dans une fenêtre "Sélectionner une table" qui s'ouvre alors.

    Je ne comprends vraiment pas d'où vient le problème !

    Voici le code avec l'utilisation de la requête :

    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
    Private Sub Commande328_Click()
    
    Dim FichierSource As String
    Dim CheminFichierFusion As String
    Dim NomFichierFusion As String
    Dim SQL As String
    
    '====================================================================
    'PARAMèTRES
    FichierSource = "C:\Documents and Settings\Marc-Alexandre\Bureau\DCD Bericht und Zusage.doc"
    CheminFichierFusion = "C:\Documents and Settings\Marc-Alexandre\Bureau\"
    NomFichierFusion = "Fichier fusionné.doc"
    '=====================================================================
    
    
    'Voici pour la déclaration du code:
    Dim wdapp As Word.Application, wddoc As Word.Document
    
    'Démarrer Word
    Set wdapp = CreateObject("Word.application")
    
    
    With wdapp
           .Visible = False
       
          'ouvrir le document "modèle"
          Set wddoc = wdapp.Documents.Open(FichierSource)
    
          'Diriger le publipostage vers un nouveau document "final"
        
       wddoc.MailMerge.MainDocumentType = wdFormNormal
       wddoc.MailMerge.OpenDataSource Name:= _
           Application.CurrentDb.Name, _
            ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
            AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
            WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
            Format:=wdOpenFormatAuto, Connection:="Provider=Microsoft.Jet.OLEDB.4.0" _
            , SQLStatement:="SELECT * FROM `Sites Requete pour décision`"
    
             ', SQLStatement1:="", SubType:=wdMergeSubTypeOther
         
         wddoc.MailMerge.Execute
    
         ' enregistrer le document "final" provenant de l'exécution de la fusion
         .ActiveDocument.SaveAs CheminFichierFusion & NomFichierFusion
    
         ' fermer le document "modèle"
         wddoc.Close
         Set wddoc = Nothing
    
         ' à ce stade, le document "final" est encore affiché
    
    
    'fermer et libérer les objets
    wdapp.Documents.Close
    
    wdapp.Quit
    Set wdapp = Nothing
    End With
    
    MsgBox ("Document Word " & CheminFichierFusion & NomFichierFusion & " créé avec succès."), vbInformation
    
    End Sub
    Donc pour être bref, le code ci-dessus fonctionne si le paramètre est en dur dans la requête, et m'affiche une fenêtre de "sélection de table" si j'utilise une référence au formulaire.

    Je sais que ça ne se fait pas mais :

  2. #2
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    SQLStatement:="SELECT * FROM `Sites Requete pour décision`"
    Tu devrais plutôt mettre le nom de la requête entre crochets.

    Si je rentre le numéro manuellement comme critère dans ma requête, tout fonctionne bien, le document se crée et s'enregistre sans intervention de la part de l'utilisateur.
    Mais si j'utilise une syntaxe du style : Forms!MonFormulaire!MonChamp, a chaque fois à l'ouverture du document je dois sélectionner la requête dans une fenêtre "Sélectionner une table" qui s'ouvre alors.
    Veux-tu nous envoyer le code SQL de cette requête ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    J'ai tenté de modifier les crochets mais ça ne fonctionne pas.

    En cherchant j'ai trouvé ça sur la knowledge base de Microsoft, peut-être lié.

    Voici le code de la requête qui fonctionne avec le chiffre en dur (lorsqu'on l'appelle par son nom via le code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SITES.NODOSSIER, SITES.PROPRIETE, SITES.[DOMICILE PROPR], SITES.COMMUNE, SITES.VILLAGE, SITES.LIEUDIT, SITES.FOLIO, SITES.PARCELLE, SITES.CLASSEMENT, SITES.SURV, SITES.OBJET, SITES.TRAVAUX, SITES.RUBRIQUE, SITES.NOCREDIT, SITES.TYPEBENEFI, SITES.BENEFICIAI, SITES.TAUX, SITES.TAUXCOMM, SITES.TAUXCH, SITES.MONTSUBV, SITES.COMMENTAIRE, SITES.VALIDITE, [MONTSUBV]/[TAUX]*100 AS [MONT DET], BENEFICIAIRE.NomBénéficiaire, BENEFICIAIRE.RubrBénéficiaire, SITES.DATEDECIS, SITES.TITRE, SITES.CORRESPONDANT, SITES.ADRESSE, SITES.LOCALITE, SITES.TOITURE, Date() AS [Date rapport], SITES.Disponible, [TAUX]+[TAUXCOMM] AS [TAUXVS+]
    FROM SITES LEFT JOIN BENEFICIAIRE ON SITES.TYPEBENEFI = BENEFICIAIRE.NoBénéficiaire
    WHERE (((SITES.NODOSSIER)=1629) AND ((SITES.DATEDECIS)>Date()));

  4. #4
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Si tu veux qu'on te dise ce qui ne va pas faudrait peut-être que tu nous donnes le code de la requête qui ne marche pas...

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    lol pardon ça m'avais paru évident vu que je suis a fond dedand
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SITES.NODOSSIER, SITES.PROPRIETE, SITES.[DOMICILE PROPR], SITES.COMMUNE, SITES.VILLAGE, SITES.LIEUDIT, SITES.FOLIO, SITES.PARCELLE, SITES.CLASSEMENT, SITES.SURV, SITES.OBJET, SITES.TRAVAUX, SITES.RUBRIQUE, SITES.NOCREDIT, SITES.TYPEBENEFI, SITES.BENEFICIAI, SITES.TAUX, SITES.TAUXCOMM, SITES.TAUXCH, SITES.MONTSUBV, SITES.COMMENTAIRE, SITES.VALIDITE, [MONTSUBV]/[TAUX]*100 AS [MONT DET], BENEFICIAIRE.NomBénéficiaire, BENEFICIAIRE.RubrBénéficiaire, SITES.DATEDECIS, SITES.TITRE, SITES.CORRESPONDANT, SITES.ADRESSE, SITES.LOCALITE, SITES.TOITURE, Date() AS [Date rapport], SITES.Disponible, [TAUX]+[TAUXCOMM] AS [TAUXVS+]
    FROM SITES LEFT JOIN BENEFICIAIRE ON SITES.TYPEBENEFI = BENEFICIAIRE.NoBénéficiaire
    WHERE (((SITES.NODOSSIER)=[Forms]![Fiche de Saisie]![No du dossier]) AND ((SITES.DATEDECIS)>Date())); 
    Aujourd'hui 15h17

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    En modifiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SubType:=wdMergeSubTypeOther
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SubType:=wdMergeSubTypeWord2000
    la fenêtre de sélection de la table disparaît mais j'ai toujours le message d'erreur "Word n'a pas pu ouvrir la source de données".

  7. #7
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    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
    Dim requete as string
    
    requete="SELECT SITES.NODOSSIER, SITES.PROPRIETE, SITES.[DOMICILE PROPR], SITES.COMMUNE, SITES.VILLAGE," _
    " SITES.LIEUDIT, SITES.FOLIO, SITES.PARCELLE, SITES.CLASSEMENT, SITES.SURV, SITES.OBJET, SITES.TRAVAUX," _
    " SITES.RUBRIQUE, SITES.NOCREDIT, SITES.TYPEBENEFI, SITES.BENEFICIAI, SITES.TAUX, SITES.TAUXCOMM, SITES." _
    " TAUXCH, SITES.MONTSUBV, SITES.COMMENTAIRE, SITES.VALIDITE, [MONTSUBV]/[TAUX]*100 AS [MONT DET], " _
    " BENEFICIAIRE.NomBénéficiaire, BENEFICIAIRE.RubrBénéficiaire, SITES.DATEDECIS, SITES.TITRE, SITES." _
    " CORRESPONDANT, SITES.ADRESSE, SITES.LOCALITE, SITES.TOITURE, Date() AS [Date rapport], SITES.Disponible," _
    " [TAUX]+[TAUXCOMM] AS [TAUXVS+]" _
    " FROM SITES LEFT JOIN BENEFICIAIRE ON SITES.TYPEBENEFI = BENEFICIAIRE.NoBénéficiaire" _
    " WHERE SITES.NODOSSIER=" & Me.txtNoDossier & " AND SITES.DATEDECIS>#" & Date() & "#"
    
    (...)
    
    wddoc.MailMerge.OpenDataSource Name:= _
           Application.CurrentDb.Name, _
            ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
            AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
            WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
            Format:=wdOpenFormatAuto, Connection:="Provider=Microsoft.Jet.OLEDB.4.0" _
            , SQLStatement:=requete
    Si la date pose probleme en passant de VBA a SQL,regarde la FAQ http://access.developpez.com/faq/?page=dates

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Je ne peux pas le faire car la chaine SQL dépasse les 255 caractères... Je patauge et en plus je suis sûr que c'est super simple....

Discussions similaires

  1. Impression critères de sélection en entête d'état
    Par laportez dans le forum Access
    Réponses: 4
    Dernier message: 15/12/2006, 00h31
  2. [MySQL] Erreur lors d'une récupération de données avec critère de sélection
    Par Squalthor dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 08/11/2006, 11h28
  3. Requête avec date comme critère de sélection
    Par deep-diver dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/09/2006, 11h40
  4. Réponses: 5
    Dernier message: 06/07/2006, 11h40
  5. Réponses: 3
    Dernier message: 16/06/2006, 16h17

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