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
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