XL 2016 Problème avec fonction ean13

ReneDav14000

XLDnaute Occasionnel
Bonjour à tous,
Suite aux explications qui m'ont été fourni dans une précédente discussion, j'essaie de comprendre pourquoi ce code ne fonctionne pas chez moi.
C'est un module nommé ean13
VB:
Public Function ean13$(chaine$)
  '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
    
     'Ajour séparateurcentral
      CodeBarre$ = CodeBarre$ & "*"
      For i% = 8 To 13
        CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
      Next
      'ajout dela marque de fin
      CodeBarre$ = CodeBarre$ & "+"
      ean13$ = CodeBarre$
    End If
  End If
End Function

Il fonctionne dans une ancienne application que j'essaie de moderniser, mais ça ne va pas dans le bon sens.
Voici le résultat sur ma feuille "Calcul" - #REF! dans les cellules B23 et L22
1664979292703.png
 

Discussions similaires

Réponses
4
Affichages
273

Statistiques des forums

Discussions
313 195
Messages
2 096 102
Membres
106 496
dernier inscrit
jeremy14