Imprimer plusieurs étiquettes identiques en nombre variable

Dans l’article Imprimer plusieurs étiquettes identiques, il était question d’imprimer des étiquettes Clients en exemplaires multiples, mais le nombre d’exemplaires était le même pour tous les clients.

Dans cette page, on va aménager le principe pour que le nombre d’étiquettes puisse varier selon le client. De cette manière, vous allez pouvoir imprimer 3 étiquettes pour le client Tartempion, et 7 pour le client Trucmuche.

La table

Comme le nombre d’étiquettes varie cette fois en fonction du client, il faut modifier la table Clients :

  1. Ouvrez la table tbl Clients en mode Création.
  2. Ajoutez un champ Nombre d'étiquettes, de type Numérique, de taille Entier long.
  3. Enregistrez la table.
  4. Passez en saisie sur la table, et définissez le nombre d’étiquettes qui vous intéresse, client par client.

La planche d’étiquettes

Il nous reste à aménager la planche d’étiquettes. Le code ressemble beaucoup à celui de l’article Imprimer plusieurs étiquettes identiques, reportez-vous à cet article pour plus de détails.

  1. Ouvrez votre état Étiquettes en mode Création.
  2. Ajoutez le champ [Nombre d'étiquettes] sur l’état.
  3. Définissez l’événement Sur impression de la zone Détail comme ceci :

  1. Déclarez également la variable globale intCompteur :

Imprimer les étiquettes

Pour imprimer les étiquettes manuellement, il suffit d’ouvrir l’état par un double-clic. Et pour automatiser en VBA, vous utiliserez comme d’habitude :

Les finitions

Pour que le code VBA fonctionne, il faut que le champ [Nombre d'étiquettes] soit présent sur l’état (vous le voyez dans la capture plus haut, couleur bleu clair, en haut à droite de chaque étiquette). Mais il n’est pas utile que ce champ soit visible, vous pouvez donc :

  1. Ouvrir l’état en mode Création.
  2. Faire apparaître les propriétés du champ [Nombre d'étiquettes].
  3. Réglez la propriété Visible sur Non.

Vous aimerez aussi...

13 réponses

  1. Jamoke7 dit :

    Bonjour,

    Merci pour la réponse groupée ! C’est tout bon.

  2. Hervé Inisan dit :

    Jamoke7 > 2 réponses groupées… 🙂

    • Il est effectivement possible d’afficher le numéro d’étiquette en cours, étiquette par étiquette. Le principe consiste à ajouter une zone de texte ou un label sur la zone Détail, et à ajouter quelque chose comme ça en début de code VBA (après le Sub) :
      Me.NomDuLabel.Caption = intCompteur + 1
    • Pour ne pas imprimer les étiquettes à 0, il suffit d’intervenir sur la requête qui sert de base à l’état, et à y mettre un critère : Nombre d'étiquettes = 0.
    • On peut faire la même chose à l’ouverture de l’état, dans le DoCmd.OpenReport.
  3. Jamoke7 dit :

    Bonjour,

    J’ai encore une question. Pour les clients qui ont « 0 » en nombre d’étiquettes car ils n’ont pas été sélectionnés, j’ai tout de même une étiquette avec pour valeur « 0 » qui sort. Comment dois-je faire pour ne pas avoir d’étiquettes lorsque le nombre est défini à 0.

    Merci d’avance pour votre réponse.

  4. Jamoke7 dit :

    Bonjour,
    Merci pour ce tuto qui marche super bien.
    J’ai une petite question : est-il possible de rajouter un compteur pour savoir à quelle étiquette on en est. C’est-à-dire, pour le client X, 1/3, puis 2/3 puis 3/3 …

    Merci d’avance

  5. gregNJD dit :

    Merci, c’est super ! Exactement ce que je recherchais ! Et ca fonctionne nickel. Merci !

  6. Hervé Inisan dit :

    Malo > Un état standard n’imprimera chaque étiquette qu’une seule fois. Tu as bien aménagé ton état comme indiqué sur l’article : Imprimer plusieurs étiquettes identiques ?

  7. Malo dit :

    Bonjour, j’ai fait un test avec la InputBox, mais quelque soit le nombre entré l’état ne me donne qu’une seule étiquette :-(. N’y a-t-il pas moyen de combiner les deux codes pour que cela soit fonctionnel ??

  8. Hervé Inisan dit :

    Malo > J’imagine qu’il va y avoir un bouton pour déclencher l’impression (le DoCmd.OpenReport). Donc tout le code que j’ai donné plus haut peut être inscrit dans l’événement « Sur clic » du bouton.

    Ouala !

  9. Malo dit :

    Hervé > J’essaie ça demain et vous tiens au courant. Je dois l’insérer où le bout de code pour la InputBox ??

  10. Hervé Inisan dit :

    Malo > Ça se tient :). Est-ce que ma réponse précédente fonctionne, du coup ?

  11. Malo dit :

    Merci pour votre réponse. J’opterais plus pour la InputBox car j’utilise votre exemple dans le cadre d’une gestion de stock. Le champ [Nombre d’étiquettes] sur l’état est alimenté par la Quantité Entrée de ma tbl EntréesStock. Dans certains cas la Quantité entrée ne correspond pas au nombre d’étiquette voulue car l’unité peut-être le kilo ou la pièce. Donc si j’entre 12 canettes (unité=pièce) j’aurai besoin de 12 étiquettes, mais si j’entre du Boeuf pour 12 kilos (unité = kg) je n’aurai besoin que d’une seule étiquette et pas 12. Est-ce clair ? Merci d’avance

  12. Malo dit :

    ESt-il possible pour cette procédure de donner la possibilité à l’utilisateur de choisir, via une boîte de dialogue, le nombre d’étiquette qu’il souhaite imprimer ??

  13. Hervé Inisan dit :

    Malo > Tel qu’il est fait, le bout de VBA prend le nombre d’étiquettes dans la table, ce qui fait que chaque enregistrement peut avoir un nombre d’étiquettes différent. Pour paramétrer ce nombre, il suffit de créer un formulaire basé sur la table (dans mon exemple : tbl Clients) et d’autoriser la modification du champ [Nombre d'étiquettes].

    Si tu veux le même nombre d’étiquettes pour chaque personne, il faut plutôt consulter l’article Imprimer plusieurs étiquettes identiques, et remplacer la valeur 3 donnée en exemple par un nom de champ de formulaire (du style : Forms![Nom du formulaire]![Nombre d'étiquettes]). En partant du principe que tu as un formulaire avec un champ de saisie nommé Nombre d'étiquettes.

    Tu peux aussi passer par InputBox() en VBA, pour faire saisir la valeur, mais ça me semble moins ergonomique. Ça donnerait grosso-modo :

Laisser un commentaire

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