Le 20/09/2019 à 18:45, Franck Larrivé a écrit :
Bonjour,
cette page peux t'intéresser :
https://grandzebu.net/informatique/codbar/ean13.htm
Franck
Oui, je viens de regarder. C'est très bien.
J'ai installé la macro pour openoffice. Elle fonctionne aussi pour
libreoffice, enfin presque.
D'après ce que j'ai cru comprendre, cette macro analyse la référence
fournisseur. Si elle trouve 12 chiffres, elle calcule la clé de contrôle
(dernier chiffre à droite de la réf.) et affiche le code barre EAN13
dans la colonne suivante.
Si la macro trouve 13 chiffres, elle analyse les 13 chiffres pour
vérifier si la clé est bonne. Si la clé est bonne, elle affiche le code
barre EAN13.
Si elle trouve que la clé n'est pas bonne, l'affichage reste vide.
Or quand j'enlève le dernier caractère de droite sur la ref (clé de
contrôle), la macro calcule cette clé que je viens d'effacer et me
propose la clé de contrôle avec la même valeur, et donc, du coup, elle
m'affiche le code barre.
Et donc, pour moi, la clé de contrôle que j'enlève est bonne alors que
la macro la considère comme mauvaise.
Voici le code de la macro :
REM ***** BASIC *****
Public Function ean13$(chaine$)
'V 1.0
'Paramètres : une chaine de 12 chiffres
'Retour : * une chaine qui, affichée avec la police EAN13.TTF, donne
le code barre
' * une chaine vide si paramètre fourni incorrect
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
ean13$ = ""
'Vérifier qu'il y a 12 caractères
If Len(chaine$) = 12 Then
'Et que ce sont bien des chiffres
For i% = 1 To 12
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) >
57 Then
i% = 0
Exit For
End If
Next
If i% = 13 Then
'Calcul de la clé de contrôle
For i% = 2 To 12 Step 2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 1 To 11 Step 2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
'Le premier chiffre est pris tel quel, le deuxième vient de la
table A
CodeBarre$ = Left$(chaine$, 1) & Chr$(65 + Val(Mid$(chaine$, 2, 1)))
first% = Val(Left$(chaine$, 1))
For i% = 3 To 7
tableA = False
Select Case i%
Case 3
Select Case first%
Case 0 To 3
tableA = True
End Select
Case 4
Select Case first%
Case 0, 4, 7, 8
tableA = True
End Select
Case 5
Select Case first%
Case 0, 1, 4, 5, 9
tableA = True
End Select
Case 6
Select Case first%
Case 0, 2, 5, 6, 7
tableA = True
End Select
Case 7
Select Case first%
Case 0, 3, 6, 8, 9
tableA = True
End Select
End Select
If tableA Then
CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
Else
CodeBarre$ = CodeBarre$ & Chr$(75 + Val(Mid$(chaine$, i%, 1)))
End If
Next
CodeBarre$ = CodeBarre$ & "*" 'Ajout séparateur central
For i% = 8 To 13
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+" 'Ajout de la marque de fin
ean13$ = CodeBarre$
End If
End If
End Function
Merci bien.
--
Envoyez un mail à users+unsubscr...@fr.libreoffice.org pour vous désinscrire
Les archives de la liste sont disponibles à
https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy