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