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

Répondre à