XL 2010 code 128

oli5886

XLDnaute Nouveau
Bonjour,
Je cherche à générer des codes 128 dans un fichier excel, afin d'imprimer des étiquettes. (chose inédite pour moi ...)

J'ai téléchargé la police code 128 (code 128.ttf), puis la macro code 128 (fichier joint).

J'ai aussi téléchargé le module activecodebar https://fr.activebarcode.com/download.html

Dans le fichier excel, j'ai créé la formule " =CODE128(A1)" et suivants pour faire apparaître ces codes.
Le souci est que cela génère toujours le même visuel (voir ci-joint visu code 128), qui n'est pas reconnu par le scanner.

Je peux générer unitairement un "bon" code avec activebarcode, mais j'en ai près de 2000 à faire.

Ai-je mal fait quelque chose et/ou existe t-il une méthode pour générer de façon "automatique" chaque code 128 correspondant à chacun de mes codes articles ?

Un grand merci d'avance pour votre aide !!!
Olivier
 

Pièces jointes

  • macro code 128.xlsm
    21.6 KB · Affichages: 67
  • visu code 128.png
    visu code 128.png
    27.8 KB · Affichages: 140
Solution
re
je n'ai pas été assez explicite.
si dans une colonne vous avez besoin d'avoir des code barres, il suffit d'appliquer la police code 128 à cette colonne. (le résultat est immédiat dans toutes la colonne, 10, 100 ou 1000 ou 10000 lignes, voir plus (donc il ne s'agit pas de créer les codes un à un)
code 128.JPG



faites un essai avec le classeur ci-joint en colonne C (après installation de la police, si non cela ne fonctionnera pas)
et tout cela grâce à l'installation de la police du fil trois, deuxième solution.
Capture22.JPG

c'est un paquet complet, mais qu'importe si le résultat est là !
cordialement
galougalou

GALOUGALOU

XLDnaute Accro
bonjour oli5886 bonjour kiki29, bonjour le forum


en premier, un superbe freeware pour éditer, copier dans le presse papier, coller dans une cellule excel.

en deuxième, l'accès direct au téléchargement de la page conseillé par kiki29
après installation, dans excel choisir la police code128

Capture.JPG


cordialement
galougalou
 

oli5886

XLDnaute Nouveau
Bonjour,
Merci à Kiki29 et Galougalou pour vos réponses.

En fait, je cherche simplement à créer des codes-barre "en masse" (à partir d'une formule" environ 200 articles.
La formule utilisée =CODE128(A1) laisse apparaître un code barre non lu par le scanneur.

Les solutions que vous évoquez me permettent de créer un à un ces fameux codes.

Merci encore.
Olivier
 

Pièces jointes

  • visu code 128.png
    visu code 128.png
    27.8 KB · Affichages: 46

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
Peut être une piste :
Il y a un fichier https://www.excel-pratique.com/~files/doc/Code_128.xls disposant dune fonction Code128.

Sinon je me suis amusé à télécharger cette police (https://www.dafont.com/fr/code-128.font) et fait tourner votre macro.
1-J'ai toujours un caractère en début et fin qui est "non barre".( colonne B)
2- Si je supprime ces deux caractères je n'ai pas le même visuel en reprenant vos exemples. (Colonne C )
1.jpg

Si ça peut vous avancer.... Désolé je ne veux pas plonger dans ce code.;)
 

GALOUGALOU

XLDnaute Accro
re
je n'ai pas été assez explicite.
si dans une colonne vous avez besoin d'avoir des code barres, il suffit d'appliquer la police code 128 à cette colonne. (le résultat est immédiat dans toutes la colonne, 10, 100 ou 1000 ou 10000 lignes, voir plus (donc il ne s'agit pas de créer les codes un à un)
code 128.JPG



faites un essai avec le classeur ci-joint en colonne C (après installation de la police, si non cela ne fonctionnera pas)
et tout cela grâce à l'installation de la police du fil trois, deuxième solution.
Capture22.JPG

c'est un paquet complet, mais qu'importe si le résultat est là !
cordialement
galougalou
 

Pièces jointes

  • Copie de cb128.xlsx
    10.1 KB · Affichages: 53
Dernière édition:

oli5886

XLDnaute Nouveau
Re-bonjour Galougalou,

Un grand grand merci !!
Je n'ai pas tout compris, mais au lieu de mettre la formule "=code128(A1)",A1 étant le texte du code, j'ai mis juste A1 comme le montre votre fichier exemple.
Le tout recopié dans votre fichier, et cela génère effectivement des codes barre tous différents.

Restera à valider ça avec le scanner.

Encore merci pour cette solution !!
Olivier
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir tout le monde,
Je ne pense pas qu'il soit suffisant de passer un mot en police Code128 pour que le scanner reconnaisse quoi que ce soit. Le scanner attendra un code spécifique.
Si on utilise l'outil de http://grandzebu.net/informatique/codbar/code128.htm pour le test, et qu'on le compare aux résultats de la macro ou simplement au passage en Code128, on voit que la macro sert à quelque chose.
Le code généré par l'outil n'est pas simplement un passage en Code128, mais un codage comme le donne la macro.

1.jpg
 

GALOUGALOU

XLDnaute Accro
re le fil
et bien je crois que sylvanu à raison.
j'ai comparé les codes-barres édités avec axelcodbar (dont je me servais dans mon entreprise, donc fonctionnel) et les codes-barres avec la police d'excel, ils ne sont pas identiques.
oli5886 nous confirmera ça après un essai.
cordialement
galougalou
 

GALOUGALOU

XLDnaute Accro
re le fil
bon on ne va pas baisser les bras facilement.
dans la continuité de mon fil 6 mais avec une fonction en plus conformément au conseil du site grand zébu, (merçi à kiki29, j'avais oublié ce site que j'ai consulté dans le passé) colonne A la saisie, colonne B le code avec la fonction, colonne C traduction en code-barre avec la police d'écriture, et là, ça devrait le faire, en tout cas, ça fonctionne avec le lecteur de mon téléphone.

VB:
Public Function code128$(chaine$)
  'Cette fonction est régie par la Licence Générale Publique Amoindrie GNU (GNU LGPL)
  'This function is governed by the GNU Lesser General Public License (GNU LGPL)
  'V 2.0.0
  'Paramètres : une chaine
  'Parameters : a string
  'Retour : * une chaine qui, affichée avec la police CODE128.TTF, donne le code barre
  '         * une chaine vide si paramètre fourni incorrect
  'Return : * a string which give the bar code when it is dispayed with CODE128.TTF font
  '         * an empty string if the supplied parameter is no good
  Dim i%, checksum&, mini%, dummy%, tableB As Boolean
  code128$ = ""
  If Len(chaine$) > 0 Then
  'Vérifier si caractères valides
  'Check for valid characters
    For i% = 1 To Len(chaine$)
      Select Case Asc(Mid$(chaine$, i%, 1))
      Case 32 To 126, 203
      Case Else
        i% = 0
        Exit For
      End Select
    Next
    'Calculer la chaine de code en optimisant l'usage des tables B et C
    'Calculation of the code string with optimized use of tables B and C
    code128$ = ""
    tableB = True
    If i% > 0 Then
      i% = 1 'i% devient l'index sur la chaine / i% become the string index
      Do While i% <= Len(chaine$)
        If tableB Then
          'Voir si intéressant de passer en table C / See if interesting to switch to table C
          'Oui pour 4 chiffres au début ou à la fin, sinon pour 6 chiffres / yes for 4 digits at start or end, else if 6 digits
          mini% = IIf(i% = 1 Or i% + 3 = Len(chaine$), 4, 6)
          GoSub testnum
          If mini% < 0 Then 'Choix table C / Choice of table C
            If i% = 1 Then 'Débuter sur table C / Starting with table C
              code128$ = Chr$(210)
            Else 'Commuter sur table C / Switch to table C
              code128$ = code128$ & Chr$(204)
            End If
            tableB = False
          Else
            If i% = 1 Then code128$ = Chr$(209) 'Débuter sur table B / Starting with table B
          End If
        End If
        If Not tableB Then
          'On est sur la table C, essayer de traiter 2 chiffres / We are on table C, try to process 2 digits
          mini% = 2
          GoSub testnum
          If mini% < 0 Then 'OK pour 2 chiffres, les traiter / OK for 2 digits, process it
            dummy% = Val(Mid$(chaine$, i%, 2))
            dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 105)
            code128$ = code128$ & Chr$(dummy%)
            i% = i% + 2
          Else 'On n'a pas 2 chiffres, repasser en table B / We haven't 2 digits, switch to table B
            code128$ = code128$ & Chr$(205)
            tableB = True
          End If
        End If
        If tableB Then
          'Traiter 1 caractère en table B / Process 1 digit with table B
          code128$ = code128$ & Mid$(chaine$, i%, 1)
          i% = i% + 1
        End If
      Loop
      'Calcul de la clé de contrôle / Calculation of the checksum
      For i% = 1 To Len(code128$)
        dummy% = Asc(Mid$(code128$, i%, 1))
        dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 105)
        If i% = 1 Then checksum& = dummy%
        checksum& = (checksum& + (i% - 1) * dummy%) Mod 103
      Next
      'Calcul du code ASCII de la clé / Calculation of the checksum ASCII code
      checksum& = IIf(checksum& < 95, checksum& + 32, checksum& + 105)
      'Ajout de la clé et du STOP / Add the checksum and the STOP
      code128$ = code128$ & Chr$(checksum&) & Chr$(211)
    End If
  End If
  Exit Function
testnum:
  'si les mini% caractères à partir de i% sont numériques, alors mini%=0
  'if the mini% characters from i% are numeric, then mini%=0
  mini% = mini% - 1
  If i% + mini% <= Len(chaine$) Then
    Do While mini% >= 0
      If Asc(Mid$(chaine$, i% + mini%, 1)) < 48 Or Asc(Mid$(chaine$, i% + mini%, 1)) > 57 Then Exit Do
      mini% = mini% - 1
    Loop
  End If
Return
End Function
cordialement
galougalou
 

Pièces jointes

  • Copie de essai code 128.xls
    47.5 KB · Affichages: 71

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Mais pour être compris du scanner je pense qu'il faut supprimer les deux caractères extérieurs, comme je l'ai dit dans mon post #5 :
VB:
=STXT(Code128(A5);2;NBCAR(Code128(A5))-2)

Par ex pour la lgne 5 : ABCm on obtient :
1.jpg

et si on fait l'excercice avec l'outil de test de Zebu, qui donne :
2.jpg

On obtient bien les mêmes codes en EAN128.
 

GALOUGALOU

XLDnaute Accro
128 comparaison.JPG

re sylvanu
test sur ABCm
avec l'outil de axelcobar j'ai crée des centaines de codes-barres lu par deux types de flasheurs différents, mais filaire. Donc j'ai édité ABCm et comme on peut voir sur la capture d'écran et il semble identique avec la police code 128.
j'ose croire que oli5886 pourra les faire fonctionner avec son scanner. (si le scanneur est bluetooth c'est moins sur, car dans ce cas là, le code barre doit etre intégré au système de l'application). il nous confirmera cela.
cordialement
galougalou
 

oli5886

XLDnaute Nouveau
Bonjour Galougalou et Sylvanu,

Encore un grand merci à vous deux (et aussi à Kiki29) pour vos recherches et réponses.

J'ai travaillé mes articles en prenant comme base le fichier Copie de essai code 12 adressé par Galougalou.
Le test avec la douchette est satisfaisant : les codes sont bien lus et correspondent aux bons libellés.

2 erreurs toutefois : le "A" d'un code devient un "Q" après lecture par le scanneur
De même pour "M" qui devient "?" après lecture.

Sauriez-vous ce qu'il faut modifier pour corriger ce "bug" ?

En tout cas, merci déjà pour votre temps et vos connaissances à tous les 2 !!!
Chapeau

Olivier
 

GALOUGALOU

XLDnaute Accro
re oli5886, bonsoir le fil
je n'ai pas de réponse à cette problématique , aussi je vous propose faire un test pour essayer d'identifier le problème.
éditer un code, lu avec une erreur de lettre, avec l'outil de axelcobar.

dans mes obligations professionnelles je n'ai personnellement jamais rencontré ce problème avec les codes édités avec l'outil axelcobar. (ni avec le A ni avec le M) voir la capture d'écran
banque.JPG

ce qui implique pour moi deux solutions.
1er .vous ne constaterez aucun problème avec un code axelcobar, et cela voudra dire que la fonction n'est pas au point.
2eme. vous constaterez le même problème de lecture, et cela voudrai dire que votre programme ou le réglage de votre ordinateur, (région, clavier) sont responsable.
cordialement
galougalou
 
Dernière édition:

oli5886

XLDnaute Nouveau
Re-bonjour,

Avec l'outil test de Grandzebu, en scannant votre code "encaissement", le scanneur écrit ENCQISSE?ENT
2020-06-29_21h56_04.png


et avec activebarcode generator, c'est également avec une erreur :

2020-06-29_22h03_04.png


et enfin avec Axelcobar, idem :
2020-06-29_22h11_47.png

Je vais tester avec un autre ordi pour voir ...
Cordialement
 

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86