OVH Cloud OVH Cloud

code barre !!!!

8 réponses
Avatar
Jérémy
Bonjour,

dans une base de donn=E9es Access 2000, j'aimerais cr=E9er un=20
module de facturation qui cr=E9e les codes barres avec la=20
possibilit=E9 de les imprimer (norme 13 ou LEAN).

Je ne sais pas par o=F9 commencer...

Merci d'avance.
J=E9r=E9my.

8 réponses

Avatar
Jessy SEMPERE
Bonjour

ceci pourra te mettre sur la piste mais attention, il y a pas mal
d'arrengement à faire :
**********************************************************
Function CreateCodeBarre(pCodeBar As String, Col As Long, _
Lig As Long, Optional Hauteur As Long = 25 * 56.7, _
Optional largeur As Long = 30 * 56.7, Optional HautDec As Long = 2 * 56.7)

Dim rptCodeBarre As Report
Dim strReport As String
DoCmd.Echo False
Set rptCodeBarre = CreateReport
strReport = rptCodeBarre.Name

Dim TJA(10) As String
Dim TJB(10) As String
Dim TJC(10) As String
Dim Tcontrol(10) As String
Dim CodeBar As String
Dim Chiffre As Long
Dim Ind As Long
Dim Inverseur As String ' Pour inversion suivant le type de code
Dim CodeChiffre As String ' Profil binaire des traits
Dim CarControl As Long ' Caractère de contrôle
Dim Lettre As String '
Dim TypeCode As Long ' Premier caractère du code barre
Dim Epaisseur1Trait As Double ' Epaisseur d'un trait en mm

CodeBar = pCodeBar

TJA(1) = "0001101"
TJA(2) = "0011001"
TJA(3) = "0010011"
TJA(4) = "0111101"
TJA(5) = "0100011"
TJA(6) = "0110001"
TJA(7) = "0101111"
TJA(8) = "0111011"
TJA(9) = "0110111"
TJA(10) = "0001011"

TJB(1) = "0100111"
TJB(2) = "0110011"
TJB(3) = "0011011"
TJB(4) = "0100001"
TJB(5) = "0011101"
TJB(6) = "0111001"
TJB(7) = "0000101"
TJB(8) = "0010001"
TJB(9) = "0001001"
TJB(10) = "0010111"

TJC(1) = "1110010"
TJC(2) = "1100110"
TJC(3) = "1101100"
TJC(4) = "1000010"
TJC(5) = "1011100"
TJC(6) = "1001110"
TJC(7) = "1010000"
TJC(8) = "1000100"
TJC(9) = "1001000"
TJC(10) = "1110100"

Tcontrol(1) = "AAAAAA"
Tcontrol(2) = "AABABB"
Tcontrol(3) = "AABBAB"
Tcontrol(4) = "AABBBA"
Tcontrol(5) = "ABAABB"
Tcontrol(6) = "ABBAAB"
Tcontrol(7) = "ABBBAA"
Tcontrol(8) = "ABABAB"
Tcontrol(9) = "ABABBA"
Tcontrol(10) = "ABBABA"

' Extrait le premier caractère: type de code, non imprimé sous forme de
barre
TypeCode = Mid(CodeBar, 1, 1)
Inverseur = Tcontrol(TypeCode + 1) ' Inversera certains profils
CodeBar = Mid(CodeBar, 2, 11) ' Il reste 11 caractères

'=== Calcul du caractère de contrôle.
CarControl = TypeCode
For Ind = 1 To 11
If Ind Mod 2 <> 0 Then
CarControl = CarControl + Mid(CodeBar, Ind, 1) * 3 ' Controle*3
Else
CarControl = CarControl + Mid(CodeBar, Ind, 1)
End If
Next Ind
CarControl = ((Int((CarControl - 1) / 10) + 1) * 10) - CarControl

CodeBar = CodeBar + CStr(CarControl) ' CodeBar fait 12 caractères

'//== Creation du mask représentant le code barre (série de 1, de 0, de + et
de -)
'//== "0" = une bande blanche
'//== "1" = une bande noire
'//== "-" = décrementer la hauteur de la barre de <HautDec>
'//== "+" = Incrementer la hauteur de la barre de <HautDec>

CodeChiffre = "101-"

For Ind = 1 To 6
Chiffre = Mid(Trim(CodeBar), Ind, 1)
If Mid(Inverseur, Ind, 1) = "A" Then
CodeChiffre = CodeChiffre & (TJA(Chiffre + 1))
Else
CodeChiffre = CodeChiffre + (TJB(Chiffre + 1))
End If
Next Ind

CodeChiffre = CodeChiffre + "+01010-"

For Ind = 7 To 12
Chiffre = Mid(CodeBar, Ind, 1)
CodeChiffre = CodeChiffre + TJC(Chiffre + 1)
Next Ind

CodeChiffre = CodeChiffre + "+101"

'==== Création du mask sous forme de code barre
Dim NumCar As Long, NbTrait As Long
Dim j As Long, nLen As Long
Dim x As Double

nLen = Len(CodeChiffre)
Epaisseur1Trait = largeur / nLen
x = Col + Epaisseur1Trait * 7

NumCar = 1
Do While NumCar <= nLen
Select Case Mid(CodeChiffre, NumCar, 1)
Case "-" ' Indicateur de diminution de hauteur de barre...
Hauteur = Hauteur - HautDec
NumCar = NumCar + 1
Case "+" ' Indicateur d'augmentation de hauteur de barre...
Hauteur = Hauteur + HautDec
NumCar = NumCar + 1
Case "0" ' Espace
x = x + Epaisseur1Trait
NumCar = NumCar + 1
Case "1" ' Barre
NbTrait = 0
Do While Mid(CodeChiffre, NumCar, 1) = "1"
NbTrait = NbTrait + 1
NumCar = NumCar + 1
Loop
With CreateReportControl(rptCodeBarre.Name, _
acRectangle, acDetail, , , x, Lig, _
(NbTrait * Epaisseur1Trait), Lig + Hauteur)
.BackColor = 0
End With
x = x + (NbTrait * Epaisseur1Trait)
End Select
Loop

'==== Création du code serie en dessous du code barre
With CreateReportControl(rptCodeBarre.Name, acLabel, acDetail, , , Col, Lig
+ Hauteur - HautDec, 180, 225)
.FontName = "Arial"
.FontSize = Int(11.5 * (Epaisseur1Trait / 56.7) / 0.353)
.Caption = CStr(TypeCode)
End With
With CreateReportControl(rptCodeBarre.Name, acLabel, acDetail, , , Col + 10
* Epaisseur1Trait, Lig + Hauteur - HautDec, 710, 225)
.FontName = "Arial"
.FontSize = Int(11.5 * (Epaisseur1Trait / 56.7) / 0.353)
.TextAlign = 2
.Caption = Mid(CodeBar, 1, 6)
End With
With CreateReportControl(rptCodeBarre.Name, acLabel, acDetail, , , Col + 56
* Epaisseur1Trait, Lig + Hauteur - HautDec, 710, 225)
.FontName = "Arial"
.FontSize = Int(11.5 * (Epaisseur1Trait / 56.7) / 0.353)
.TextAlign = 2
.Caption = Mid(CodeBar, 7, 6)
End With

DoCmd.Close acReport, strReport, acSaveYes
DoCmd.OpenReport strReport, acViewPreview
DoCmd.Echo True

End Function
**********************************************************
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jérémy" a écrit dans le message news:
080b01c381da$46734940$
Bonjour,

dans une base de données Access 2000, j'aimerais créer un
module de facturation qui crée les codes barres avec la
possibilité de les imprimer (norme 13 ou LEAN).

Je ne sais pas par où commencer...

Merci d'avance.
Jérémy.
Avatar
Raymond
Bonsoir Jessy.

Il existe aussi les polices carolina (payantes) mais qui ne nécessitent
aucun code vb et en plus visualisent le cab à l"écran.

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Jessy SEMPERE" a écrit dans le message de
news:bkpkdm$s34$
Bonjour


Avatar
Jérémy
Ton code a l'air bien evolué, mais quels changements sont
à envisager???

L'exécution de la fonction telle quelle ne fonctionne
pas, est-ce normal??

Merci pour l'approndissement.
Jérémy
Avatar
Jessy SEMPERE
Bonjour

Si si le code fonctionne mais il ne te permet pas par exemple d'avoir
une liste de code tirer d'une table et de faire un état affichant cette
liste
avec pour chaque code la visualisation du code barre...
Enfin si c'est possible mais si tu dois afficher plusieurs pages, ça ne
marchera
pas...

Bon explication pour lancer la fonction :

Public Function CreateCodeBarre(pCodeBar As String, Col As Long, _
Lig As Long, Optional Hauteur As Long = 25 * 56.7, _
Optional largeur As Long = 30 * 56.7, Optional HautDec As Long = 2 *
56.7)

pCodeBar : correspond au code chiffré, mais attention, il doit correspondre
au
12 premier chiffres, le 13ème est générer automatiquement par le code
Col : correspond à la position à horizontale du code barre sur l'état,
attention cette
mesure est exprimée en twips (il faut mettre 567 pour 1 cm)
Lig : correspond à la position verticale du code sur l'état
Hauteur : correspond à la hauteur global du code barre (le mieux est de
laisser la
valeur par défaut qui est 25 minimètres)
Largeur : correspond à la largeur global du code barre (le mieux est de
laisser la
valeur par défaut qui est 30 minimètres)
HautDec : correspond à la différence de hauteur entre les grandes barres et
les
plus petites barres pour pouvoir écrire les chiffres (le mieux est de
laisser la valeur
par défaut à savoir 2 minimètres)

Voilà donc pour lancer cette fonction, il suffit de lancer par exemple :
Function Demo()
CreateCodeBarre "784302548694", 1134, 567
End Function

Alors ça fonctionne ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
Avatar
Jérémy
Oui!!! ça a l'air de marcher, j'ai bien mon état access
qui s'ouvre avec le code- barre.

Mais d'après vous, il n'est pas possible d'en afficher
plusieurs par page (par état)???

Et puis, petite précision, de quelle norme de code-barre
s'agit-il : EAN, 9-13?

Enfin, est-ce normal que les chiffres soient cachés par
les barres (et ne soient pas juste en dessous)?

Merci pour les précisions, votre soutien me réconforte.
JEREMY
Avatar
Jessy SEMPERE
Re,

Mais d'après vous, il n'est pas possible d'en afficher
plusieurs par page (par état)???


Le problème c'est que ce code dessine le code barre sur l'état,
tu peux regarder en mode modification...
Donc je ne sais pas comment faire pour en avoir plusieurs en fonction
par exemple d'enregistrement d'une table...

Et puis, petite précision, de quelle norme de code-barre
s'agit-il : EAN, 9-13?


C'est la norme EAN 13

Enfin, est-ce normal que les chiffres soient cachés par
les barres (et ne soient pas juste en dessous)?


Ben non, en fait il y avait une erreur... désolé

Remplaces lignes :
With CreateReportControl(rptCodeBarre.Name, _
acRectangle, acDetail, , , x, Lig, _
(NbTrait * Epaisseur1Trait), Lig + Hauteur)
.BackColor = 0
End With

par :
With CreateReportControl(rptCodeBarre.Name, _
acRectangle, acDetail, , , x, Lig, _
(NbTrait * Epaisseur1Trait), Hauteur)
.BackColor = 0
End With


@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

Avatar
Jérémy
C'est trop fort avec le changement. J'ai bien le n° juste
en dessous du code-barre.

Me reste plus qu'à voir pour dessiner plusieurs codes sur
une même page (étiquettes) basé sur un champ de table!

Par contre, pour pouvoir faire des modifications,
pourriez-vous juste me dire à quoi correspondent :

TJA(1)="0001101"
| | | | |
| | | | |
TJC(10)="1110100"
| | | | |
| | | | |
Tcontrol(1)="AAAAAA"

c'est un élément important à comprendre...

Et puis, peut-être est-ce abusé, j'aimerais inclure un
libellé de code-barre (arcile ou nom) en paramètre et
l'afficher au dessus, est-ce possible???

Merci encore 1000 fois, je ne sais comment vous remercier.
JEREMY
Avatar
Jessy SEMPERE
Re,

Me reste plus qu'à voir pour dessiner plusieurs codes sur
une même page (étiquettes) basé sur un champ de table!


Ca ne va pas être de tout repos mais en tous cas bon courage... ;-)

Par contre, pour pouvoir faire des modifications,
pourriez-vous juste me dire à quoi correspondent :
TJA(1)="0001101"
TJC(10)="1110100"
Tcontrol(1)="AAAAAA"
c'est un élément important à comprendre...


Malheureusement, le code que je t'ai donné correspond à
l'adaptation du code C en VBA et je ne suis pas l'auteur
de la synthaxe sous C donc...

Et puis, peut-être est-ce abusé, j'aimerais inclure un
libellé de code-barre (arcile ou nom) en paramètre et
l'afficher au dessus, est-ce possible???


Oui, tout est possible sous Access mais là pour le moment
je n'ai pas la solution, mais bon peut-être un jour...

Merci encore 1000 fois, je ne sais comment vous remercier.
JEREMY


Ta courtoisie est largement suffisante et fait très plaisir, le but de
ce forum et de s'entraider dans la plus grande gratuitée et la
bonne humeur possible donc...
Par contre si tu apporte des évolutions nous serons tous aux anges
d'en être informé... ;-))))
Voilà bon code et bon courage.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------