Il 26/08/2019 13:41, Stefano ha scritto:
Ciao a tutti.
Scusate se riprendo il post, ma ho trovato una soluzione che ha
funzionato al primo colpo.
ho messo la funzione ean13 in un modulo.
ho quindi preso le prime 12 cifre del codice ean e ho applicato la
funzione: me.barcode = ean13 (me.ean12cifre) con font code ean13
la funzione mi ha calcolatola tredicesima cifra.
a qusto punto ho calcolato la 13ª cifra usanto la funzione Calcola13.
Tutto risolto.
Grazie a tutti.
Ciao.
Public Function Calcola13(TestEan As String)
If Not TestEan Like "############" Then 'controlla che siano 12 cifre
CalcolaEan13 = Null
Exit Function
End If
Dim i As Integer, Summ As Integer, Check As Integer
Summ = 0
'somma in posizione pari
For i = 2 To 12 Step 2
Summ = Summ + Val(Mid(TestEan, i, 1))
Next i
'moltiplica per 3 le cifre in posizione pari
Summ = Summ * 3
'somma in posizione dispari
For i = 1 To 11 Step 2
Summ = Summ + Val(Mid(TestEan, i, 1))
Next i
Summ = Summ Mod 10
Calcola13 = (10 - Summ) Mod 10
End Function
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