Un VBA à modifier....

eddy1975

XLDnaute Occasionnel
Bonjour le Forum,

Je souhaite modifier le code VBA du fichier joint.
L'idée est que l'affichage du code barre se fasse dès lors que treize chiffres sont inscrits en A1.
Merci pour votre aide.
 

Pièces jointes

  • Fichier TEST(1).xlsm
    21.9 KB · Affichages: 73
  • Fichier TEST(1).xlsm
    21.9 KB · Affichages: 67

job75

XLDnaute Barbatruc
Re : Un VBA à modifier....

Re,

Notez que :

Code:
'-----
  If Len(chaine$) = 12 Then
    'Et que ce sont bien des chiffres
    'And they are really digits
    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
est assez maladroit alors qu'il suffit d'écrire :

Code:
'-----
  If chaine Like String(12, "#") Then
Fichier (2) joint.

A+
 

Pièces jointes

  • Fichier TEST(2).xlsm
    22.9 KB · Affichages: 30
  • Fichier TEST(2).xlsm
    22.9 KB · Affichages: 29

eddy1975

XLDnaute Occasionnel
Re : Un VBA à modifier....

Re Job,

Je vois que tu continues à chercher. Merci à toi. J'ai trouvé une solution mais qui fait doublon de calcul de la clé de contrôle vu que le code n'est pas modifié.

En A1 si tu rentres 12 chiffres ca te donne le code barre en B2 à treize chiffres car le calcul de la clé est automatique grâce au code VBA.

Du coup, j'ai mis formule du calcul de la clé de contrôle en feuille 2 pour mieux comprendre et donc l'idée est de supprimer dans le code VBA le calcul de la clé ou checknum pour éviter le doublon. Peut-être que cette fois ci tu comprendras ;)
 

Pièces jointes

  • Fichier TEST(2).xlsm
    18.7 KB · Affichages: 32
  • Fichier TEST(2).xlsm
    18.7 KB · Affichages: 31

Modeste geedee

XLDnaute Barbatruc
Re : Un VBA à modifier....

Bonsour®
Regarde la pièce jointe 963837
Parfois il faut savoir modérer ses propos cher Modeste, car là tu m'as vexé.
:confused:
Toutes mes confuses ...
Quant à la modération de mon propos et au-delà de tout prosélytisme, Capturea.JPG
je ne saurai interpréter un code EAN13 (ou GENCODE en distribution) dont la clé serait erronée ... ???
:(
Capture.jpg
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    32.7 KB · Affichages: 22
  • CaptureC.JPG
    CaptureC.JPG
    13.6 KB · Affichages: 19
  • Capturea.JPG
    Capturea.JPG
    20.3 KB · Affichages: 15
Dernière édition:

eddy1975

XLDnaute Occasionnel
Re : Un VBA à modifier....

Re le forum,

Je fais un nouveau post avec un fichier peut être plus clair a comprendre.

Merci.

Code:
Option Explicit

Public Function CodeEan13$(chaine$)
Application.Volatile

  Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
  CodeEan13$ = ""
  
  chaine$ = Left(chaine$, Len(chaine$) - 1)
  If Len(chaine$) = 12 Then
    
    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
      
      For i% = 12 To 1 Step -2
        checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
      Next
      checksum% = checksum% * 3
      For i% = 11 To 1 Step -2
        checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
      Next
      chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
      
      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$ & "*"
      For i% = 8 To 13
        CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
      Next
      CodeBarre$ = CodeBarre$ & "+"
      CodeEan13$ = CodeBarre$
    End If
  End If
End Function
 

Pièces jointes

  • Fichier TEST(2).xlsm
    18.7 KB · Affichages: 19
  • Fichier TEST(2).xlsm
    18.7 KB · Affichages: 16

Modeste geedee

XLDnaute Barbatruc
Re : Un VBA à modifier....

Bonsour®

;) :confused: :mad:
c'est sûr que si la chaine en entrée ne fait que 12 caractères et en retirer un, alors la fonction ne marche plus !!!

chaine$ = Left(chaine$, Len(chaine$) - 1)
If Len(chaine$) = 12 Then

si tu ne veux pas tenir compte du 13eme caractère éventuel, pourquoi pas simplement :

chaine$ = Left(chaine$, 12)

c'est ce que faisaient les propositions précédentes :
=CodeEan13(GAUCHE(G7;12))

:confused:
 
Dernière édition:

eddy1975

XLDnaute Occasionnel
Re : Un VBA à modifier....

Re Modeste,

Jai bien compris ce que tu veux dire pour la formule

Code:
=CodeEAN13(Gauche.......

N'y a-t-il pas une solution pour supprimer le cheksum dans le code et faire en sorte que je rentre la formule et je j'obtienne mon code barre. Le but est de vérifier le code barre et non de le créer. C'est pour cela que j'ai la formule du calcul du cheksum en P5.
Merci Modeste.

Code:
=CodeEAN13(P7)
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Un VBA à modifier....

Bonsour®
comme déjà dit le checksum fait partie intégrante du code-barre !!!
de plus :
- les codes EAN contiennent des éléments de zones de garde, permettant de « calibrer » les lecteurs de code-barres, à savoir deux zones de garde normales (généralement latérales) et une zone de garde centrale.
- le codage EAN permet de lire le code quel que soit le sens de lecture

l'absence de l'un de ces éléments provoquera la non-reconnaissance du code-barre !! :(

pour répondre à ton désir : ???
Capture.JPG
../..
Next
CodeBarre$ = CodeBarre$ & "*"
For i% = 8 To 12
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
' CodeBarre$ = CodeBarre$ & "+" ' suppression garde latérale de fin
CodeEan13$ = CodeBarre$
End If
End Function
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    31.7 KB · Affichages: 21

eddy1975

XLDnaute Occasionnel
Re : Un VBA à modifier....

Bonjour Bebere, Modeste le forum

Effectivement je suis allé sur le site de Grandzebu et voici le tableau que j'ai construis pour arriver à mes fins et sans code ou macro (le pied !! pour moi).

Si la clé de contrôle n'est pas calculée le code barre n'est pas généré.
 

Pièces jointes

  • Classeur1.xlsx
    11.6 KB · Affichages: 20
  • Classeur1.xlsx
    11.6 KB · Affichages: 21
Dernière édition:

eddy1975

XLDnaute Occasionnel
Re : Un VBA à modifier....

Re Modeste,

Regarde en N8 je n'ai pas inventé l'algorithme !!!!!!!!. Tu as mal regardé ou effacé la formule en rentrant directement ton 4.
Le résultat en N8 est bien 6 dans l'exemple que tu donnes.

3 2 2 8 0 2 4 1 3 0 1 4 6

3CCSKME*bdabeg+

Ouvre tes placards et teste pleins de codes, tu verras que ca fonctionne.

PS : j'écris pas en rouge lorsque j'écris à quelqu'un car ce n'est pas poli. Enfin du moins c'est ce que l'on m'a inculqué.....
 

Pièces jointes

  • Classeur1.xlsx
    11.6 KB · Affichages: 14
  • Classeur1.xlsx
    11.6 KB · Affichages: 22
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Un VBA à modifier....

Bonsour®
Re Modeste,

Regarde en N8 je n'ai pas inventé l'algorithme !!!!!!!!. Tu as mal regardé ou effacé la formule en rentrant directement ton 4.
Le résultat en N8 est bien 6 dans l'exemple que tu donnes.

3 2 2 8 0 2 4 1 3 0 1 4 6

3CCSKME*bdabeg+

Ouvre tes placards et teste pleins de codes, tu verras que ca fonctionne.

PS : j'écris pas en rouge lorsque j'écris à quelqu'un car ce n'est pas poli. Enfin du moins c'est ce que l'on m'a inculqué.....

le treizième chiffre est un calcul de type modulo avec factorisation, et dans ce code le calcul de ce chiffre se fait automatiquement. Or je ne veux pas que le calcul se fasse car dans mon fichier de base le calcul est lié à d'autre cellules. Je cherche juste à "obtenir" l'affichage du code avec les treize chiffres en A1.
J'espère avoir été assez clair.
l'affichage du code se fait à partir des 12 premiers chiffres, inutile d'en saisir 13 !!
ne pas calculer et/ou ne pas afficher ce 13eme chiffre conduit à un Code Invalide !!!

Errare humanum est, perseverare diabolicum
Beati pauperes spiritu

ce dialogue de sourd a suffisamment duré ...
Fin de discussion.
 

Discussions similaires

Statistiques des forums

Discussions
312 520
Messages
2 089 277
Membres
104 083
dernier inscrit
hecko