Pbe fonction au passage sous 2007

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

J'avais une fonction me permettant de créer des codes-barres que j'avais récupérer et mis à ma sauce

Cette fonction est enregistré dans mon classeur de macro perso

Jusqu'à maintenant pas de problème avec Excel 2003

J'ai changé de PC et j'ai maintenant excel 2007

Récupération de la fonction dans mon classeur de macro perso et là lorsque je l'utilise j'ai un superbe #Ref

Quelqu'un pour me guider

Merci d'avance
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Pbe fonction au passage sous 2007

RE

Merci mais je ne pense pas

De plus mon excel 2003 ne cohabite pas avec 2007 je n'ai que le 2007

Mais ça m'embète sérieusement car cette fonction je m'en sers beaucoup pour le job
va falloir que je me penche sérieusement sur le problème
 

d.ryba

XLDnaute Junior
Re : Pbe fonction au passage sous 2007

Hello Modo, et les autres XLnautes,

Je dispose de 2 pc avec vista /2007 et xp /2003, si tu pouvais me donnez un petit bout de code, je me ferai un plaisisr de tester ....... ce soir, car j'ai une vie et un boulot aussi, faudrait pas voir à déconner ; C'est pas Dieu ^^

:D:D
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Pbe fonction au passage sous 2007

Re

Pour Lionel : Oui j'ai bien réinstallé la police

Sinon voici le code récupéré et modifié à ma sauce qui fonctionne très bien sous 2003

Code:
Public Function ean13$(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 1.1.1
  'Paramètres : une chaine de 12 chiffres
  'Parameters : a 12 digits length string
  'Retour : * une chaine qui, affichée avec la police EAN13.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 EAN13.TTF font
  '         * an empty string if the supplied parameter is no good
  Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
  Dim MonNbreLettre As Byte
  
  ean13$ = ""
  'Vérifier qu'il y a 12 caractères
  'Check for 12 characters
  MonNbreLettre = Len(chaine$)
  If Len(chaine$) = 12 Or Len(chaine$) = 13 Then
    'Et que ce sont bien des chiffres
    'And they are really digits
    For i% = 1 To MonNbreLettre
      If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
        i% = 0
        Exit For
      End If
    Next
    If i% = MonNbreLettre + 1 Then
        If MonNbreLettre = 12 Then
            'Calcul de la clé de contrôle
            'Calculation of the checksum
            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
        End If
      'Le premier chiffre est pris tel quel, le deuxième vient de la table A
      'The first digit is taken just as it is, the second one come from 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 / Add middle separator
      For i% = 8 To 13
        CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
      Next
      CodeBarre$ = CodeBarre$ & "+"   'Ajout de la marque de fin / Add end mark
      ean13$ = CodeBarre$
    End If
  End If
End Function
 

TheLio

XLDnaute Accro
Re : Pbe fonction au passage sous 2007

Re Grand Modo :D
Effectivement ça coince :( sous 07
Je ne suis pas assez expert pour ça...
Mais j'ai entendu parler dans un fil de par ici de différences notables entre les librairies 10 et 12...
Seait-ce en rapport?
Je suis le fil pour me coucher moins idiot
A++
Lio
 
G

Guest

Guest
Re : Pbe fonction au passage sous 2007

bonjour Pascal:D, le forum,

Je pense avoir localiser 2 problèmes.

1 - La function demande un paramètre chaine de caractère et lorsqu'on l'appèle d'une feuille de calcul avec une cellule en référence, effectivement elle renvoie #Ref.

Alors je suis passé par une fonction intérmédiaire:

Code:
Public Function Go(C As Range)
    Dim tmp As String
    tmp = ean13$(CStr(C.Value))
    Go = tmp
End Function

Et là pas de problème.

2 - Le nom même de la fonction provoque problème, ainsi que les caractères $ et %

De cette façon elle fonctionne. tu remarqueras que j'ai changé de place à la ligne de retour de la fonction(LeCodeBarre=CodeBarre) en bas.
Code:
Public Function LeCodeBarre(c As Range) As String
  '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 1.1.1
  'Paramètres : une chaine de 12 chiffres
  'Parameters : a 12 digits length string
  'Retour : * une chaine qui, affichée avec la police LeCodeBarre.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 LeCodeBarre.TTF font
  '         * an empty string if the supplied parameter is no good
  Dim i, checksum, first, CodeBarre, tableA As Boolean
  Dim MonNbreLettre As Byte
  Dim chaine As String
  chaine = CStr(c.Value)
  LeCodeBarre = ""
  'Vérifier qu'il y a 12 caractères
  'Check for 12 characters
  MonNbreLettre = Len(chaine)
  If Len(chaine) = 12 Or Len(chaine) = 13 Then
    'Et que ce sont bien des chiffres
    'And they are really digits
    For i = 1 To MonNbreLettre
      If Asc(Mid(chaine, i, 1)) < 48 Or Asc(Mid(chaine, i, 1)) > 57 Then
        i = 0
        Exit For
      End If
    Next
    If i = MonNbreLettre + 1 Then
        If MonNbreLettre = 12 Then
            'Calcul de la clé de contrôle
            'Calculation of the checksum
            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
        End If
      'Le premier chiffre est pris tel quel, le deuxième vient de la table A
      'The first digit is taken just as it is, the second one come from 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 / Add middle separator
      For i = 8 To 13
        CodeBarre = CodeBarre & Chr(97 + Val(Mid(chaine, i, 1)))
      Next
      CodeBarre = CodeBarre & "+"   'Ajout de la marque de fin / Add end mark
    End If
  End If
[SIZE=3][COLOR=red]LeCodeBarre = CodeBarre[/COLOR][/SIZE]
End Function

dis mois si cela fonctionne chez toi.

Et fais nous plein de petit codebarres.....

A+++ l'ami

[Edit] je l'ai testée avec la police de code barre 'Code 128'
G..... tu peux ch'uis grillé:D
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Pbe fonction au passage sous 2007

Re,

En revoyant les règles de nommage dans l'aide xl2007, je suis tombé sur ceci:

Pour les procédures, vrariables, arguments , constantes dans un module:

N'utilisez pas d'espace, de point (.), de point d'exclamation (!) ou les caractères @, &, $, # dans le nom.

A+
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Pbe fonction au passage sous 2007

RE

Allez je viens de tester et cela marche impeccable en changeant le nom en eantreize et en retirant tous les petits signes dans les noms des variables. Un grand merci car cette fonction me sert régulièrement

Bon un petit truc à mettre de coté pour le nommage

Bonne journée à tous
 

abbylee

XLDnaute Nouveau
Re : Pbe fonction au passage sous 2007

Re

Pour Lionel : Oui j'ai bien réinstallé la police

Sinon voici le code récupéré et modifié à ma sauce qui fonctionne très bien sous 2003

Code:
Public Function ean13$(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 1.1.1
  'Paramètres : une chaine de 12 chiffres
  'Parameters : a 12 digits length string
  'Retour : * une chaine qui, affichée avec la police EAN13.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 EAN13.TTF font
  '         * an empty string if the supplied parameter is no good
  Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
  Dim MonNbreLettre As Byte
  
  ean13$ = ""
  'Vérifier qu'il y a 12 caractères
  'Check for 12 characters
  MonNbreLettre = Len(chaine$)
  If Len(chaine$) = 12 Or Len(chaine$) = 13 Then
    'Et que ce sont bien des chiffres
    'And they are really digits
    For i% = 1 To MonNbreLettre
      If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
        i% = 0
        Exit For
      End If
    Next
    If i% = MonNbreLettre + 1 Then
        If MonNbreLettre = 12 Then
            'Calcul de la clé de contrôle
            'Calculation of the checksum
            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
        End If
      'Le premier chiffre est pris tel quel, le deuxième vient de la table A
      'The first digit is taken just as it is, the second one come from 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 / Add middle separator
      For i% = 8 To 13
        CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
      Next
      CodeBarre$ = CodeBarre$ & "+"   'Ajout de la marque de fin / Add end mark
      ean13$ = CodeBarre$
    End If
  End If
End Function

Merci beaucoup, ce est la chance de trouver votre poste, ce qui me donne une bonne référence sur le problème ean13.:eek::eek:
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 153
Membres
103 135
dernier inscrit
Imagine