Besoin d'aide sur un algaritme

Résolu
cs_supergl Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 mai 2007 - 15 mai 2007 à 14:49
cs_supergl Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 mai 2007 - 15 mai 2007 à 17:56
Bonjour a tous,

Voici le morceau de fonction qui me pose problème :
Function crypter(acrypt As String, code As String) As String
alpha = "azertyuiop^$qsdfghjklmùµwxcvbn,;:= -_AZERTYUIOP¨*QSDFGHJKLM%£WXCVBN?./+[]´`~\<>²³&é'()§è!çà0123456789" & Chr(34)
crypt = acrypt
     
For i = 1 To Len(acrypt)
    For a = 1 To Len(alpha)        If Mid$(alpha, a, 1) Mid$(acrypt, i, 1) Then lenbrt a
        dfg = i - ((i \ Len(code)) * Len(code))        If dfg 0 Then dfg Len(code)        If Mid$(alpha, a, 1) Mid$(code, dfg, 1) Then lenbrc a
    Next a
    lenbr = (((lenbrt + lenbrc) - 1) - (((lenbrt + lenbrc) - 1) \ Len(alpha)) * Len(alpha))    If lenbr 0 Then lenbr Len(alpha)
    Mid$(crypt, i, 1) = Mid$(alpha, lenbr, 1)
Next i
crypter = crypt
End Function

des que j'entre un crarctere non prévu dans alpha, j'ai un plantage sans message donc une fauuse chaine cryptée

Je voudrais ajouetre au débiut de la fonction un teste de controle de ce type

For y = 1 To Len(code)
    v = Mid$(code, y, 1)
    c = InStr(0, alpha, v)    If c 0 Then crypter "erreur"
    If c = 0 Then Return
  Next y

avant la boucle for de la fonction crypter

j'ai un message d'erreur a l'exécution que je ne comprends pas  erreur  d'exécution '5' erreur d'appel a procédure .

Cela fait une dizaine d'année que je n'ai pas fait un programme en VB

Merci de votre aide

7 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
15 mai 2007 à 15:00
Salut,
En VB6 cette ligne est fausse
If c = 0 Then Return
Si par return tu entends sortir de la procédure alors Exit Function

D'autre par quel est l'interret de faire deux fois le même test     If c 0 Then crypter "erreur"
    If c = 0 Then Return

que cherches tu exactement à faire

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
15 mai 2007 à 15:01
Re,
ATTENTION que cela ne soit pas mal interprété Return existe en VB6 mais à utiliser comme le dit MSDN:
[javascript:alink_4.Click() procédure].

Syntaxe

GoSubline
...

line
...


Return

L'
<object id= "alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_5.Click() argument] line peut être n'importe
quelle
<object id ="alink_6" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_6.Click() étiquette de ligne] ou
<object id="alink_7" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_7.Click() numéro de ligne].

Remarques

GoSub et Return peuvent apparaître n'importe où dans une
procédure, mais l'instruction GoSub et l'instruction Return
correspondante doivent appartenir dans la même procédure. Une sous-routine peut
contenir plusieurs instructions Return. Toutefois, la première
instruction Return rencontrée provoque la poursuite du déroulement du
programme à partir de l'
<object id ="alink_8" type= "application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_8.Click() instruction] qui suit immédiatement
l'instruction GoSub la plus récente.

Note   Il n'est pas possible d'accéder à des
procédures Sub ou de les quitter au moyen de GoSub...Return.

Conseil   Il est parfois préférable de créer des procédures séparées que vous pourrez appeler
plutôt que d'utiliser GoSub...Return

@+: =89254 Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
15 mai 2007 à 15:08
Dans ce cas essaie
(sans grande conviction mais bon)
For y = 1 To Len(code)
   v = Mid$(code, y, 1)
   c = InStr(0, alpha, v)
   If c = 0 Then
       crypter = "erreur"
       Exit Function
   End If
Next y, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
15 mai 2007 à 17:11
Re,
Ah petite erreur
Instr(1 et non instr(0

@+: Ju£i?n
Pensez: Réponse acceptée
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_supergl Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 mai 2007
15 mai 2007 à 15:06
Merci de votre aide,

je veux en réalité passer la chaine de caractere code a un controle qui verifie si tous les caracteres de code sont bien présent sdans la chaine alpha,
Si il ne sont pas présents je veux retourner une valeur dans crypter qui m'indique l'erreur.
Donc me faire sortir de la fonction crypter et pévenir l'utilisateur de l'erreur

Ai je été assez clair

Merci a voius
0
cs_supergl Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 mai 2007
15 mai 2007 à 16:55
Bonsoir,
j'ai fait un copier coller de ton code source
mais dans ton cas comme dans le mien
il sort en run un message d'errur sur la ligne
c = InStr(0, alpha, v)

procedure invalide
Je ne comprends pas la bourde

Merci de ton aide @++
0
cs_supergl Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 mai 2007
15 mai 2007 à 17:56
Grand merci jrivet

Grace a toi cela marche nickel

A bientot
supergl
0
Rejoignez-nous