Codes Barre VB Access

Embed Size (px)

Citation preview

Access : crer des codes-barres avec Visual Basicpar Dominique KIRCHHOFER (http://domi2.developpez.com/)Date de publication : 24 octobre 2010 Dernire mise jour :

Crer des codes-barres avec Visual Basic. Niveau requis : intermdaire.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

I - Introduction..............................................................................................................................................................3 II - Gnralits............................................................................................................................................................. 3 II-A - Les codes-barres................................................................................................................................................3 II-B - Lecture des codes-barres...................................................................................................................................4 III - Le code-barres 128...............................................................................................................................................4 III-A - Les diffrents caractres du code............................................................................................................... 4 III-B - La stucture du code..................................................................................................................................... 5 III-C - Les modules.................................................................................................................................................5 III-D - Optimisation du code................................................................................................................................... 6 III-E - Le caractre de contrle..............................................................................................................................7 III-F - Les spcifications......................................................................................................................................... 7 III-F-1 - Lgende du code-barres..................................................................................................................... 8 III-F-2 - Largeur des modules et du code-barre...............................................................................................8 III-F-3 - Hauteur des modules.......................................................................................................................... 8 III-F-4 - Specifications de vos propres codes-barres....................................................................................... 8 IV - L'application de cration de code-barres............................................................................................................. 9 IV-A - Table.............................................................................................................................................................9 IV-B - Formulaire.................................................................................................................................................. 10 IV-C - Etat.............................................................................................................................................................11 IV-D - Modules de code....................................................................................................................................... 12 IV-D-1 - Le module du formulaire...................................................................................................................12 IV-D-2 - Le module de l'tat........................................................................................................................... 15 IV-D-3 - Les fonctions de codage et de dessin du code-barres.................................................................... 16 V - Conclusion........................................................................................................................................................... 21 VI - Remerciements................................................................................................................................................... 21 VII - Liens...................................................................................................................................................................21 VIII - Tlchargement................................................................................................................................................ 21 IX - Annexe - composition des tables du code 128..................................................................................................22

-2Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

I - IntroductionLes questions touchant la cration de codes-barres sont relativement frquentes sur le forum Access. Bien que plusieurs rponses aient t donnes, nombre de discussions demeurent non rsolues. Dans la plupart des cas, ce n'est pas faute d'une bonne solution, mais plutt l'absence de dtails et de prcisions qui ont fait que beaucoup de membres ont abandonn cette ide. Cet article a pour but de vous expliquer comment crer des codes-barres, sans utiliser un contrle ActiveX spcifique ni de police de caractres spciale, mais uniquement avec Visual Basic. Pour atteindre cet objectif, de bonnes connaissances en Visual Basic sont ncessaires, ce qui rserve plutt cet article des utilisateurs ayant dj quelque exprience de la programmation avec ce language.

II - GnralitsLe premier systme de codes-barres a t brevet en 1952. Il concernait un code ligne verticale, mais aussi de forme concentrique (en forme de cible) ainsi que le systme de lecture des donnes. Leur premire utilisation a t l'tiquetage des wagons de train, sans que le succs commercial ne soit toutefois au rendez-vous. Il faudra attendre le dbut des annes 1970 et l'invention du code UCP, Universal Product Code ou CUP en franais, utilis dans la grande distribution, pour que leur usage se gnralise. Aujourd'hui, ils sont utiliss dans de nombreux domaines d'activit, par exemple : code 11 : tlcommunications ; code 39 : industrie automobile, pharmacode France, arme amricaine ; code 128 : transports, sant, pices dtaches pour le secteur automobile.

Cette liste est bien sr loin d'tre exhaustive.

II-A - Les codes-barres l'origine, les codes-barres sont la reprsentation, sous forme d'un ensemble de barres et d'espaces, d'une donne numrique ou alphanumrique, l'paisseur des barres et espaces variant selon la symbiologie utilise et les caractres de la donne coder. Ces codes, linaires, sont lus horizontalement. Puis sont apparus des codes linaires empils, ainsi nomms car ils sont constitus de plusieurs codes-barres linaires empils les uns sur les autres. Ils sont lus verticalement. Plus rcemment, 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 donnes sur une petite surface, jusqu' plusieurs milliers de caractres pour certains d'entre eux. Code-barres linaire Code-barres linaire empil Code-barres deux dimensions

Code-barres 128

Code-barres PDF 417

Code-barres Aztec

-3Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

II-B - Lecture des codes-barresPour lire les donnes ainsi codes, on utilise un lecteur de code-barres, qui n'est autre qu'un lecteur optique mettant de la lumire : le lecteur met de la lumire qui est est absorbe par les barres sombres et rflchie par les espaces clairs ; l'intrieur du lecteur, une cellule photosensible reoit la lumire rflchie et la convertit en signal lectrique ; le signal est faible pour les espaces clairs et fort pour les barres sombres ; la dure du signal dtermine la largeur des barres et espaces ; un dcodeur convertit le signal en caractres ; les caractres dcods sont transmis l'ordinateur.

Diffrents types de lecteurs de codes-barres :

Stylo optique

Douchette

Scanner

III - Le code-barres 128Comme nous l'avons vu dans le prcdent chapitre, il existe de nombreux types de codes-barres, destins pour la plupart des domaines bien spcifiques. Dans le cadre de cet article, nous n'en tudierons qu'un seul, choisi non pas en fonction d'un domaine d'utilisation prcis, mais parce qu'il permet de coder un maximum de caractres de manire simple et fiable. Le choix du code 128 s'est donc impos presque naturellement. Il permet en effet de coder les 128 caractres ASCII de base, il est omnidirectionnel, il est trs dense, notamment pour les valeurs numriques, et possde un caractre de contrle. 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 dfinit la manire dont les donnes sont formates. Leur signification est prcise selon une liste d'Identificateurs d'Application, usuellement abrg AI. Ces derniers, placs au dbut du code, indiquent ce que contiennent les donnes elle-mmes (numro de colis, date de production, d'emballage, etc.).

III-A - Les diffrents caractres du codeIl est constitu de 107 motifs diffrents, reprsentant 103 caractres de donnes, 3 caractres de dmarrage et un caractre d'arrt. Pour permettre de coder les 128 caractres de la table ASCII, il existe 3 ensembles de codes (A, B et C) qui peuvent tre mlangs dans un mme code-barres par l'utilisation de caractres de permutation (caractres 99, 100 et 101).

-4Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Contenu des tables : 128A : les chiffres, les lettres majuscules, des caractres de ponctuations, des codes de contrle et des codes spciaux ; 128B : les chiffres, les lettres majuscules et minuscules, des caractres de ponctuations et des codes spciaux ; 128C : des paires de chiffres, permettant de doubler la densit des caractres numriques, et des codes spciaux.

La table reprsentant les 3 ensembles de caractres du code est disponible en annexe. Dans cet article, nous nous limiterons l'usage des ensembles de caractres B et C.

III-B - La stucture du codeLe code 128 est compos de 6 sections : une marge blanche gauche ou "quiet zone" ; un caractre de dmarrage ; les donnes elles-mmes ; un caractre de contrle ; un caractre d'arrt ; une marge blanche droite ou "quiet zone".

Les marges ou "quiet zone" gauche et droite du code doivent avoir au moins 10 modules d'paisseur ; le caractre de dmarrage dtermine la table utilise au dpart ; le caractre, ou cl, de contrle est obligatoire. Le dtail du calcul est expos ci-aprs ; le caractre d'arrt est identique, quelque soit les ensembles de caractres utiliss.

III-C - Les modulesComme nous l'avons prcdemment, le code 128 est constitu de 107 motifs diffrents, composs chacun de 11 modules, groups en 3 barres et 3 espaces. Le caractre d'arrt est complt par deux modules de barres son extrmit droite permettant de fermer le codebarres. Il est donc compos de 13 modules au total. Pour encoder les donnes, on peut considrer que le chiffre "1" reprsente des barres et le chiffre "0" des espaces. Ainsi la lettre "A" sera symbolise par "10100011000", soit 3 barres et 3 espaces de diffrentes paisseurs.-5Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

III-D - Optimisation du codeUn des intrts du code 128 rside dans la possibilit d'optimiser le codage de donnes numriques en utilisant un seul caractre pour des paires de chiffres, en recourant l'ensemble de caractres C. Ainsi, si "44" ncessite 2 fois le caractre "4" dans l'ensemble B, il peut tre cod uniquement avec le caractre "L" en recourant l'ensemble C. Il faut tenir compte ici des caractres spciaux permettant de passer d'un ensemble de caractres l'autre. L'optimisation du code est donc possible pour autant que la donne coder : commence par 4 chiffres au moins ; se termine par 4 chiffres au moins ; comprenne 6 chiffres au moins au milieu de la donne.

En effet, dans le premier cas, on commence en effet utiliser l'ensemble C, puis on utilise 1 caractre de permutation pour passer l'ensemble B pour coder la suite des donnes si ncessaire. Dans le deuxime cas, on commence par l'ensemble B, puis 1 caractre est utilis pour passer vers l'ensemble C. Enfin, dans le troisime cas de figure, 2 caractres sont ncessaires pour passer de l'ensemble B vers l'ensemble C, puis nouveau vers l'ensemble B. A titre d'exemple, essayons de crer le code pour la donne ABC2011, tout d'abord sans optimisation de l'encodage, c'est--dire en ayant recours uniquement l'ensemble de caractres B. Le rsultat obtenu est le suivant : Caractre ASCII Caractre Valeur Start B 104 A A 33 B B 34 C C 35 2 2 18 0 0 16 1 1 17 1 1 17

Reprenons la mme donne, en optimisant le code cette fois-ci, c'est--dire en ayant recours aux ensembles de caractres B et C. Le rsultat est naturellement diffrent, les 4 caractres numriques tant cods avec 2 caractres uniquement : Caractre ASCII Caractre Valeur Start B 104 A A 33 B B 34 C C 35 Table C 99 4 20 20 + 11 11

On voit bien l'intrt d'optimiser l'encodage, le recours ce procd permettant de produire des codes trs denses s'agissant de donnes numriques. Dans les deux exemples ci-dessus, le caractre de contrle et le caractre d'arrt ne sont pas encore compris.

-6Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

III-E - Le caractre de contrleLe caractre de contrle, obligatoire, se calcule selon un schma bien prcis et en utilisant un modulo 103. En lisant le code de gauche droite, on commence par prendre la valeur du code de dmarrage (103, 104 ou 105) pour les ensembles de caractres A, B ou C respectivement. Puis, pour chaque caractre suivant, on multiplie la valeur du caractre par la valeur de sa position dans la chane, le caractre suivant immdiatement le caractre de dmarrage ayant le rang 1. Caractre ASCII Caractre Valeur Position Multiplication Produit Start B 104 104 104 A A 33 1 33*1 33 B B 34 2 34*2 68 C C 35 3 35*3 105 Table C 99 4 99*4 396 4 20 20 5 20*5 100 + 11 11 6 11*6 66

Le rsultat de l'addition des produits, 872 dans cet exemple, est divis par 103, le reste de la division tant la valeur du caractre de contrle, soit 48. Ensuite, cette valeur doit tre convertie en caractre ASCII en appliquant la mthode suivante : si elle est comprise entre 0 et 94, on ajoute 32 ; si elle est suprieure 94, on ajoute 105.

Ici, la valeur tant infrieure 95, nous ajoutons 32. Le rsultat, soit 80, donne le caractre ASCII "P". Il ne reste alors plus qu' ajouter ce caractre de contrle et le caractre d'arrt pour complter le code : Caractre ASCII Caractre Start B A A B B C C Table C 4 20 + 11 P P Stop

Nous connaissons maintenant l'intgralit des caractres ASCII que nous devons convertir en barres et espaces pour obtenir le code-barres de la donne ABC2011.

III-F - Les spcificationsIl s'est avr difficile de trouver des spcifications pour le code 128. La plupart de celles trouves sur Internet sont le fait de fournisseurs de polices de caractres, de lecteurs de codes-barres ou encore d'imprimantes. Il existe galement des spcifications plus officielles, par exemple la norme franaise et europenne NF EN 799, applicable entre autre l'impression des N RPPS et N AM des ordonnances mdicales. Le but de cette article n'est cependant pas de produire des codes-barres pour un usage spcifique. Aussi, les indications fournies ci-aprs sont plutt une synthse des divers renseignements trouvs, qui devraient permettre d'imprimer des codes-barres lisibles par la grande majorit des lecteurs disponibles sur le march. Il n'est non plus pas ncessaire 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 tche.

-7Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

III-F-1 - Lgende du code-barresLe code-barres peut tre lgend ou non.

III-F-2 - Largeur des modules et du code-barreLa dimension X d'un module devrait tre de 7.5 millimes de pouce au minimum. Sachant qu'un pouce est gal 1'440 twips ou 2.54 cm, un millime de pouce est gal 1.44 twips. 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 dfaut de 12 twips, ce qui devrait garantir une lecture par tout type de matriel. Ceci est en principe largement suffisant. Pour une donne de 25 caractres par exemple, soit 28 caractres en tenant compte des caractres de dmarrage, de contrle et d'arrt, la largeur du code-barres n'excde pas 6.56 cm. La largeur des codes-barres n'est en thorie pas limite. Vous devez cependant tre attentif aux caractristique techniques de votre lecteur de codes-barres. Certaines douchettes sont par exemple dans l'incapact de lire des codes-barres de plus de 7.5 cm de largeur.

III-F-3 - Hauteur des modulesLa symbologie du code 128 ne spcifie galement 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 pouces, soit environ 0.6cm, la valeur la plus leve tant retenue. Pour la hauteur maximum, on peut se limiter 0.5 pouces, soit environ 1.3 cm. Dans l'application exemple, elle est fixe au plus 1 cm.

III-F-4 - Specifications de vos propres codes-barresComme cela a t prcis, les spcifications ci-dessus n'ont rien d'officiel. Il vous faudra donc faire vos propres tests pour obtenir les meilleurs rsultats possibles. Les lecteurs de codes-barres sont gnralement fournis avec une documentation contenant des codes tmoins, permettant soit de calibrer le lecteur, soit de faire des simples tests de lecture. Si un code 128 est fourni, l'tude de celui-ci vous fournira de prcieuses indications (hauteur, largeur des modules) pour la cration de vos propres codes-barres.

-8Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

IV - L'application de cration de code-barresAprs cette intoduction thorique, nous pouvons passer la cration de l'application ! Celle-ci est assez modulaire, de sorte que vous devriez pouvoir l'intgrer facilement dans une application existante. Elle est compose : d'une table ; d'un formulaire et de son module (4 procdures) ; d'un tat et de son module (2 procdures) ; d'un module de code contenant 3 fonctions ncessaires l'encodage et au tracage des codes-barres.

IV-A - TableOn commence par crer une table tblCodesBarres avec 3 champs :

IdCodesBarres, de type NumroAuto, qui est la cl primaire de la table ; CodesBarres, de type Mmo, pour recevoir les modules du code-barres ; Libelle, de type Texte (taille 50), pour le libell du code. Si vous vous tes certains que le nombre de modules constituant vos codes-barres sera toujours gal ou infrieur 255, vous pouvez bien sr utiliser un champ de type Texte pour le champ CodesBarres.

-9Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

IV-B - FormulaireOn peut ensuite passer la cration du formulaire frmCodeBarres et modifier les proprits qui nous intressent.

On notera principalement qu'il est indpendant, qu'il n'a pas de barres de dfilement, ni de slecteur et de diviseurs d'enregistrements. Les boutons ne sont galement pas affichs. On y place 4 zones de texte, indpendantes elles aussi : txtChaineCaractere va nous permettre de saisir la donne du code-barres ; txtEtiquetteDebut indique la position de la 1re tiquette imprimer. La proprit Valeur par dfaut de cette zone de texte est fixe 1 ; txtNbEtiquettes dfinit le nombre d'tiquettes dsirs. La proprit Valeur par dfaut de cette zone de texte est fixe 16 ; txtLargeurModules fixe la dimension X ou largeur des modules, exprime en twips. La proprit Valeur par dfaut de cette zone de texte est fixe 12.

Puis on ajoute 2 images et un bouton avec sa proprit Tranparent Oui, qu'on superpose les uns sur les autres dans cet ordre, en commenant par l'arrire-plan : imgTracageVertical ; imgTracageHorizontal ; cmdTracage.

Ces 3 trois lments vont nous permettre, sur clic du bouton cmdTracage, de slectionner le mode de Traage des tiquettes. Enfin, on rajoute 2 boutons : cmdApercuImpression ouvre l'tat rptEtiquettes en mode Aperu avant impression ; cmdFermer ferme le formulaire.

- 10 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Ci-dessous, l'aspect dfinitif du formulaire :

IV-C - EtatEnfin, on cre un tat rptEtiquettes. Il ne prsente pas de particularit et on peut sans autre utiliser l'Assistant tiquettes en slectionnant la table tblCodesBarres comme Source. Pour l'application, le choix s'est port sur un modle de 2 tiquettes de front. Aprs ajustement manuel des dimensions, celles-ci sont d'environ 94 x 34 mm, soit 16 tiquettes au total. On y insre ensuite les champs CodeBarres et Libelle. Si le champ CodeBarres et de type Mmo, il est possible que celui ne soit pas propos par l'assistant. Il est donc ncessaire de l'ajouter manuellement par la suite en modifiant votre tat. Ensuite que quoi nous renommons les deux zones de texte, respectivement txtCodeBarres et txtLibelle. Aperu de l'tat en mode Cration :

- 11 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Il est utile de commenter 2 proprits de la zone de texte txtCodeBarres. Tout d'abord, celle-ci n'est pas visible. En effet, on ne va pas tracer le code-barres dans la zone de texte, mais bien par-dessus celle-ci, en utilisant le coin suprieur gauche comme point d'origine. La proprit Visible est fixe Non. D'autre part, il est possible de tracer des codes-barres de hauteur proportionnelle la longueur du code ou de taille fixe. Cette dernire option implique que les proprits Auto extensible et Auto rductible soient fixes Non galement. Proprits de la zone de texte :

IV-D - Modules de code IV-D-1 - Le module du formulaireCodePrivate Sub Form_Open(cancel As Integer) On Error GoTo GestionErreurs 'Vrification du mode de traage des colonnes renvoy par dfaut par l'imprimante 'Traage horizontal = acPRHorizontalColumnLayout = 1953 'Traage vertical = acPRVerticalColumnLayout = 1954 lngTracageColonne = Printer.ItemLayout 'Affichage de l'image correspondant au mode de traage 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 procdure Exit Sub GestionErreurs: 'Affichage d'un message MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _ & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !" End Sub - 12 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

CodePrivate Sub cmdTracage_Click() On Error GoTo GestionErreurs 'Modification du mode de traage des tiquettes avec affichage de l'image correspondante If lngTracageColonne = 1953 Then Me.imgTracageVertical.Visible = True Me.imgTracageHorizontal.Visible = False Me.lblTracageColonnes.Caption = "Vers le bas, ensuite vers la droite" lngTracageColonne = 1954 Else Me.imgTracageHorizontal.Visible = True Me.imgTracageVertical.Visible = False Me.lblTracageColonnes.Caption = "Vers la droite, ensuite vers le bas" lngTracageColonne = 1953 End If 'Sortie de la procdure Exit Sub GestionErreurs: 'Affichage d'un message MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _ & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !" End Sub

CodePrivate Sub cmdApercuImpression_Click() 'Dclaration des objets et des variables Dim db As DAO.Database Dim rst As DAO.Recordset Set db = CurrentDb Set rst = db.OpenRecordset("select * from tblCodesBarres") Dim Dim Dim Dim Dim strChaine As String strCaractere As String strBarres strCodeBarres As String i As Long

On Error GoTo GestionErreurs 'La largeur des modules est assigne la variable lngTailleModule lngTailleModule = Me.txtLargeurModules 'Suppression des enregistrements de la table tblCodesBarres CurrentDb.Execute "DELETE tblCodesBarres.CodeBarres FROM tblCodesBarres;", dbFailOnError 'Codage des donnes strChaine = Code128(Me.txtChaineCaractere) For i = 1 To Len(strChaine) strCaractere = Mid(strChaine, i, 1) strBarres = MotifCodeBarres128(strCaractere) strCodeBarres = strCodeBarres & strBarres Next i 'Calcul de la hauteur des modules par rapport la largeur du code-barres lngLargeurCodeBarres = Len(strCodeBarres) * Me.txtLargeurModules Select Case lngLargeurCodeBarres '15 % de la longueur excde 567 twips (1 cm) Case Is > 3780 'Hauteur maximale des modules gale 567 twips lngHauteurModule = 567 '15 % de la longeur est infrieur 340 twips (0.6 cm) - 13 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Code

Case Is < 2268 'Hauteur minimale des modules, 340 twips lngHauteurModule = 340 Case Else 'La hauteur des modules est gale 15 % de la longueur du code-barres lngHauteurModule = Int((lngLargeurCodeBarres / 100 * 15) + 1 * 0.5) End Select MsgBox lngHauteurModule 'Ajout des "Quiet zone" en dbut et en fin du code-barres strCodeBarres = "00000000000" & strCodeBarres & "00000000000" 'Largeur du code-barres, "Quiet zone" comprises lngLargeurCodeBarres = Len(strCodeBarres) * Me.txtLargeurModules i = 0 'Ajout d'enregistrements vides en fonction de l'tiquette de dbut slectionne For i = 1 To Me.txtEtiquetteDebut - 1 rst.AddNew rst("CodeBarres") = Null rst("Libelle") = Null rst.Update Next i 'Ajout du nombre d'enregistrements correspondants au nombre d'tiquettes dsires i = 0 For i = 1 To Me.txtNbEtiquettes rst.AddNew rst("CodeBarres") = strCodeBarres rst("Libelle") = Me.txtChaineCaractere rst.Update Next i 'Ouverture de l'tat rptEtiquettes en le maximisant et en l'ajustant la fentre Access DoCmd.OpenReport "rptEtiquettes", acViewPreview DoCmd.Maximize DoCmd.RunCommand acCmdFitToWindow

SortieApercuImpression: 'Libration des objets rst.Close db.Close Set rst = Nothing Set db = Nothing 'Sortie de la procdure Exit Sub GestionErreurs: Select Case Err.Number 'L'ouverture de l'tat t annule Case 2501 'Sortie de la procdure Resume SortieApercuImpression 'La chane de caractre est nulle Case 513 'Affichage d'un message MsgBox "La chane de caractres n'est pas valide (Null) !" & vbNewLine & vbNewLine & _ "Veuillez vrifiez votre saisie.", vbCritical, "Erreur !" 'Sortie de la procdure Resume SortieApercuImpression 'Le code contient des caractres n'appartenant pas la table ASCII de base Case 514 'Affichage d'un message MsgBox "La chane de caractres n'est pas valide !" & vbNewLine & vbNewLine & _ "Elle contient des caractres n'appartenant pas la table" & vbNewLine & _ - 14 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Code

"ASCII de base, par exemple des caractres accentus.", vbCritical, "Erreur !" 'Sortie de la procdure 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 procdure Resume SortieApercuImpression End Select

End Sub

CodePrivate Sub cmdFermer_Click() On Error GoTo GestionErreurs 'Fermeture du formulaire DoCmd.Close 'Sortie de la procdure Exit Sub GestionErreurs: 'Affichage d'un message MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _ & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !" End Sub

IV-D-2 - Le module de l'tatCodePrivate Sub Report_Open(cancel As Integer) On Error GoTo GestionErreurs 'Mode de traage des tiquettes : 1953 = Traage horizontal : 1954 = Traage vertical Me.Printer.ItemLayout = lngTracageColonne If lngLargeurCodeBarres > Me.txtCodeBarres.Width Then 'Affichage d'un message MsgBox "La largeur des codes-barres est suprieure celle des tiquettes !", _ vbCritical, "Erreur !" 'Annulation de l'ouverture de l'tat. L'erreur est gre dans la procdure appelante cancel = True End If 'Sortie de la procdure Exit Sub GestionErreurs: 'Affichage d'un message MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _ & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !"

- 15 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Code Code

End Sub

Private Sub Detail_Format(cancel As Integer, FormatCount As Integer) On Error GoTo GestionErreurs 'Appel de la fonction de traage des codes-barres TracerMotifCodeBarres128 Me.txtCodeBarres, Me 'Sortie de la procdure Exit Sub GestionErreurs: 'Affichage d'un message MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _ & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !" End Sub

IV-D-3 - Les fonctions de codage et de dessin du code-barresBlablablablablabla CodeOption Compare Database Option Explicit 'Dclaration des variables publiques 'Mode de traage des colonnes de l'tat Public lngTracageColonne As Long 'Taille d'un module de barre ou d'espace (twips) Public lngTailleModule As Long 'Taille d'un module de barre ou d'espace (twips) Public lngHauteurModule As Long 'Largeur du code-barres (twips) Public lngLargeurCodeBarres As Long 'Dclaration des constantes utilises dans le module 'Couleur des barres Private Const CouleurBarre As Long = 0 'Couleur des espaces Private Const CouleurEspace As Long = 16777215

CodePublic Function Code128(strChaine) 'Dclaration des variables Dim i As Long Dim lngCaractereControle As Long Dim strMini As String Dim strDummy As String Dim blnTableB As Boolean On Error GoTo GestionErreurs 'Provoque une erreur transmise la procdure appelante si la chane est nulle If IsNull(strChaine) Then Err.Raise 513 'Calculer la chaine de code en optimisant l'usage des tables B et C Code128 = Null blnTableB = True - 16 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Codei = 1 'i devient l'index sur la chane Do While i 57 Then Exit Do strMini = strMini - 1 Loop End If Return GestionErreurs: 'Transmet l'erreur la procdure appelante - 17 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Code

Err.Raise Err.Number, "Code128"

End Function

CodePublic Function MotifCodeBarres128(strChaine As String) As String On Error GoTo GestionErreurs Select Case Asc(strChaine) Case 32: MotifCodeBarres128 = "11011001100" Case 33: MotifCodeBarres128 Case 34: MotifCodeBarres128 Case 35: MotifCodeBarres128 Case 36: MotifCodeBarres128 Case 37: MotifCodeBarres128 Case 38: MotifCodeBarres128 Case 39: MotifCodeBarres128 Case 40: MotifCodeBarres128 Case 41: MotifCodeBarres128 Case 42: MotifCodeBarres128 Case 43: MotifCodeBarres128 Case 44: MotifCodeBarres128 Case 45: MotifCodeBarres128 Case 46: MotifCodeBarres128 Case 47: MotifCodeBarres128 Case 48: MotifCodeBarres128 Case 49: MotifCodeBarres128 Case 50: MotifCodeBarres128 Case 51: MotifCodeBarres128 Case 52: MotifCodeBarres128 Case 53: MotifCodeBarres128 Case 54: MotifCodeBarres128 Case 55: MotifCodeBarres128 Case 56: MotifCodeBarres128 Case 57: MotifCodeBarres128 Case 58: MotifCodeBarres128 Case 59: MotifCodeBarres128 Case 60: MotifCodeBarres128 Case 61: MotifCodeBarres128 Case 62: MotifCodeBarres128 Case 63: MotifCodeBarres128 Case 64: MotifCodeBarres128 Case 65: MotifCodeBarres128 Case 66: MotifCodeBarres128 Case 67: MotifCodeBarres128 Case 68: MotifCodeBarres128 Case 69: MotifCodeBarres128 Case 70: MotifCodeBarres128 Case 71: MotifCodeBarres128 Case 72: MotifCodeBarres128 Case 73: MotifCodeBarres128 Case 74: MotifCodeBarres128 Case 75: MotifCodeBarres128 Case 76: MotifCodeBarres128 Case 77: MotifCodeBarres128 Case 78: MotifCodeBarres128 Case 79: MotifCodeBarres128 Case 80: MotifCodeBarres128 Case 81: MotifCodeBarres128 Case 82: MotifCodeBarres128 Case 83: MotifCodeBarres128 Case 84: MotifCodeBarres128 Case 85: MotifCodeBarres128 Case 86: MotifCodeBarres128 Case 87: MotifCodeBarres128

' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Caractre = Espace / Table B = Espace "11001101100" ' Caractre = ! / Table "11001100110" ' Caractre = " / Table "10010011000" ' Caractre = # / Table "10010001100" ' Caractre = $ / Table "10001001100" ' Caractre = % / Table "10011001000" ' Caractre = & / Table "10011000100" ' Caractre = ' / Table "10001100100" ' Caractre = ( / Table "11001001000" ' Caractre = ) / Table "11001000100" ' Caractre = * / Table "11000100100" ' Caractre = + / Table "10110011100" ' Caractre = , / Table "10011011100" ' Caractre = - / Table "10011001110" ' Caractre = . / Table "10111001100" ' Caractre = / / Table "10011101100" ' Caractre = 0 / Table "10011100110" ' Caractre = 1 / Table "11001110010" ' Caractre = 2 / Table "11001011100" ' Caractre = 3 / Table "11001001110" ' Caractre = 4 / Table "11011100100" ' Caractre = 5 / Table "11001110100" ' Caractre = 6 / Table "11101101110" ' Caractre = 7 / Table "11101001100" ' Caractre = 8 / Table "11100101100" ' Caractre = 9 / Table "11100100110" ' Caractre = : / Table "11101100100" ' Caractre = ; / Table "11100110100" ' Caractre = < / Table "11100110010" ' Caractre = = / Table "11011011000" ' Caractre = > / Table "11011000110" ' Caractre = ? / Table "11000110110" ' Caractre = @ / Table "10100011000" ' Caractre = A / Table "10001011000" ' Caractre = B / Table "10001000110" ' Caractre = C / Table "10110001000" ' Caractre = D / Table "10001101000" ' Caractre = E / Table "10001100010" ' Caractre = F / Table "11010001000" ' Caractre = G / Table "11000101000" ' Caractre = H / Table "11000100010" ' Caractre = I / Table "10110111000" ' Caractre = J / Table "10110001110" ' Caractre = K / Table "10001101110" ' Caractre = L / Table "10111011000" ' Caractre = M / Table "10111000110" ' Caractre = N / Table "10001110110" ' Caractre = O / Table "11101110110" ' Caractre = P / Table "11010001110" ' Caractre = Q / Table "11000101110" ' Caractre = R / Table "11011101000" ' Caractre = S / Table "11011100010" ' Caractre = T / Table "11011101110" ' Caractre = U / Table "11101011000" ' Caractre = V / Table "11101000110" ' Caractre = W / Table

/ B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B

Table = ! / = " / = # / = $ / = % / = & / = ' / = ( / = ) / = * / = + / = , / = - / = . / = / / = 0 / = 1 / = 2 / = 3 / = 4 / = 5 / = 6 / = 7 / = 8 / = 9 / = : / = ; / = < / = = / = > / = ? / = @ / = A / = B / = C / = D / = E / = F / = G / = H / = I / = J / = K / = L / = M / = N / = O / = P / = Q / = R / = S / = T / = U / = V / = W /

C = 00 Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C Table C

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

01 02 03 04 05 06 07 08 09 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

- 18 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Code

Case 88: MotifCodeBarres128 = "11100010110" ' Caractre = X / Table B = X / Table C = 56 Case 89: MotifCodeBarres128 = "11101101000" ' Caractre = Y / Table B = Y / Table C = 57 Case 90: MotifCodeBarres128 = "11101100010" ' Caractre = Z / Table B = Z / Table C = 58 Case 91: MotifCodeBarres128 = "11100011010" ' Caractre = [ / Table B = [ / Table C = 59 Case 92: MotifCodeBarres128 = "11101111010" ' Caractre = \ / Table B = \ / Table C = 60 Case 93: MotifCodeBarres128 = "11001000010" ' Caractre = ] / Table B = ] / Table C = 61 Case 94: MotifCodeBarres128 = "11110001010" ' Caractre = ^ / Table B = ^ / Table C = 62 Case 95: MotifCodeBarres128 = "10100110000" ' Caractre = _ / Table B = _ / Table C = 63 Case 96: MotifCodeBarres128 = "10100001100" ' Caractre = ` / Table B = ` / Table C = 64 Case 97: MotifCodeBarres128 = "10010110000" ' Caractre = a / Table B = a / Table C = 65 Case 98: MotifCodeBarres128 = "10010000110" ' Caractre = b / Table B = b / Table C = 66 Case 99: MotifCodeBarres128 = "10000101100" ' Caractre = c / Table B = c / Table C = 67 Case 100: MotifCodeBarres128 = "10000100110" ' Caractre = d / Table B = d / Table C = 68 Case 101: MotifCodeBarres128 = "10110010000" ' Caractre = e / Table B = e / Table C = 69 Case 102: MotifCodeBarres128 = "10110000100" ' Caractre = f / Table B = f / Table C = 70 Case 103: MotifCodeBarres128 = "10011010000" ' Caractre = g / Table B = g / Table C = 71 Case 104: MotifCodeBarres128 = "10011000010" ' Caractre = h / Table B = h / Table C = 72 Case 105: MotifCodeBarres128 = "10000110100" ' Caractre = i / Table B = i / Table C = 73 Case 106: MotifCodeBarres128 = "10000110010" ' Caractre = j / Table B = j / Table C = 74 Case 107: MotifCodeBarres128 = "11000010010" ' Caractre = k / Table B = k / Table C = 75 Case 108: MotifCodeBarres128 = "11001010000" ' Caractre = l / Table B = l / Table C = 76 Case 109: MotifCodeBarres128 = "11110111010" ' Caractre = m / Table B = m / Table C = 77 Case 110: MotifCodeBarres128 = "11000010100" ' Caractre = n / Table B = n / Table C = 78 Case 111: MotifCodeBarres128 = "10001111010" ' Caractre = o / Table B = o / Table C = 79 Case 112: MotifCodeBarres128 = "10100111100" ' Caractre = p / Table B = p / Table C = 80 Case 113: MotifCodeBarres128 = "10010111100" ' Caractre = q / Table B = q / Table C = 81 Case 114: MotifCodeBarres128 = "10010011110" ' Caractre = r / Table B = r / Table C = 82 Case 115: MotifCodeBarres128 = "10111100100" ' Caractre = s / Table B = s / Table C = 83 Case 116: MotifCodeBarres128 = "10011110100" ' Caractre = t / Table B = t / Table C = 84 Case 117: MotifCodeBarres128 = "10011110010" ' Caractre = u / Table B = u / Table C = 85 Case 118: MotifCodeBarres128 = "11110100100" ' Caractre = v / Table B = v / Table C = 86 Case 119: MotifCodeBarres128 = "11110010100" ' Caractre = w / Table B = w / Table C = 87 Case 120: MotifCodeBarres128 = "11110010010" ' Caractre = x / Table B = x / Table C = 88 Case 121: MotifCodeBarres128 = "11011011110" ' Caractre = y / Table B = y / Table C = 89 Case 122: MotifCodeBarres128 = "11011110110" ' Caractre = z / Table B = z / Table C = 90 Case 123: MotifCodeBarres128 = "11110110110" ' Caractre = { / Table B = { / Table C = 91 Case 124: MotifCodeBarres128 = "10101111000" ' Caractre = | / Table B = | / Table C = 92 Case 125: MotifCodeBarres128 = "10100011110" ' Caractre = } / Table B = } / Table C = 93 Case 126: MotifCodeBarres128 = "10001011110" ' Caractre = ~ / Table B = ~ / Table C = 94 Case 200: MotifCodeBarres128 = "10111101000" ' Caractre = - Table B = Del / Table C = 95 Case 201: MotifCodeBarres128 = "10111100010" ' Caractre = / Table B = Fnc 3 / Table C = 96 Case 202: MotifCodeBarres128 = "11110101000" ' Caractre = / Table B = Fnc 2 / Table C = 97 Case 203: MotifCodeBarres128 = "11110100010" ' Caractre = / Table B = Shift / Table C = 98 Case 204: MotifCodeBarres128 = "10111011110" ' Caractre = - Table B = Table C / Table C = 99 Case 205: MotifCodeBarres128 = "10111101110" ' Caractre = - Table B = Fnc 4 / Table C = Table B Case 206: MotifCodeBarres128 = "11101011110" ' Caractre = - Table B = Table A / Table C = Table A Case 207: MotifCodeBarres128 = "11110101110" ' Caractre = - Table B = Fnc 1 / Table C = Fnc 1 Case 208: MotifCodeBarres128 = "11010000100" ' Caractre = - Table B = Start A / Table C = Start A Case 209: MotifCodeBarres128 = "11010010000" ' Caractre = - Table B = Start B / Table C = Start B Case 210: MotifCodeBarres128 = "11010011100" ' Caractre = - Table B = Start C / Table C = Start C Case 211: MotifCodeBarres128 = "1100011101011" ' Caractre = - Table B = Stop / Table C = Stop Case Else: Err.Raise 514 End Select 'Sortie de la fonction Exit Function

GestionErreurs: 'Transmet l'erreur la procdure appelante Err.Raise Err.Number, "MotifCodeBarres128"

- 19 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Code Code

End Function

Public Function TracerMotifCodeBarres128(Ctrl As Control, rpt As Report) 'Dclaration des variables 'Chane complte des modules du code-barres Dim strCodeBarres As String 'Type d'un module : 1 = barre / 0 = espace Dim strTypeModule As String 'Variable de compteur Dim i As Long 'Largeur de la zone de texte Dim sngLargeurZoneTexte As Single 'Valeur de la marge gauche (pour centrage) en twips Dim sngMargeGauche As Single 'Coordonne (X1) du point de dpart des barres et des espaces Dim sngX1 As Single 'Coordonne (X2) du point de dpart des barres et des espaces Dim sngY1 As Single 'Coordonne (Y2) du point d'arrive des barres et des espaces Dim sngY2 As Single On Error GoTo GestionErreurs 'Assignation de la chane de caractres du code-barres la variable If Not IsNull(Ctrl) Then strCodeBarres = Ctrl Else Exit Function End If 'Initialisation des coordonnes X1, Y1, Y2 sngX1 = Ctrl.Left sngY1 = Ctrl.Top 'La hauteur des modules est dfinie par la hauteur de la zone de texte txtCodeBarres sngY2 = Ctrl.Height 'La hauteur des modules est calcule en fonction de la largeur du code-barres 'sngY2 = lngHauteurModule 'Calcul de la valeur de la marge appliquer gauche pour le centrage du code-barres sngLargeurZoneTexte = Ctrl.Width sngMargeGauche = Int((sngLargeurZoneTexte - (Len(strCodeBarres) * lngTailleModule)) / 2) 'Dcalage de la valeur de la coordonne X1 pour le centrage du code-barres sngX1 = sngX1 + sngMargeGauche 'Traage 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" 'Traage d'une barre rpt.Line (sngX1, sngY1)-Step(lngTailleModule, sngY2), CouleurBarre, BF sngX1 = sngX1 + lngTailleModule Case "0" 'Traage d'un espace rpt.Line (sngX1, sngY1)-Step(lngTailleModule, sngY2), CouleurEspace, BF sngX1 = sngX1 + lngTailleModule End Select Next i 'Sortie de la fonction Exit Function GestionErreurs:

- 20 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Code'Affichage d'un message MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _ & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !" End Function

V - ConclusionIl ne s'avre donc pas trs compliqu de crer des codes-barres sans avoir recours des composants externes, que ce soit une police de caractres ou un contrle ActiveX. Les nombreux tests effectus sur ces codes-barres conus uniquement en utilisant Visual Basic ont dmontr qu'ils sont parfaitement lisibles et soutiennent aisment la comparaison avec des codes-barres imprims au moyen de police de caractres spciales. Cette solution offre en outre l'avantage de pouvoir calculer trs prcisemment la largeur et la hauteur de chaque module si ncessaire.

VI - RemerciementsJe tiens remercier tous les membres de l'quipe Office pour leurs conseils aviss. Remerciements tout particuliers GAYOT pour ses nombreux tests de lecture des codes-barres, ainsi qu' xxx pour la relecture attentive de cet article.

VII - LiensWikipdia, code-barres 128 Code original de la cration de codes-barres 39 avec Visual Basic Code d'optimisation des codes-barres 128

VIII - TlchargementBase exemple (format Access 2000) (Miroir HTTP)

- 21 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

IX - Annexe - composition des tables du code 128

Valeur 0 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

Table A Espace ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N

Table B Espace ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N

Table C 00 01 02 03 04 05 06 07 08 09 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

ASCII 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078

Caractre Espace ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N

Motif 11011001100 11001101100 11001100110 10010011000 10010001100 10001001100 10011001000 10011000100 10001100100 11001001000 11001000100 11000100100 10110011100 10011011100 10011001110 10111001100 10011101100 10011100110 11001110010 11001011100 11001001110 11011100100 11001110100 11101101110 11101001100 11100101100 11100100110 11101100100 11100110100 11100110010 11011011000 11011000110 11000110110 10100011000 10001011000 10001000110 10110001000 10001101000 10001100010 11010001000 11000101000 11000100010 10110111000 10110001110 10001101110 10111011000 10111000110

- 22 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Valeur 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

Table A O P Q R S T U V W X Y Z [ \ ] ^ _ NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US Fnc 3 Fnc 2

Table B O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ Del Fnc 3 Fnc 2

Table C 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

ASCII 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0092 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0200 0201 0202

Caractre O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~

Motif 10001110110 11101110110 11010001110 11000101110 11011101000 11011100010 11011101110 11101011000 11101000110 11100010110 11101101000 11101100010 11100011010 11101111010 11001000010 11110001010 10100110000 10100001100 10010110000 10010000110 10000101100 10000100110 10110010000 10110000100 10011010000 10011000010 10000110100 10000110010 11000010010 11001010000 11110111010 11000010100 10001111010 10100111100 10010111100 10010011110 10111100100 10011110100 10011110010 11110100100 11110010100 11110010010 11011011110 11011110110 11110110110 10101111000 10100011110 10001011110 10111101000 10111100010 11110101000

- 23 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.

Access : crer des codes-barres avec Visual Basic par Dominique KIRCHHOFER (http://domi2.developpez.com/)

Valeur 98 99 100 101 102 103 104 105 106

Table A Shift Table C Table B Fnc 4 Fnc 1 Start A Start B Start C Stop

Table B Shift Table C Fnc 4 Table A Fnc 1 Start A Start B Start C Stop

Table C 98 99 Table B Table A Fnc 1 Start A Start B Start C Stop

ASCII 0203 0204 0205 0206 0207 0208 0209 0210 0211

Caractre

Motif 11110100010 10111011110 10111101110 11101011110 11110101110 11010000100 11010010000 11010011100 1100011101011

- 24 Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2010 - - Kirchhofer Dominique. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Droits de diffusion permanents accords developpez LLC.