Imprimer l’enregistrement en cours

Je souhaiterais, à partir d’un formulaire, lancer l’impression de l’enregistrement en cours uniquement. Comment ouvrir l’état en conséquence ?

On suppose que vous avez déjà construit un état (basé sans doute sur la même requête que le formulaire, et imprimant pour l’instant tous les enregistrements du formulaire). L’idée est donc d’ouvrir cet état en le filtrant. Le meilleur champ pour ce filtre est la clef primaire de la table principale, c’est le seul qui identifie de façon sûre l’enregistrement affiché actuellement dans le formulaire.

Construction du bouton d’impression

  1. Sur votre formulaire ouvert en mode Création, construisez un bouton de commande à l’aide de l’Assistant Bouton de commande.
  2. Dans la catégorie Opérations sur état, choisissez l’action Aperçu d’un état.
  3. Nous passerons sur les étapes suivantes qui permettent de sélectionner l’état à imprimer, ainsi que l’icône ou le texte associé à votre bouton.
  4. En dernière étape, nommez votre bouton btnApercu, par exemple. Surtout pas Commande28 comme le propose Access, imaginez la maintenance de tout ça après !

Repassez en mode Formulaire (côté utilisateur, donc), et testez déjà votre bouton. Il devrait ouvrir l’état en mode Aperçu et pour l’instant sans aucun filtre.

Le code VBA du bouton de commande

  1. Rouvrez votre formulaire en mode Création.
  2. Cliquez sur le bouton de commande du bouton droit de la souris, et choisissez l’option Propriétés dans le menu contextuel.
  3. Dans la fenêtre Propriétés qui vient de s’afficher, cliquez sur l’onglet Evénement.

L’un des événements (Sur clic) doit être renseigné. Cliquez sur la mention Procédure événementielle, puis sur les points de suspension figurant à sa droite. Vous devriez « arriver » dans Visual Basic Editor, à l’endroit même où a été générée le code VBA du bouton de commande. Ce code devrait actuellement ressembler à :

La ligne en gras comportant l’instruction DoCmd.OpenReport déclenche l’aperçu de l’état proprement dit. C’est cette ligne qu’il va falloir aménager pour filtrer l’état en fonction de votre clef primaire.

Si votre clef primaire est numérique…

C’est le cas le plus simple : votre clef primaire – par exemple [Numéro Client] est un NuméroAuto, un Numérique/Entier long ou un chiffre en général ! Voici comment aménager le code VBA :

Quelques remarques :

  • Il y a bien 2 virgules après acPreview, parce que la commande OpenReport comporte 4 paramètres mais que nous n’utilisons pas le troisième.
  • Le [Numéro Client] entre guillemets est celui figurant sur l’état.
  • Le Me![Numéro Client] hors des guillemets désigne celui figurant sur le formulaire.
  • La phrase finale se lit : « Ouvrir l’état désigné par la variable stDocName, en mode Aperçu, et en faisant en sorte que le Numéro Client de l’état soit égal à celui du formulaire ».

Si votre clef primaire est de type Texte…

Pour une clef texte – par exemple : [Nom Client] – le critère est un peu plus compliqué :

Notez l’apparition des apostrophes.

Remarque
Si vous souhaitez des compléments sur OpenReport, lisez cette page. Vous y trouverez entre autres comment filtrer l’état pour n’imprimer que certains enregistrements, par critères.

Vous aimerez aussi...

36 réponses

  1. Jacquis Gabriel dit :

    Bonjour Hervé,

    Voilà mon cas:
    Cela marche très bien mais je n’arrive pas à le faire avec plusieurs conditions en même temps.
    Pouvez-vous m’aider dans ce point?

    Merci

    • Hervé Inisan dit :

      S’il y a plusieurs conditions, le critère devient quelque chose comme :

      (sachant que valeur1 et valeur2 peuvent être des valeurs numériques simples, ou des textes, dans ce cas entre apostrophes, comme expliqué dans l’article).

      Le problème est que pour créer ce critère, il faut concaténer plusieurs valeurs (la concaténation sera lourde à écrire).
      Pour simplifier un peu, je conseillerais d’utiliser la fonction StringFormat dont il est question plusieurs fois sur ce site. Le critère pourrait alors s’écrire :

  2. Lily dit :

    Bonjour, est-ce que ça peut fonctionner également avec une requête ?

  3. Lily dit :

    Bonjour,
    et merci pour toutes ces précieuses infos ! Malheureusement, je ne parviens pas à entrer le code VBA puisque j’obtiens au moment de cliquer sur le bouton « impossible de trouver le champ «  » auquel il est fait référence dans votre expression »..
    Dans mon cas la clef primaire [Id_bordereau] est de type texte et se présente comme suit : 2015-20 par exemple. Je ne comprends plus d’où vient l’erreur ! Auriez-vous une piste ?

    • Hervé Inisan dit :

      Si le champ est de type Texte, il faut consulter ce paragraphe : « Si votre clef primaire est de type Texte ». Il faut notamment :

      1. Que le critère contienne des apostrophes (qui servent à délimiter la valeur texte)
      2. Que le nom du champ soit écrit comme dans la table (et que la table soit la source du formulaire, du coup).

      Si ça ne marche pas, merci de poster ici le DoCmd qui produit l’erreur.

      • Lily dit :

        Bonjour et merci pour votre réponse,
        J’avoue que là je ne sais plus trop. La table est pourtant bien la source de mon formulaire. J’ai essayé pour un autre état (des étiquettes en l’occurrence) qui s’ouvre à partir d’un autre formulaire et ça marche très bien. Mais là je ne vois pas.

        stDocName = « E_BORDEREAU DE MOUVEMENTS »
        DoCmd.OpenReport stDocName, acPreview, , « [Id_bordereau]=' » & Me![Id_bordereau] & »‘ »

        Merci par avance pour votre aide,

  4. Céline dit :

    Merci pour cette aide très claire. Quel plaisir de voir que ça marche!

  5. Bonjour, j’ai une préoccupation: j’ai fait ma facture, mais je demande si quelqu’un sait comment on doit imprimer une facture en cours sans toute fois faire recherche par numéro facture?

    • Hervé Inisan dit :

      Pour imprimer la facture en cours, il faut une info qui permette de retrouver l’enregistrement de table de façon sûre. D’où l’utilisation de la clef primaire.
      Quelle est la clef primaire de la table Factures ?

  6. Sissy dit :

    Merci, super simple à comprendre et à faire.

  7. Kris dit :

    Comme Kikou problème résolu en changeant le type de ma clé en numérique ! Merci

  8. kikou dit :

    J’ai résolut mon problème en changeant le type de ma clé en numérique. Et en utilisant le code sa marche très bien.
    Merci pour ce tuto et pour vos réponses!

  9. Hervé Inisan dit :

    kikou > En fait, l’erreur est plutôt dessous : poste tout le code VBA de cette procédure (le Sub / End Sub).

  10. kikou dit :

    Ce code là est souligné en jaune
    Private Sub btnApercu_Click()

  11. Hervé Inisan dit :

    kikou > Même question que pour Kris : quel est le code VBA qui pose problème ? 😉

  12. kikou dit :

    Bonsoir Hervé, moi j’ai le même problème que Kris, le message qui s’affiche me dit « erreur de compilation: erreur de syntaxe ». Il faut noter que dans le champs « nom du client » les noms sont aussi composés ou espacés et ma clé primaire est de type text.

  13. mel dit :

    Tres bonne idée. Merci

  14. Hervé Inisan dit :

    mel > Il faudrait que les enregistrements aient une date de création. Ensuite, une requête pour trier sur cette date de façon décroissante, et pour limiter le nombre d’enregistrements à 4.

  15. mel dit :

    Salu hervé et merci pour ce que vs faites, j’ai une question: comment peut on imprimer les 4 dernier enregistrement qu’on viens de faire ?

  16. Hervé Inisan dit :

    kris > Je vois le souci, et je vois d’où il vient (une erreur dans le code VBA probablement). Quel est le code VBA exact qui provoque l’erreur ?

  17. kris dit :

    Bonjour et merci de votre réponse.
    Cela fonctionne très bien avec un champs qui ne comporte pas d’espace ou de -.

    Si dans mon champs [Nom] il y a un – pour faire un nom composé, cela me demande d’entrer comme valeur de paramètre le 1er nom puis le 2ème nom.
    Ex : durand-denis, il me demande d’indiquer d’abord durand puis ensuite denis pour au final m’indiquer : propriété non trouvée.

    En revanche si mon champs est écrit avec un espace entre les deux noms ex: durand denis cela m’indique le problème énoncé plus haut :erreur de syntaxe (Opérateur absent) dans l’expression « [Nom]=durand denis ».

    Je ne sais pas si je suis clair dans mes explications !

  18. Hervé Inisan dit :

    Kris > Normalement, le nom du champ ne doit pas être un problème, si tu respectes la notation avec crochets. Les exemples donnés plus haut te donnent la syntaxe.

    Il peut éventuellement y avoir un problème à gérer si la valeur des champs (pas leur nom) peuvent contenir des apostrophes, qui servent de délimiteurs. Reposte ici si c’est le cas.

  19. Kris dit :

    Bonjour et merci pour ces conseils, tout fonctionne parfaitement sauf quand mon champs [nom] est un nom composé cela m’indique erreur de syntaxe (Opérateur absent) dans l’expression [Nom]=Nom composé ». S’il y a une solution je suis preneuse, sinon je changerai de champs ! Merci

  20. wally dit :

    ca marche à merveille, merci pour l’astuce

  21. schotfield dit :

    Grand merci à tout l’équipe pour cette aide car j’en ai coulé des sueurs chaudes et rien n’a marché.Je pense que cette fois sera la bonne.
    Encore merci

  22. Hervé Inisan dit :

    adel > Normalement, l’état devrait bien s’ouvrir par-dessus. Est-ce que le formulaire est lui-même particulier ? (genre : indépendant ou modal, ou les deux?)

  23. adel dit :

    Bonjour,

    Permettez-moi de vous poser une question dans ce sujet, comment ouvrir l’état en dessus du formulaire ouvert et non pas en dessous, par ce que dans ce cas l’état est ouvert filtré même mais derrière le formulaire, merci pour votre réponse.
    Salutations.

  24. adel dit :

    bonjour,

    je vous remercie infiniment, car ca fait des jours que je cherche cette options, ca fait plaisir, merci encore
    bien cordialement

  25. Walter dit :

    Je commence à programmer une base de données pour un suivi de production. La base de la base : imprimer une étiquette pour chaque produit, mais seulement au moment opportun (c’est à dire quand nous le recevons!). MERCI BEAUCOUP!

    Me reste plus qu’à trouver comment sélectionner l’imprimante et le format de page. Je crois avoir vu que vous en parlez ailleurs….

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *