EAN13 probleme VBA

Bonsoir

je rencontre un problème avec l'ean13

j'ai un fichier excel dans lequel il y a le code vba que je recopie dans un module sur une nouvelle feuille (en vrai sera copié sur mon vrai fichier)

si je fais tout pareil j'ai un #ref et là je ne comprend pas pourquoi.

j'ai essayé en mettant (')devant les 12 chiffres ou faire fonction gauche pour avoir les 12 dans tous les cas j'ai #ref. alors que dans le fichier source je peux refaire sur des lignes en dessous

si quelqu'un voit d'où vient le problème. je remarque juste sur la capture d’écran que la formule est en majuscule d'un coté et minuscule de l'autre, cela peut il venir de là, sachant que même si je change, elle se remet en maj.

les 2 fichiers au as où

merci bien

sans titre
122classeur1.xlsm (14.41 Ko)
195essai-code-ean13.xls (28.50 Ko)

Bonjour,

Le fichier essai-code-ean13.xls fonctionne, car c'est un ancien format de fichier et il n'y a pas de colonne EAN.

Le fichier Classeur1.xlsm ne fonctionne pas, car c'est un format de fichier plus récent et il contient une colonne EAN > donc EAN13 fait référence à une cellule et non pas à la fonction.

Ce qu'il faut faire est de renommer la fonction et les deux occurrences du nom dans la fonction.

Si l'on remplace EAN13$ par disons EEEAN13$ > tant dans le nom de la fonction, dans la fonction et dans la cellule C2 de la feuille > ça fonctionne cette fonction

Cherche les 3 endroits ou j'ai inscrit  ' << modif

Public Function EEEAN13$(chaine$)    ' << modif
  '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
  EEEAN13$ = ""    ' << modif
  '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
      EEEAN13$ = CodeBarre$     ' << modif
    End If
  End If
End Function

ric

bonjour

super ça marche, j'aurais du me douter car j'avais essayer de modifier le nom en minuscule ou majuscule et ces 3 occurrences changeaient en même temps.

Merci

Bonjour,

J'ai cherché longtemps ... jusqu'au moment où ... après avoir sélectionné la cellule C2 ... j'ai cliqué sur le menu "Formule" puis "Repérer les antécédents" > là, en suivant la ligne bleue ... j'ai eu la révélation ...

Bien heureux que ça fonctionne et que l'on ait appris à se méfier des interférences avec les adresses de cellules.

ric

Rechercher des sujets similaires à "ean13 probleme vba"