Re,
C'est bien Lone Wolf, un bon point, tu as eu peur de ta punition. Pire qu'un enfant, une fois, deux fois, la troisième tu prends peur
'-----
If Len(chaine$) = 12 Then
'Et que ce sont bien des chiffres
'And they are really digits
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
'-----
If chaine Like String(12, "#") Then
Parfois il faut savoir modérer ses propos cher Modeste, car là tu m'as vexé.
Option Explicit
Public Function CodeEan13$(chaine$)
Application.Volatile
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
CodeEan13$ = ""
chaine$ = Left(chaine$, Len(chaine$) - 1)
If Len(chaine$) = 12 Then
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
For i% = 12 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 11 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
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$ & "*"
For i% = 8 To 13
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+"
CodeEan13$ = CodeBarre$
End If
End If
End Function
chaine$ = Left(chaine$, Len(chaine$) - 1)
If Len(chaine$) = 12 Then
chaine$ = Left(chaine$, 12)
=CodeEAN13(Gauche.......
=CodeEAN13(P7)
../..
Next
CodeBarre$ = CodeBarre$ & "*"
For i% = 8 To 12
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
' CodeBarre$ = CodeBarre$ & "+" ' suppression garde latérale de fin
CodeEan13$ = CodeBarre$
End If
End Function
Re Modeste,
Regarde en N8 je n'ai pas inventé l'algorithme !!!!!!!!. Tu as mal regardé ou effacé la formule en rentrant directement ton 4.
Le résultat en N8 est bien 6 dans l'exemple que tu donnes.
3 2 2 8 0 2 4 1 3 0 1 4 6
3CCSKME*bdabeg+
Ouvre tes placards et teste pleins de codes, tu verras que ca fonctionne.
PS : j'écris pas en rouge lorsque j'écris à quelqu'un car ce n'est pas poli. Enfin du moins c'est ce que l'on m'a inculqué.....
l'affichage du code se fait à partir des 12 premiers chiffres, inutile d'en saisir 13 !!le treizième chiffre est un calcul de type modulo avec factorisation, et dans ce code le calcul de ce chiffre se fait automatiquement. Or je ne veux pas que le calcul se fasse car dans mon fichier de base le calcul est lié à d'autre cellules. Je cherche juste à "obtenir" l'affichage du code avec les treize chiffres en A1.
J'espère avoir été assez clair.