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
 

vgendron

XLDnaute Barbatruc
Bonjour

une image de ton fichier excel n'apporte rien; on ne peut rien vérifier..
un peu comme si la boulangère te donnait une photo de la baguette que tu aimerais avoir..

dans le code de la fonction:
1) ca vérifie qu'il y a 12 caractères==> ok
2) une boucle vérifie que chaque caractère est un chiffre...
ca me parait bizarre: il suffirait de vérifier que les 12 caractères constituent un nombre...
if isnumeric(chaine) then
'calcul des checksum
 

vgendron

XLDnaute Barbatruc
peut etre que EAN13 c'est une cellule de ta feuille... un peu comme A1.. (c'est pas vraiment une interrogation)
du coup =ean13(B22) ==> il ne sait pas de quoi tu parles..
renommes ta fonction f_EAN13
et ca ira mieux..

bon.. je dis ca avec ma version Excel 2010 qui ne connait pas la fonction native EAN13()
avec ta version.. qui connait cette fonction native. je ne sais pas ce que ca implique de définir une fonction personalisée avec le meme nom qu'une fonction native..

tous les $ qui trainent partout en fin de nom de variable et de la dite fonction: ils servent à quoi?
 

ReneDav14000

XLDnaute Occasionnel
peut etre que EAN13 c'est une cellule de ta feuille... un peu comme A1.. (c'est pas vraiment une interrogation)
du coup =ean13(B22) ==> il ne sait pas de quoi tu parles..
renommes ta fonction f_EAN13
et ca ira mieux..

bon.. je dis ca avec ma version Excel 2010 qui ne connait pas la fonction native EAN13()
avec ta version.. qui connait cette fonction native. je ne sais pas ce que ca implique de définir une fonction personalisée avec le meme nom qu'une fonction native..

tous les $ qui trainent partout en fin de nom de variable et de la dite fonction: ils servent à quoi?
Eh bien j'ai trouvé un modèle de ce code et je me suis posé la même question. Toutefois, je n'ai pas osé les supprimer. Si ça ne sert à rien, je vais nettoyer le code.
Sinon merci pour ta suggestion; je vais renommer ma fonction et voire ce que cela donne.
Je reviens te dire ce qu'il en est.
 

vgendron

XLDnaute Barbatruc
j'imagine que tu as également changé l'intérieur de la fonction aux deux endroits où un résultat est mis dans le nom de la fonction

sinon, dans ta feuille BDD: je ne vois aucune donnée, ni aucune formule.. donc. forcément.. il n'y a rien
dans ta feuille calcul: la fonction retourne bien un résultat:
3CFKNTA*bcdcff+
 

patricktoulon

XLDnaute Barbatruc
re
moi je vois déjà un soucis de conception dans la logique même de la first boucle
VB:
'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
comment est il possible que le chiffre 13 soit atteint
LOL
 

ReneDav14000

XLDnaute Occasionnel
j'imagine que tu as également changé l'intérieur de la fonction aux deux endroits où un résultat est mis dans le nom de la fonction

sinon, dans ta feuille BDD: je ne vois aucune donnée, ni aucune formule.. donc. forcément.. il n'y a rien
dans ta feuille calcul: la fonction retourne bien un résultat:
3CFKNTA*bcdcff+
Oui j'ai tout modifié. J'ai fermé le classeur et je l'ai ouvert à nouveau et maintenant il me met #NOM ? dans les cellules. Il n'y a pourtant pas de nom dans mon classeur j'ai bien vérifié.
 

Discussions similaires

Réponses
4
Affichages
279

Statistiques des forums

Discussions
313 317
Messages
2 097 119
Membres
106 844
dernier inscrit
mikael.barbeau