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
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
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