Codes Barres 128
Codes Barres 128
Codes Barres 128
I - Introduction..............................................................................................................................................................3
II - Généralités............................................................................................................................................................. 3
II-A - Les codes-barres.......................................................................................................................................... 3
II-B - Lecture des codes-barres............................................................................................................................. 4
III - Le code 128.......................................................................................................................................................... 4
III-A - Les différents caractères du code............................................................................................................... 5
III-B - La structure du code....................................................................................................................................5
III-C - Les modules.................................................................................................................................................6
III-D - Optimisation du code................................................................................................................................... 6
III-E - Le caractère de contrôle..............................................................................................................................7
III-F - Les spécifications......................................................................................................................................... 7
III-F-1 - Légende du code-barres..................................................................................................................... 8
III-F-2 - Largeur des modules et du code-barres............................................................................................. 8
III-F-3 - Hauteur des modules.......................................................................................................................... 8
III-F-4 - Spécifications de vos codes-barres.....................................................................................................8
IV - L'application de création des codes-barres..........................................................................................................9
IV-A - Table.............................................................................................................................................................9
IV-B - Formulaire.................................................................................................................................................. 10
IV-C - État.............................................................................................................................................................11
IV-D - Fonctions et procédures............................................................................................................................13
IV-D-1 - Entête de module (déclaration des variables publiques)..................................................................13
IV-D-2 - Événement Sur ouverture du formulaire...........................................................................................14
IV-D-3 - Événement Sur clic du bouton Format des colonnes.......................................................................15
IV-D-4 - Événement Sur clic du bouton Aperçu - 1re partie.......................................................................... 15
IV-D-5 - Fonction d'encodage de la chaîne de caractères en code 128........................................................16
IV-D-6 - Événement Sur clic du bouton Aperçu - 2e partie........................................................................... 24
IV-D-7 - Fonction de conversion du code 128 en barres et espaces.............................................................24
IV-D-8 - Événement Sur clic du bouton Aperçu - 3e partie........................................................................... 26
IV-D-9 - Événement Sur ouverture de l'état................................................................................................... 27
IV-D-10 - Événement Au formatage de la section détail de l'état.................................................................. 28
IV-D-11 - Procédure de traçage du code-barres 128.....................................................................................29
IV-D-12 - Événement Sur clic du bouton Aperçu - 4e partie......................................................................... 31
V - Conclusion........................................................................................................................................................... 32
VI - Remerciements................................................................................................................................................... 32
VII - Liens...................................................................................................................................................................33
VIII - Annexe - composition des tables du code 128................................................................................................34
-2-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
I - Introduction
Les questions touchant à la création de codes-barres sont relativement fréquentes sur le forum Access. Bien que
plusieurs réponses aient été données, nombre de discussions demeurent non résolues. Dans la plupart des cas, ce
n'est pas faute d'une bonne solution, mais plutôt l'absence de détails et de précisions qui ont fait que beaucoup de
membres ont abandonné cette idée.
Cet article a pour but de vous expliquer comment créer des codes-barres, sans utiliser un contrôle ActiveX spécifique
ni de police de caractères spéciale, mais uniquement en VBA.
Pour atteindre cet objectif, des connaissances en VBA sont nécessaires, ce qui réserve plutôt cet article à des
utilisateurs ayant déjà quelque expérience de la programmation avec ce langage. Il est cependant suffisamment
détaillé et le code amplement commenté. Les néophytes ne devraient pas rencontrer de grandes difficultés pour le
mettre en œuvre.
II - Généralités
Le premier système de codes-barres a été breveté en 1952. Il concernait un code à ligne verticale et aussi de forme
concentrique (en forme de cible) ainsi que le système de lecture des données.
Sa première utilisation a été l'étiquetage des wagons de train, sans que le succès commercial ne soit toutefois au
rendez-vous.
Il faudra attendre le début des années 1970 et l'invention du code UCP, Universal Product Code ou CUP en français,
utilisé dans la grande distribution, pour que leur usage se généralise.
Aujourd'hui, ils sont utilisés dans de nombreux domaines d'activité, par exemple :
• code 11 : télécommunications ;
• code 39 : industrie automobile, pharmacode France, armée américaine ;
• code 128 : transports, santé, pièces détachées pour le secteur automobile.
À l'origine, les codes-barres sont la représentation, sous forme d'un ensemble de barres et d'espaces, d'une donnée
numérique ou alphanumérique, l'épaisseur des barres et espaces variant selon la symbologie utilisée et les caractères
de la donnée à coder. Ces codes, linéaires, sont lus horizontalement.
Puis sont apparus des codes linéaires empilés, ainsi nommés car ils sont constitués de plusieurs codes-barres
linéaires empilés les uns sur les autres. Ils sont lus verticalement.
Plus récemment, ils ont encore évolué avec l'apparition de codes-barres à deux dimensions (2D), lus horizontalement
et verticalement. Ils permettent de coder un grand nombre de données sur une petite surface, jusqu'à plusieurs
milliers de caractères pour certains d'entre eux.
-3-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Pour lire les données ainsi codées, on utilise un lecteur de codes-barres, qui n'est autre qu'un lecteur optique émettant
de la lumière :
• le lecteur émet de la lumière qui est absorbée par les barres sombres et réfléchie par les espaces clairs ;
• à l'intérieur du lecteur, une cellule photosensible reçoit la lumière réfléchie et la convertit en signal électrique ;
• le signal est faible pour les espaces clairs et fort pour les barres sombres ;
• la durée du signal détermine la largeur des barres et espaces ;
• un décodeur convertit le signal en caractères ;
• les caractères décodés sont transmis à l'ordinateur.
Comme nous l'avons vu dans la section précédente, il existe de nombreux types de codes-barres, destinés pour la
plupart à des domaines bien spécifiques. Dans le cadre de cet article, nous n'en étudierons qu'un seul, choisi non
pas en fonction d'un domaine d'utilisation précis, mais parce qu'il permet de coder un maximum de caractères de
manière simple et fiable.
Le choix du code 128 s'est donc imposé presque naturellement. Il permet en effet de coder les 128 caractères ASCII
de base, il est omnidirectionnel, il est très dense, notamment pour les valeurs numériques, et possède un caractère
de contrôle.
Il ne faut pas confondre le code 128 avec le code EAN (UCC) 128. Ce dernier, basé sur la
symbologie du code 128 n'est pas simplement un code-barres, c'est un standard qui définit
la manière dont les données sont formatées.
Leur signification est précisée selon une liste d'Identificateurs d'Application, usuellement
abrégés AI. Ces derniers, placés au début du code, indiquent ce que contiennent les données
elles-mêmes (numéro de colis, date de production, d'emballage, etc.).
Le code EAN 128 est couramment utilisé dans l'industrie pour des besoins de logistique et
de traçabilité.
-4-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Il est constitué de 107 motifs différents, représentant 103 caractères de données, trois caractères de démarrage
et un caractère d'arrêt. Pour permettre de coder les 128 caractères de la table ASCII, il existe trois ensembles de
codes (A, B et C) qui peuvent être mélangés dans un même code-barres par l'utilisation de caractères de permutation
(caractères 99, 100 et 101).
• 128A : les chiffres, les lettres majuscules, des caractères de ponctuation, des codes de contrôle et des codes
spéciaux ;
• 128B : les chiffres, les lettres majuscules et minuscules, des caractères de ponctuation et des codes
spéciaux ;
• 128C : des paires de chiffres, permettant de doubler la densité des caractères numériques, et des codes
spéciaux.
La table représentant les trois ensembles de caractères du code est disponible en annexe.
Dans cet article, nous nous limiterons à l'usage des ensembles de caractères B et C, ce qui
exclut le codage des 32 premiers caractères de la table ASCII (00 à 31).
• Les marges ou "quiet zone" à gauche et à droite du code doivent avoir au moins dix modules d'épaisseur ;
• le caractère de démarrage détermine la table utilisée au départ ;
• le caractère, ou clé, de contrôle est obligatoire. Le détail du calcul est exposé ci-après ;
• le caractère d'arrêt est identique, quels que soient les ensembles de caractères utilisés.
-5-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Comme nous l'avons vu précédemment, le code 128 est constitué de 107 motifs différents, composés chacun de
onze modules, groupés en trois barres et trois espaces.
Le caractère d'arrêt est complété par deux modules de barres à son extrémité droite permettant de fermer le code-
barres. Il est donc composé de treize modules au total.
Pour encoder les données, on peut considérer que le chiffre "1" représente des barres et le chiffre "0" des espaces.
Ainsi la lettre "A" sera symbolisée par "10100011000", soit trois barres et trois espaces de différentes épaisseurs.
Un des intérêts du code 128 réside dans la possibilité d'optimiser le codage des données numériques en utilisant un
seul caractère pour des paires de chiffres, en recourant à l'ensemble de caractères C.
Ainsi, si "44" nécessite deux fois le caractère "4" dans l'ensemble B, il peut être codé uniquement avec le caractère
"L" en recourant à l'ensemble C.
Il faut tenir compte ici des caractères spéciaux permettant de passer d'un ensemble de caractères à l'autre.
L'optimisation du code est donc possible pour autant que la donnée à coder :
En effet, dans le premier cas, on commence à utiliser l'ensemble C, puis on utilise un caractère de permutation pour
passer à l'ensemble B pour coder la suite des données si nécessaire.
Dans le deuxième cas, on commence par l'ensemble B, puis un caractère est utilisé pour passer vers l'ensemble C.
Enfin, dans le troisième cas de figure, deux caractères sont nécessaires pour passer de l'ensemble B vers l'ensemble
C, puis à nouveau vers l'ensemble B.
À titre d'exemple, essayons de créer le code pour la donnée ABC2011, tout d'abord sans optimisation de l'encodage,
c'est-à-dire en ayant recours uniquement à l'ensemble de caractères B.
Caractère Ñ A B C 2 0 1 1
ASCII
Caractère Start B A B C 2 0 1 1
Valeur 104 33 34 35 18 16 17 17
Reprenons la même donnée, en optimisant le code cette fois-ci, c'est-à-dire en ayant recours aux ensembles de
caractères B et C.
Le résultat est naturellement différent, les quatre caractères numériques étant codés avec deux caractères
uniquement :
Caractère ASCII Ñ A B C Ì 4 +
Caractère Start B A B C Table C 20 11
Valeur 104 33 34 35 99 20 11
-6-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
On voit bien l'intérêt d'optimiser l'encodage, le recours à ce procédé permettant de produire des codes très denses
s'agissant de données numériques.
Dans les deux exemples ci-dessus, le caractère de contrôle et le caractère d'arrêt ne sont
pas encore compris.
Le caractère de contrôle, obligatoire, se calcule selon un schéma bien précis et en utilisant un modulo 103.
En lisant le code de gauche à droite, on commence par prendre la valeur du code de démarrage (103, 104 ou 105)
pour les ensembles de caractères A, B ou C respectivement.
Puis, pour chaque caractère suivant, on multiplie la valeur du caractère par la valeur de sa position dans la chaîne,
le caractère suivant immédiatement le caractère de démarrage ayant le rang 1.
Caractère ASCII Ñ A B C Ì 4 +
Caractère Start B A B C Table C 20 11
Valeur 104 33 34 35 99 20 11
Position - 1 2 3 4 5 6
Multiplication 104 33*1 34*2 35*3 99*4 20*5 11*6
Produit 104 33 68 105 396 100 66
Le résultat de l'addition des produits, 872 dans cet exemple, est divisé par 103, le reste de la division étant la valeur
du caractère de contrôle, soit 48.
Ensuite, cette valeur doit être convertie en caractère ASCII en appliquant la méthode suivante :
Ici, la valeur étant inférieure à 95, nous ajoutons 32. Le résultat, soit 80, donne le caractère ASCII "P".
Il ne reste alors plus qu'à ajouter ce caractère de contrôle et le caractère d'arrêt pour compléter le code 128 :
Caractère ASCII Ñ A B C Ì 4 + P Ó
Caractère Start B A B C Table 20 11 P Stop
C
Nous connaissons maintenant l'intégralité des caractères ASCII que nous devons convertir
en barres et espaces pour obtenir le code-barres de la chaîne de caractères ABC2011.
Il s'est avéré difficile de trouver des spécifications pour les codes-barres 128. La plupart de celles trouvées sur Internet
sont le fait de fournisseurs de polices de caractères, de lecteurs de codes-barres ou encore d'imprimantes.
Il existe cependant des spécifications plus officielles, par exemple la norme française et européenne NF EN 799,
applicable entre autres à l'impression des N° RPPS et N° AM des ordonnances médicales.
-7-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Le but de cet article n'est toutefois pas de produire des codes-barres pour un usage spécifique. Aussi, les indications
fournies ci-après sont plutôt une synthèse des divers renseignements trouvés. Elles devraient permettre d'imprimer
des codes-barres lisibles par la grande majorité des lecteurs disponibles sur le marché.
Il n'est non plus pas nécessaire de disposer d'une imprimante haut de gamme pour imprimer
vos codes-barres. Laser ou jet d'encre, n'importe quelle imprimante suffit aujourd'hui à cette
tâche.
Sachant qu'un pouce est égal à 1440 twips ou 2.54 cm, un millième de pouce est égal à 1.44 twip. La dimension X
minimum d'un module est donc d'environ 10.8 twips.
Bien qu'il soit tout à fait possible de lire des codes-barres ayant des modules de 10 twips, dans l'application, nous
utiliserons une valeur par défaut de 12 twips, ce qui devrait garantir une lecture par tout type de matériel.
Ceci est en principe largement suffisant. Pour une donnée de 25 caractères par exemple, soit 28 caractères en tenant
compte des caractères de démarrage, de contrôle et d'arrêt, la largeur du code-barres n'excède pas 6.56 cm.
La largeur des codes-barres n'est en théorie pas limitée. Vous devez cependant être attentif
aux caractéristiques techniques de votre lecteur de codes-barres.
Certaines douchettes ne peuvent par exemple pas lire des codes-barres de plus de 7.5 cm
de largeur.
La symbologie du code 128 ne spécifie pas de hauteur maximum pour les modules. Il serait toutefois faux de croire
que plus la hauteur d'un code-barres est importante, plus celui-ci est lisible.
La hauteur minimum du code-barres devrait être de 15 % de la longueur de ce dernier ou 0.25 pouce, soit environ
0.6 cm, la valeur la plus élevée étant retenue.
Pour la hauteur maximum, on peut se limiter à 0.5 pouce, soit environ 1.3 cm. Dans l'application exemple, elle est
au plus de 1 cm, que la hauteur des modules soit fixe ou variable.
Comme cela a été précisé, les spécifications ci-dessus n'ont rien d'officiel. Il vous faudra donc faire vos propres tests
pour obtenir les meilleurs résultats possible.
Les lecteurs de codes-barres sont généralement livrés avec une documentation contenant
des codes témoins, permettant soit de calibrer le lecteur, soit de faire des simples tests de
lecture.
Si un code-barres 128 est donné en exemple, l'étude de celui-ci vous fournira de précieuses
indications (hauteur et largeur des modules) pour la création de vos propres codes-barres.
-8-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Celle-ci est assez modulaire, de sorte que vous devriez pouvoir l'intégrer facilement dans une
application existante.
• d'une table ;
• d'un formulaire et de son module (quatre procédures) ;
• d'un état et de son module (deux procédures) ;
• d'un module de code contenant une procédure et deux fonctions nécessaires à l'encodage et au traçage des
codes-barres.
IV-A - Table
Si vous êtes certains que le nombre de modules de vos codes-barres sera toujours égal
ou inférieur à 255, vous pouvez bien sûr utiliser un champ de type Texte pour le champ
CodesBarres.
-9-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
IV-B - Formulaire
On peut ensuite passer à la création du formulaire frmCodeBarres et modifier les propriétés qui nous intéressent.
On notera principalement qu'il est indépendant, qu'il n'a pas de barres de défilement, ni de sélecteur et de diviseurs
d'enregistrements.
Outre des cadres et étiquettes, on y place quatre zones de texte et une zone de liste déroulante, indépendantes
elles aussi :
Puis on ajoute deux images et un bouton avec sa propriété Transparent à Oui, qu'on superpose les uns aux autres
dans cet ordre, en commençant par l'arrière-plan :
- 10 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
• imgTracageVertical ;
• imgTracageHorizontal ;
• cmdTracage.
Ces trois éléments vont nous permettre, sur clic du bouton cmdTracage, de sélectionner le mode de traçage des
colonnes.
Enfin, on ajoute encore un bouton, cmdApercuImpression, qui ouvre l'état rptEtiquettes en mode Aperçu avant
impression.
IV-C - État
Pour l'application exemple, le choix s'est porté sur un modèle de deux étiquettes de front. Après ajustement des
dimensions, celles-ci sont d'environ 94 x 34 mm, soit seize étiquettes au total.
On y place ensuite deux zones de texte, ayant respectivement comme Source contrôle les champs CodeBarres
et Libelle.
Ensuite de quoi nous renommons les deux zones de texte txtCodeBarres et txtLibelle.
- 11 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
- 12 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Tout d'abord, celle-ci n'est pas visible. En effet, on ne veut pas afficher la chaîne de caractères du code-barres dans
la zone de texte, mais tracer le motif de celui-ci au-dessus de celle-ci, en utilisant le coin supérieur gauche comme
point d'origine. La propriété Visible est fixée à Non.
D'autre part, il est possible de tracer des codes-barres de hauteur proportionnelle à la longueur du code ou de taille
fixe.
Cette dernière option implique que les propriétés Auto extensible et Auto réductible soient fixées à Non également.
Toujours dans le cas où on désire tracer des codes-barres de hauteur fixe, c'est la propriété Hauteur qui sera
déterminante, ici, 1 cm.
Si le champ CodeBarres et de type Mémo et que vous créez votre état avec l'Assistant
Étiquettes, il est possible que celui ne soit pas proposé dans la liste des champs. Il est donc
nécessaire de l'ajouter manuellement par la suite en modifiant votre état.
Comme on va le voir ultérieurement, certaines variables sont utilisées dans plusieurs modules. Elles doivent donc
être déclarées comme Public dans l'entête d'un module, afin de pouvoir être reconnues dans tout le projet.
On crée donc un module de code et on le sauvegarde sous le nom de basCodesBarres. Dans la section Déclaration,
on déclare cinq variables qui vont permettre de stocker les valeurs suivantes :
- 13 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
Option Compare Database
Option Explicit
Code
Private Sub Form_Open(cancel As Integer)
'Vérification du mode de traçage des colonnes renvoyé par défaut par l'imprimante
'Traçage horizontal = acPRHorizontalColumnLayout = 1953
'Traçage vertical = acPRVerticalColumnLayout = 1954
lngTracageColonne = Printer.ItemLayout
'Affichage de l'image correspondant au mode de traçage
'et modification de la légende de l'étiquette
If lngTracageColonne = 1953 Then
Me.imgTracageHorizontal.Visible = True
Me.imgTracageVertical.Visible = False
Me.lblTracageColonnes.Caption = "Vers la droite, ensuite vers le bas"
Else
Me.imgTracageVertical.Visible = True
Me.imgTracageHorizontal.Visible = False
Me.lblTracageColonnes.Caption = "Vers le bas, ensuite vers la droite"
End If
'Sortie de la procédure
Exit Sub
GestionErreurs:
End Sub
Le mode de traçage des colonnes peut être modifié après l'ouverture du formulaire.
- 14 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Rappelons que ce bouton placé au-dessus des images n'est pas visible puisque sa propriété Transparent et fixée
à Oui.
Cette procédure est pratiquement identique à la précédente. Elle modifie la valeur de la variable publique, l'image
affichée et la légende de l'étiquette.
Code
Private Sub cmdTracage_Click()
'Sortie de la procédure
Exit Sub
GestionErreurs:
End Sub
Dans les différents contrôles du formulaire, on saisit la chaîne de caractères que l'on veut coder, la position
d'impression de la première étiquette et le nombre désiré de celles-ci, ainsi que le type de hauteur souhaité et la
largeur des modules du code-barres.
Une fois tous les champs renseignés et le mode de traçage des colonnes sélectionné, on peut cliquer sur le bouton
cmdApercuImpression.
Ne pas oublier d'ajouter la référence Microsoft DAO 3.6 Object Library ou Microsoft Office
12.0 (14.0) Access database engine Object Library pour Access 2007 et Access 2010 au
projet. En l'absence de celle-ci, il n'est pas possible d'utiliser un objet Recordset.
Code
Private Sub cmdApercuImpression_Click()
- 15 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
'Variable recevant le code 128, après encodage de la chaîne de caractères
Dim strChaine As String
'Variable recevant successivement chaque caractère du code 128, avant leur conversion
Dim strCaractere As String
'Variable recevant successivement les caractères du code 128, après conversion
Dim strBarres
'Variable contenant le code 128 converti
Dim strCodeBarres As String
'Variable de compteur
Dim i As Long
Code
On Error GoTo GestionErreurs
Code
'Suppression des enregistrements de la table tblCodesBarres
CurrentDb.Execute "DELETE tblCodesBarres.CodeBarres FROM tblCodesBarres;", dbFailOnError
L'étape suivante consiste à coder la chaîne de caractères en code 128. Pour cela, on appelle la fonction Code128,
en passant la chaîne de caractères en argument.
Code
'Encodage de la chaîne de caractères en code 128
strChaine = Code128(Me.txtChaineCaracteres)
Hormis certains caractères spéciaux (0 à 31 de la table ASCII), tous les autres caractères de la table ASCII de base
sont disponibles dans la table B. On pourrait donc se limiter à l'utilisation de cette seule table pour coder notre chaîne
de caractères.
Toutefois, un des intérêts majeurs du code 128 est, comme on l'a vu dans la section III-D, la possibilité de l'optimiser
en utilisant la table C, en codant des paires de chiffres avec un unique caractère. C'est ce que permet de réaliser
la fonction que nous allons utiliser.
Celle-ci est très simple, elle n'utilise pas de fonctions ou de procédures pouvant la simplifier ou l'optimiser. Le but est
plutôt de pouvoir décrire facilement comment l'objectif est atteint.
- 16 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
Function Code128(strChaine)
Code
On Error GoTo GestionErreurs
Il est nécessaire d'apporter ici quelques précisions supplémentaires au sujet de la gestion des erreurs. Il est souvent
conseillé de laisser la fonction ou procédure appelante les gérer, principe que nous allons appliquer ici.
Si la chaîne de caractères passée en argument est Null, on génère délibérément une erreur en utilisant la méthode
Raise de l'objet Err, en lui attribuant le numéro 513, premier de la plage réservée aux erreurs définies par l'utilisateur
(513 à 65535).
- 17 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Si aucune table n'est encore utilisée, on tente immédiatement d'optimiser le code en essayant de débuter sur la table
C. Pour cela, quatre caractères numériques sont nécessaires.
Code
'Codage de la chaîne de caractères
For i = 1 To Len(strChaine)
'Suite du code...
End If
Next i
Si la chaîne temporaire contient quatre caractères numériques, on ajoute le caractère de démarrage de la table C à
la variable Code128, on traite la chaîne de caractères temporaire et on déclare que la table C est utilisée.
Code
'La chaîne temporaire contient quatre caractères numériques, début sur table C
If Len(strChaineTemp) = 4 Then
End If
Dans le cas contraire, on ajoute le caractère de démarrage de la table B à la variable Code128, on traite la chaîne
de caractères et on déclare que la table B est utilisée.
Code
'Le nombre de caractères numériques en début de chaîne est inférieur à quatre, début sur table B
Else
- 18 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
For j = 1 To Len(strChaineTemp)
Code128 = Code128 & Mid(strChaineTemp, j, 1)
Next j
End If
À ce stade, on a codé le ou les premiers caractères et on connaît la table en cours d'utilisation. On passe au traitement
des caractères suivants, toujours dans l'optique d'optimiser le code.
Code
'Traitement de la suite de la chaîne de caractères
Else
Code
'La chaîne temporaire contient deux caractères numériques
If Len(strChaineTemp) = 2 Then
End If
On passe au traitement du caractère suivant, toujours en tentant de trouver deux nouveaux caractères à optimiser.
Si on ne trouve pas deux caractères numériques, on doit passer sur la table B pour continuer l'encodage. On ajoute
donc un caractère de permutation à la variable Code128 avant de traiter la chaîne de caractères et on déclare que
la table B est utilisée.
Code
'Le nombre de caractères numériques est inférieur à deux
Else
- 19 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
'La table B est utilisée
blnTableC = False
blnTableB = True
End If
Si on est sur table B, on essaie de passer ou revenir sur la table C. Il nous faut dans ce cas trouver six caractères
numériques. Également, il nous faut nous assurer que le nombre de caractères contenus dans la chaîne temporaire
et restant à traiter est au moins égal à six.
Code
'Traitement sur table B, tentative de permuter sur table C pour optimiser le code
Else
'Suite du code...
End If
End If
Si la chaîne temporaire contient six caractères numériques, on peut passer sur la table C. On ajoute un caractère de
permutation à la variable Code128, on traite la chaîne de caractères et on déclare que la table C est utilisée.
Code
'La chaîne temporaire contient six caractères numériques
If Len(strChaineTemp) = 6 Then
End If
Lorsque le nombre de caractères contenus dans la chaîne temporaire et le nombre de caractères restant à traiter est
inférieur à six, il n'est évidemment plus possible de permuter sur la table C.
On vérifie donc d'abord si le caractère en cours de traitement est le cinquième avant la fin de la chaîne de caractères.
Si c'est le cas, on traite la chaîne temporaire. En effet, comme on est sur table B, il ne peut être optimisé en aucune
manière.
Code
'Le nombre de caractères de la chaîne temporaire et le reste de caractères à traiter est
inférieur à six
Else
- 20 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
'Le reste de caractères à traiter est égal à cinq
If Len(strChaine) - i + 1 = 5 Then
End If
Si le caractère en cours de traitement est numérique et que le nombre de caractères restant à traiter est égal ou
inférieur à quatre, il est encore possible d'optimiser les quatre derniers caractères.
Code
'Si le nombre de caractères restant est égal ou inférieur à quatre
If Len(strChaine) - i + 1 <= 4 Then
Si la chaîne temporaire contient quatre caractères numériques, on peut passer sur la table C. On ajoute un caractère
de permutation à la variable Code128 et on traite la chaîne de caractères.
Code
'La chaîne temporaire contient quatre caractères numériques
If Len(strChaineTemp) = 4 Then
End If
Lorsque les caractères en cours de traitement ne sont pas numériques, comme on est déjà sur la table B, on les
ajoute simplement à la variable Code128.
Code
'Le caractère en cours n'est pas numérique
Else
End If
Lorsqu'on traite le dernier caractère, quelques tests supplémentaires doivent être effectués. En effet, si à ce moment-
là la chaîne temporaire n'est pas vide, les caractères contenus dans celle-ci doivent encore être ajoutés à la variable
Code128.
- 21 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
'Traitement du dernier caractère de la chaîne
If i = Len(strChaine) And Len(strChaineTemp) >= 1 Then
'Suite du code
End If
Si on est sur table C, la chaîne temporaire ne contient qu'un caractère numérique qu'il n'est pas possible d'optimiser.
On passe donc sur table B en ajoutant un caractère de permutation avant d'ajouter le caractère restant.
Code
'La table C est en cours d'utilisation
If blnTableC Then
Si on est sur table B, la chaîne de caractère temporaire peut contenir de un à trois caractères numériques qu'il n'est
également pas possible d'optimiser. On les ajoute simplement à la variable Code128.
Code
'La table B est en cours d'utilisation
ElseIf blnTableB Then
Si aucune des tables n'est utilisée, c'est que la donnée à encoder contient moins de quatre caractères numériques. On
ajoute le caractère de démarrage de la table B à la variable Code128 et on traite la chaîne de caractères temporaire.
Code
'Aucune des deux tables n'est utilisée. La chaîne de caractères contient moins
'de quatre caractères numériques
Else
End If
La chaîne de caractères est maintenant encodée, l'étape suivante consiste à calculer la valeur de la clé de contrôle
comme indiqué dans la section III-E, puis à la convertir en caractère ASCII.
Code
'Calcul de la valeur de la clé de contrôle
For j = 1 To Len(Code128)
strCarTemp = Asc(Mid(Code128, j, 1))
strCarTemp = IIf(strCarTemp < 127, strCarTemp - 32, strCarTemp - 105)
If j = 1 Then lngCaractereControle = strCarTemp
lngCaractereControle = (lngCaractereControle + (j - 1) * strCarTemp) Mod 103
Next
- 22 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
'Caractère ASCII de la clé de contrôle
lngCaractereControle = IIf(lngCaractereControle < 95, lngCaractereControle + 32,
lngCaractereControle + 105)
Exit Function
On arrive à la fin de la procédure. En cas d'erreur, que celle-ci soit prévue ou inattendue, l'exécution du code se
poursuit après l'étiquette GestionErreurs.
Ici, on ne gère pas directement l'erreur, mais on utilise la méthode Raise de l'objet Err pour la renvoyer à la procédure
appelante avec deux arguments, le numéro d'erreur et la source de celle-ci, en l'occurrence la fonction Code128.
Code
GestionErreurs:
End Function
- 23 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
• le caractère de démarrage ;
• les caractères du code ;
• le caractère de contrôle ;
• le caractère d'arrêt.
On peut vérifier notre code 128, ici pour ABC2011, dans la fenêtre d'exécution :
Une fois les caractères du code 128 connus, il reste encore à convertir ceux-ci de manière à ce que le code-barres
puisse être dessiné de façon simple.
Comme déjà mentionné dans la section III-A, le code 128 est constitué de 107 motifs différents, composés chacun
de onze modules, groupés en trois barres et trois espaces, à l'exception du caractère d'arrêt qui est complété par
deux modules de barres à son extrémité droite permettant de fermer le code-barres et qui est donc composé de
treize modules au total.
On va donc convertir chaque caractère du code en une suite de "1" et de "0", représentant respectivement des barres
et des espaces, soit le motif de ceux-ci.
Pour ce faire, on fait appel à la fonction MotifCodeBarres128, en passant successivement chaque caractère en
argument. Les valeurs de retour sont ensuite concaténées dans la variable strCodeBarres.
Code
'Conversion des caractères. Le chiffre "1" représente les barres, le chiffre "0" les espaces
For i = 1 To Len(strChaine)
strCaractere = Mid(strChaine, i, 1)
strBarres = MotifCodeBarres128(strCaractere)
strCodeBarres = strCodeBarres & strBarres
Next i
Ici, on teste simplement la valeur du code du caractère avec une instruction Select Case.
Si cette valeur correspond à un élément de la liste, le motif du caractère est affecté en tant que valeur de retour
de la fonction.
- 24 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Comme pour la fonction précédente, les erreurs sont traitées dans la procédure appelante. Si l'erreur est inattendue,
on attribue le numéro de celle-ci à l'objet Err.
Par contre si l'erreur est due au fait que la valeur d'un caractère que l'on souhaite convertir n'est pas un élément de
la liste, on définit la valeur de l'erreur comme étant 514.
Cette erreur va être générée lorsqu'on tente de convertir un caractère dont la valeur est comprise entre 127 et 199
ou supérieure à 211, un caractère accentué par exemple.
Code
Public Function MotifCodeBarres128(strChaine As String) As String
'Suite du code...
'Sortie de la fonction
Exit Function
GestionErreurs:
End Function
- 25 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
On peut également vérifier le résultat dans la fenêtre d'exécution, toujours pour ABC2011 :
Examinons en détail le résultat obtenu et comparons-le avec les caractères des tables annexées. On constate que
la conversion est absolument correcte.
On connaît maintenant le nombre de modules du code-barres et il est donc possible de calculer la hauteur de ce
dernier si on désire que celle-ci soit variable.
Code
'Si la hauteur du code-barres est "Variable", on calcule celle-ci
If strHauteurCodeBarres = "Variable" Then
End If
Enfin, on ajoute des "quiet zone" à chaque extrémité du code-barres, soit onze modules d'espaces et on calcule la
largeur totale de celui-ci, valeur qu'on affecte à la variable publique lngLargeurCodeBarres.
Code
'Ajout des "Quiet zone" en début et en fin du code-barres
strCodeBarres = "00000000000" & strCodeBarres & "00000000000"
'Largeur du code-barres, "Quiet zone" comprises
lngLargeurCodeBarres = Len(strCodeBarres) * Me.txtLargeurModules
Il est maintenant temps de passer à l'enregistrement de la variable strCodeBarres et du libellé du code dans la table
tblCodesBarres. Ici, on doit tenir compte de la position de la première étiquette. On va donc simplement créer
- 26 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
le nombre nécessaire d'enregistrements vides, puis on ajoute autant d'enregistrements que d'étiquettes désirées :
Code
'Ajout d'enregistrements vides en fonction de l'étiquette de début désirée
i = 0
For i = 1 To Me.txtEtiquetteDebut - 1
rst.AddNew
rst("CodeBarres") = Null
rst("Libelle") = Null
rst.Update
Next i
Le résultat pour un choix de six étiquettes, la position de la première étant la troisième de la feuille :
Code
'Ouverture de l'état rptEtiquettes en le maximisant et en l'ajustant à la fenêtre Access
DoCmd.OpenReport "rptEtiquettes", acViewPreview
DoCmd.Maximize
DoCmd.RunCommand acCmdFitToWindow
Dans cette procédure, on commence par affecter la valeur de la variable publique lngTracageColonne à la propriété
ItemLayout de l'objet Printer pour définir le mode de traçage des colonnes.
- 27 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Ensuite, on vérifie que la largeur du code-barres, "quiet zone" comprises, n'est pas supérieure à celle des étiquettes.
Si c'est le cas, on annule l'ouverture de l'état, ce qui provoque une erreur 2501 dans la procédure appelante, où
elle est gérée.
Code
Private Sub Report_Open(cancel As Integer)
'Mode de traçage des étiquettes : 1953 = Traçage horizontal : 1954 = Traçage vertical
Me.Printer.ItemLayout = lngTracageColonne
End If
'Sortie de la procédure
Exit Sub
GestionErreurs:
End Sub
En cas d'erreur dans la procédure, on affiche un message et on envoie la touche Esc pour l'annuler et forcer la
fermeture de l'état.
Lors du formatage de cette section, les données enregistrées dans la table tblCodesBarres vont être affichées dans
les deux zones de texte txtCodeBarres et txtLibelle.
Pour rappel, la propriété Visible de la zone de texte txtCodeBarres est fixée à Non, car nous ne voulons pas afficher
des "1" et des "0", mais dessiner des barres et des espaces.
Code
Private Sub Detail_Format(cancel As Integer, FormatCount As Integer)
'Sortie de la procédure
Exit Sub
GestionErreurs:
- 28 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & vbNewLine & _
"Source : " & Err.Source & vbNewLine & _
"Erreur no : " & Err.Number & vbNewLine & _
"Description : " & Err.Description, vbCritical, "Erreur !"
End Sub
En cas d'erreur dans la procédure, on procède de la même manière que dans la précédente.
On va maintenant dessiner les codes-barres. Pour l'essentiel, cette procédure est inspirée de l'article Apprendre à
écrire et dessiner dans les états Access de Philippe JOCHMANS.
Avant toute chose, on déclare deux constantes pour les couleurs des barres et espaces dans la section Déclaration
du module, noire pour les barres et blanche pour les espaces.
Code
'Déclaration des constantes utilisées dans le module
'Couleur des barres
Private Const CouleurBarre As Long = 0
'Couleur des espaces
Private Const CouleurEspace As Long = 16777215
Code
Public Sub TracerMotifCodeBarres128(Ctrl As Control, rpt As Report)
Puis, on affecte la valeur de la zone de texte txtCodeBarres passée en argument à la variable strCodeBarres, pour
autant que celle-ci ne soit pas Null.
Code
On Error GoTo GestionErreurs
- 29 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
End If
On initialise les coordonnées horizontales et verticales du point de départ de la première barre, le coin en haut et à
gauche de la zone de texte txtCodeBarres. La coordonnée horizontale du point d'arrivée est, elle, égale à la valeur
de la variable lngTailleModule.
Code
'Initialisation des coordonnées X1, Y1 et X2 en twips
sngX1 = Ctrl.Left
sngY1 = Ctrl.Top
sngX2 = lngTailleModule
Il reste à initialiser la coordonnée verticale du point d'arrivée, en fonction du type de hauteur choisi. Si celle-ci est
variable, la coordonnée Y2 prend la valeur de la variable lngHauteurModule. Si elle est fixe, c'est la hauteur de la
zone de texte txtCodeBarres qui est affectée à cette dernière.
Code
'Initialisation de la coordonnée Y2
Select Case strHauteurCodeBarres
'Si le type de hauteur est "Variable"
Case "Variable"
'La coordonnée verticale du point d'arrivée est égale à la valeur
'de la variable lngHauteurModule
sngY2 = lngHauteurModule
'Si le type de hauteur est "Fixe"
Case Else
'La coordonnée verticale du point d'arrivée est définie par la hauteur
'de la zone de texte txtCodeBarres
sngY2 = Ctrl.Height
End Select
Comme on connaît la largeur du code-barres et la largeur de la zone de texte, il est simple de centrer très exactement
celui-ci sur les étiquettes, en décalant la coordonnée horizontale du point de départ vers la droite.
Code
'Calcul de la valeur de la marge à appliquer à gauche
sngLargeurZoneTexte = Ctrl.Width
sngMargeGauche = Int((sngLargeurZoneTexte - lngLargeurCodeBarres) / 2)
Enfin, on dessine les barres et les espaces sur l'état. Après avoir dessiné le premier espace, on décale simplement
la coordonnée horizontale X1 du module suivant vers la droite.
Code
'Traçage du code-barres
For i = 1 To Len(strCodeBarres)
'Type de module, barre ou espace, à tracer
strTypeModule = Mid(strCodeBarres, i, 1)
Select Case strTypeModule
Case "1"
'Traçage d'une barre
rpt.Line (sngX1, sngY1)-Step(sngX2, sngY2), CouleurBarre, BF
'Calcul de la coordonnée X1 suivante
sngX1 = sngX1 + lngTailleModule
Case "0"
'Traçage d'un espace
rpt.Line (sngX1, sngY1)-Step(sngX2, sngY2), CouleurEspace, BF
'Calcul de la coordonnée X1 suivante
sngX1 = sngX1 + lngTailleModule
End Select
Next i
- 30 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
L'exécution de la procédure étant achevée, on peut la quitter. En cas d'erreur, le numéro et la source de celle-ci sont
transmis à la procédure appelante.
Code
'Sortie de la procédure
Exit Sub
GestionErreurs:
End Sub
On arrive ici à la fin de la procédure. On prend soin de fermer le Recordset pour libérer la mémoire et d'affecter
Nothing à la variable.
En cas d'erreur, que celle-ci soit prévue ou inattendue, l'exécution du code se poursuit après l'étiquette
GestionErreurs.
• l'annulation de l'ouverture de l'état si la largeur des codes-barres est supérieure à celle des étiquettes (erreur
2501) ;
• la tentative d'encodage d'une chaîne de caractères ayant une valeur Null (erreur 513) ;
• la tentative de codage de caractères non supportés par le code 128 (erreur 514) ;
• toute erreur inattendue survenue dans les fonctions Code128 et MotifCodeBarres128.
Pour les trois premières erreurs, on affiche un message explicite. En cas d'erreur inattendue, on affiche sa source,
son numéro et sa description.
Quel que soit le type d'erreur, l'exécution du code se poursuit après l'étiquette
SortieApercuImpression, afin de garantir que même en cas d'erreur, le Recordset est bien
fermé et la mémoire libérée.
Code
SortieApercuImpression:
'Libération de l'objet
rst.Close
db.Close
Set rst = Nothing
Set db = Nothing
'Sortie de la procédure
Exit Sub
GestionErreurs:
- 31 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
Code
'Sortie de la procédure
Resume SortieApercuImpression
'Sortie de la procédure
Resume SortieApercuImpression
'La chaîne de caractères contient un ou des caractères non supportés par le code 128
Case 514
'Affichage d'un message
MsgBox "La chaîne de caractères n'est pas valide !" & vbNewLine & vbNewLine & _
"Elle contient des caractères non supportés par le code 128," & vbNewLine & _
"par exemple des caractères accentués.", vbCritical, "Erreur !"
'Sortie de la procédure
Resume SortieApercuImpression
Case Else
'Affichage d'un message
MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & vbNewLine & _
"Source : " & Err.Source & vbNewLine & _
"Erreur no : " & Err.Number & vbNewLine & _
"Description : " & Err.Description, vbCritical, "Erreur !"
'Sortie de la procédure
Resume SortieApercuImpression
End Select
End Sub
V - Conclusion
Il ne s'avère donc pas très compliqué de créer des codes-barres sans avoir recours à des composants externes, que
ce soit une police de caractères ou un contrôle ActiveX.
Les nombreux tests effectués sur ces codes-barres conçus uniquement en utilisant VBA ont démontré qu'ils sont
parfaitement lisibles et soutiennent aisément la comparaison avec des codes-barres imprimés au moyen de polices
de caractères spéciales.
Cette solution offre en outre l'avantage de pouvoir calculer très précisément la largeur des modules et la hauteur
des codes-barres si nécessaire.
VI - Remerciements
Je tiens à remercier tous les membres de l'équipe Office pour leurs conseils avisés. Remerciements tout particuliers
à GAYOT pour ses nombreux tests de lecture des codes-barres.
- 32 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
VII - Liens
- 33 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
- 34 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
- 35 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/
Access : créer des codes-barres 128 en VBA par Dominique KIRCHHOFER
- 36 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2010 Kirchhofer Dominique. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés
à Developpez LLC.
http://domi2.developpez.com/tutoriels/access/codes-barres/