Et pour ceux que ça interesse voici l'algo tiré de BD Gest' (ATTENTION, voici les toutes premières lignes de codes de BD Gest' que je diffuse, c'est de l'EO ça !!!
) :
[code:1:05899a60ec]Function ISBN_Affiche(ISBN As String) As String
Dim str As String
Dim i As Long
Dim CodeEditeur As String, CodeZone As String, CodeAlbum As String
Dim debEditeur As Long
On Error GoTo erreur
i = 1
str = ""
While i <= Len(ISBN)
If IsNumeric(Mid(ISBN, i, 1)) Or (Mid(ISBN, i, 1) = "X" And i = Len(ISBN)) Then
str = str & Mid(ISBN, i, 1)
End If
i = i + 1
Wend
If Len(str) <> 10 Then GoTo erreur
If CLng(Mid(str, 1, 1)) >= 0 And CLng(Mid(str, 1, 1)) <= 7 Then
CodeZone = Mid(str, 1, 1)
ElseIf CLng(Mid(str, 1, 2)) >= 8 And CLng(Mid(str, 1, 2)) <= 94 Then
CodeZone = Mid(str, 1, 2)
ElseIf CLng(Mid(str, 1, 3)) >= 95 And CLng(Mid(str, 1, 3)) <= 995 Then
CodeZone = Mid(str, 1, 3)
ElseIf CLng(Mid(str, 1, 4)) >= 996 And CLng(Mid(str, 1, 4)) <= 9989 Then
CodeZone = Mid(str, 1, 4)
Else
CodeZone = Mid(str, 1, 5)
End If
debEditeur = Len(CodeZone) + 1
If CLng(Mid(str, debEditeur, 2)) >= 0 And CLng(Mid(str, debEditeur, 2)) <= 19 Then
CodeEditeur = Mid(str, debEditeur, 2)
ElseIf CLng(Mid(str, debEditeur, 3)) >= 20 And CLng(Mid(str, debEditeur, 3)) <= 699 Then
CodeEditeur = Mid(str, debEditeur, 3)
ElseIf CLng(Mid(str, debEditeur, 4)) >= 700 And CLng(Mid(str, debEditeur, 4)) <= 8399 Then
CodeEditeur = Mid(str, debEditeur, 4)
ElseIf CLng(Mid(str, debEditeur, 5)) >= 8400 And CLng(Mid(str, debEditeur, 5)) <= 89999 Then
CodeEditeur = Mid(str, debEditeur, 5)
ElseIf CLng(Mid(str, debEditeur, 6)) >= 90000 And CLng(Mid(str, debEditeur, 6)) <= 949999 Then
CodeEditeur = Mid(str, debEditeur, 6)
ElseIf CLng(Mid(str, debEditeur, 7)) >= 950000 And CLng(Mid(str, debEditeur, 7)) <= 9999999 Then
CodeEditeur = Mid(str, debEditeur, 7)
Else
GoTo erreur
End If
CodeAlbum = Mid(str, Len(CodeZone) + Len(CodeEditeur) + 1, 9 - Len(CodeZone) - Len(CodeEditeur))
ISBN_Affiche = CodeZone & "-" & CodeEditeur & "-" & CodeAlbum & "-" & Mid(str, 10, 1)
GoTo fin
erreur:
ISBN_Affiche = ISBN
fin:
End Function[/code:1:05899a60ec]
Et l'algo pour tester si l'ISBN est valide :
[code:1:05899a60ec]Function ISBN_Valide(ISBN As String) As Boolean
Dim str As String
Dim i As Long
Dim tot As Double
On Error GoTo erreur
i = 1
str = ""
While i <= Len(ISBN)
If IsNumeric(Mid(ISBN, i, 1)) Or (Mid(ISBN, i, 1) = "X" And i = Len(ISBN)) Then
str = str & Mid(ISBN, i, 1)
End If
i = i + 1
Wend
If Len(str) <> 10 Then GoTo erreur
For i = 1 To 10
If i = 10 And Mid(str, i, 1) = "X" Then
tot = tot + 10
Else
tot = tot + (11 - i) * CDbl(Mid(str, i, 1))
End If
Next i
If tot Mod 11 = 0 Then
ISBN_Valide = True
Else
ISBN_Valide = False
End If
GoTo fin
erreur:
ISBN_Valide = False
fin:
End Function [/code:1:05899a60ec]