Je répond à mon message pour ceux que ça interresse.
Le code ean 13 est sur 12 caractère, et le 13ième se calcule.
Il faut donc appeler la CodeBarreEan13 avec les paramètres suivants pour impression
Public Sub CodeBarreEan13(pCodeBar As String, Col As Long, Lig As Long, Optional Hauteur As Long 25, Optional largeur As Long 30, Optional HautDec As Long = 2)
'// pCodeBar=code 12 chiffres à imprimer, sans code de contrôle
'// Col,Lig=Position d'impression en mm
'// Hauteur=Hauteur du code barre
'// Largeur=Largeur du code barre
'// HauteurDec=Hauteur supplémentaires des traits de séparation
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
' initialisation du jeu de caractères pour code barre EAN-13
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 = Val(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 + Val(Mid(CodeBar, Ind, 1)) * 3 ' Controle*3
Else
CarControl = CarControl + Val(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>
'============== GUARD PATTERN
CodeChiffre = "101-"
'============== ODD PARITY
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
'============== MIDDLE GUARD PATTERN
CodeChiffre = CodeChiffre + "+01010-"
'============== EVEN PARITY
For Ind = 7 To 12
Chiffre = Val(Mid(CodeBar, Ind, 1))
CodeChiffre = CodeChiffre + TJC(Chiffre + 1)
Next Ind
'============== GUARD PATTERN
CodeChiffre = CodeChiffre + "+101"
'==== Impression du mask sous forme de code barre
Epaisseur1Trait = ImpCodeBarre(Lig, Col, Hauteur, largeur, HautDec, CodeChiffre, True)
'==== Impression du code serie en dessous du code barre
' Crée une police de taille proportionnelle à la largeur de code barre
'icreepolice 1, partieEntiere(11.5 * Epaisseur1Trait / 0.353), iNormal, iSwiss
'iPolice (1)
Printer.FontName = "Arial"
Printer.FontSize = Int(11.5 * Epaisseur1Trait / 0.353)
Printer.CurrentX = Col
Printer.CurrentY = (Lig + Hauteur - HautDec)
Printer.Print (CStr(TypeCode))
'Debug.Print "ScaleMode = " & Printer.ScaleMode
Printer.CurrentX = (Col + 10 * Epaisseur1Trait)
Printer.CurrentY = (Lig + Hauteur - HautDec)
Printer.Print (Mid(CodeBar, 1, 6))
Printer.CurrentX = (Col + 56 * Epaisseur1Trait)
Printer.CurrentY = (Lig + Hauteur - HautDec)
Printer.Print (Mid(CodeBar, 7, 6))
'
End Sub
Public Function ImpCodeBarre(Lig As Long, Col As Long, nHauteur As Long, nLargeur As Long, nHautDec As Long, szCodeBarre As String, Decalage As Boolean)
'// Impression des traits
'
'// Col,Lig=Position d'impression en mm
'// nHauteur=Hauteur du code barre
'// nLargeur=Largeur du code barre
'// nHautDec=Hauteur supplémentaires des traits de séparation
'// szCodeBarre=profil binaire sous forme de "0" et "1" à imprimer
'// Decalage=vrai si décalage de la largeur d'un chiffre pour afficher ce chiffre en bas à gauche
Dim NumCar As Long
Dim NbTrait As Long
Dim Epaisseur1Trait As Double ' Epaisseur d'un trait en mm
Dim j As Long
Dim x As Double
Dim nLen As Long
nLen = Len(szCodeBarre) ' Nombre de caractères à analyser
' Calcul de l'épaisseur d'un trait suivant la largeur demandée et le nombre de traits
' On comptabilise les caractères "+" et "-" même s'ils ne sont pas imprimés (négligeable)
Epaisseur1Trait = nLargeur / nLen ' En mm
If Decalage Then
x = Col + Epaisseur1Trait * 7 ' Décalage vers la gauche pour le chiffre affiché dessous
Else
x = Col
End If
NumCar = 1
Do While NumCar <= nLen
Select Case Mid(szCodeBarre, NumCar, 1)
Case "-" ' Indicateur de diminution de hauteur de barre...
nHauteur = nHauteur - nHautDec
NumCar = NumCar + 1
Case "+" ' Indicateur d'augmentation de hauteur de barre...
nHauteur = nHauteur + nHautDec
NumCar = NumCar + 1
Case "0" ' Espace
x = x + Epaisseur1Trait
NumCar = NumCar + 1
Case "1" ' Barre
'Essai de regrouper tous les '1' si [[i]] est un '1'
NbTrait = 0
Do While Mid(szCodeBarre, NumCar, 1) = "1"
NbTrait = NbTrait + 1
NumCar = NumCar + 1
Loop
'iposh (x)
' Trace un trait avc une épaisseur en points Pica
'Printer.DrawWidth = (NbTrait * Epaisseur1Trait)
Printer.DrawWidth = 1
Printer.Line (x, Lig)-(x + (NbTrait * Epaisseur1Trait), Lig + nHauteur), , BF
'itraitv Lig, Lig + nHauteur, NbTrait * Epaisseur1Trait / 0.353
x = x + (NbTrait * Epaisseur1Trait)
End Select
Loop
'renvoyer
ImpCodeBarre = Epaisseur1Trait
End Function