VB6 - Next sans For !?
Résolu
Fenril'Skanenruf
-
Fenril'Skanenruf -
Fenril'Skanenruf -
Bonjour,
J'ai un petit problème. Je pense que soit j'ai besoin de lunette soit c'est mon visual basic qui en a besoin.
Je possède un petit programme qui sert à générer aléatoirement des pseudonymes,
Le programme commence par attribuer à une variable tableau() une valeur généréee par Rnd() entre 0 et 26,
Puis le programme convertie selon un gros lot de condition cette valeur en lette (if tableau(a) = 1 then tableauLettre(a) = "a"...). Une fois cela fait, une dernière condition permet à l'ordinateur de revenir de deux cas en arrière pour vérifier si il en est à la 3ième consonne consécutive de retirer pour espérer une voyelle (dans le lot de condition j'attribue une variable tableau lettre() avec 1 pour un voyelle et 0 pour consonne).
Le tout est dans une simple boucle For...Next qui va de 1 à une valeur rentrée par l'utilisateur via un textbox.
Or, j'ai un petit problème. La boucle est ouverte en haut d'un gros sub et fermée en bas de celui ci... Or lors de l'exécution VB me previent par pop-up de ceci : "Next sans for" or les deux y sont !!
Voici la partie du code décrite :
Comprenez-vous quelque chose à ce problème ?
Merci beaucoup d'avance.
Cordialement, Fenril'Skanenruf.
J'ai un petit problème. Je pense que soit j'ai besoin de lunette soit c'est mon visual basic qui en a besoin.
Je possède un petit programme qui sert à générer aléatoirement des pseudonymes,
Le programme commence par attribuer à une variable tableau() une valeur généréee par Rnd() entre 0 et 26,
Puis le programme convertie selon un gros lot de condition cette valeur en lette (if tableau(a) = 1 then tableauLettre(a) = "a"...). Une fois cela fait, une dernière condition permet à l'ordinateur de revenir de deux cas en arrière pour vérifier si il en est à la 3ième consonne consécutive de retirer pour espérer une voyelle (dans le lot de condition j'attribue une variable tableau lettre() avec 1 pour un voyelle et 0 pour consonne).
Le tout est dans une simple boucle For...Next qui va de 1 à une valeur rentrée par l'utilisateur via un textbox.
Or, j'ai un petit problème. La boucle est ouverte en haut d'un gros sub et fermée en bas de celui ci... Or lors de l'exécution VB me previent par pop-up de ceci : "Next sans for" or les deux y sont !!
Voici la partie du code décrite :
Dim tableau(1 To 16) As Long Dim tableauLettre(1 To 16) As String Dim lettre(1 To 16) As Long Private Sub cmd1Generer_Click() If Val(txt1PrenomNbr) > 15 Then txt1Prenom.Text = "Euh, ça fait pas un peu beaucoup de lettre ça !?" Exit Sub End If If Val(txt1PrenomNbr) < 3 Then txt1Prenom.Text = "Désolé mais ça ne fera pas asser pour un nom scandinave." Exit Sub End If For a = 1 To Val(txt1PrenomNbr) Randomize 10 tableau(a) = Rnd * 26 If tableau(a) = 0 Then GoTo 10 If tableau(a) = 1 Then tableauLettre(a) = "a" lettre(a) = 0 If tableau(a) = 2 Then tableauLettre(a) = "b" lettre(a) = 1 If tableau(a) = 3 Then tableauLettre(a) = "c" lettre(a) = 1 If tableau(a) = 4 Then tableauLettre(a) = "d" lettre(a) = 1 If tableau(a) = 5 Then tableauLettre(a) = "e" lettre(a) = 0 If tableau(a) = 6 Then tableauLettre(a) = "f" lettre(a) = 1 If tableau(a) = 7 Then tableauLettre(a) = "g" lettre(a) = 1 If tableau(a) = 8 Then tableauLettre(a) = "h" lettre(a) = 1 If tableau(a) = 9 Then tableauLettre(a) = "i" lettre(a) = 0 If tableau(a) = 10 Then tableauLettre(a) = "j" lettre(a) = 1 If tableau(a) = 11 Then tableauLettre(a) = "k" lettre(a) = 1 If tableau(a) = 12 Then tableauLettre(a) = "l" lettre(a) = 1 If tableau(a) = 13 Then tableauLettre(a) = "m" lettre(a) = 1 If tableau(a) = 14 Then tableauLettre(a) = "n" lettre(a) = 1 If tableau(a) = 15 Then tableauLettre(a) = "o" lettre(a) = 0 If tableau(a) = 16 Then tableauLettre(a) = "p" lettre(a) = 1 If tableau(a) = 17 Then tableauLettre(a) = "q" lettre(a) = 1 If tableau(a) = 18 Then tableauLettre(a) = "r" lettre(a) = 1 If tableau(a) = 19 Then tableauLettre(a) = "s" lettre(a) = 1 If tableau(a) = 20 Then tableauLettre(a) = "t" lettre(a) = 1 If tableau(a) = 21 Then tableauLettre(a) = "u" lettre(a) = 0 If tableau(a) = 22 Then tableauLettre(a) = "v" lettre(a) = 1 If tableau(a) = 23 Then tableauLettre(a) = "w" lettre(a) = 1 If tableau(a) = 24 Then tableauLettre(a) = "x" lettre(a) = 1 If tableau(a) = 25 Then tableauLettre(a) = "y" lettre(a) = 0 If tableau(a) = 26 Then tableauLettre(a) = "z" lettre(a) = 1 passage = passage + 1 If passage = 2 Then If lettre(a - 1) And lettre(a - 2) And lettre(a) = 1 Then GoTo 10 End If txt1Prenom.Text = txt1Prenom & tableauLettre(a) Next a End Sub
Comprenez-vous quelque chose à ce problème ?
Merci beaucoup d'avance.
Cordialement, Fenril'Skanenruf.
A voir également:
- VB6 - Next sans For !?
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Vb6 - Télécharger - Divers Utilitaires
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
9 réponses
Bonjour,
Tout tes If sont sans End IF
If tableau(a) = 26 Then
tableauLettre(a) = "z"
lettre(a) = 1
End IF
Mais vu le code tu ferais mieux d'employer un Select Case
A+
Tout tes If sont sans End IF
If tableau(a) = 26 Then
tableauLettre(a) = "z"
lettre(a) = 1
End IF
Mais vu le code tu ferais mieux d'employer un Select Case
A+
Salut
Ca fait bien longtemps que j'ai pas fait de VB, mais il me semble que tu peux faire beaucoup plus court lol.
Du genre :
Ca fait bien longtemps que j'ai pas fait de VB, mais il me semble que tu peux faire beaucoup plus court lol.
Du genre :
tableauLettre(a) = chr(asc("a")+tableau(a)-1) Select case tableau(a) Case 1,5,9,15,21,25 lettre(a)=0 Case else lettre(a)=1 End select
Bonjour à tous les deux,
Merci beaucoup pour vos réponses, j'ai commencé par remettre les end if en fin de bloc, puis en fait j'ai utilisé ton code fiddy pour transposer en Select Case. Ca marche mais j'ai encore un problème que je n'arrive pas à comprendre.
voici le sub :
Au second clic sur le bouton cmdGenerer, l'ordinateur prend en compte la dernière condition et il plante dessus.
If lettre(a - 1) & lettre(a - 2) & lettre(a) = 1 Then GoTo 10
il surligne cette ligne en me parlant d'indice en dehors de la plage.
Je voulais savoir comment faire pour que si les deux lettres précédentes + la lettres tirée actuellement sont des consonnes de retirer une lettre et de rejouer l'opération en attendant que cela soit une voyelle.
Pouvez-vous m'aider encore ?
Merci beaucoup d'avance.
PS. Ce programme servira à tirer aléatoirement de spseudonyme et la fin qui bug actuellement servira à éviter les noms avec 3 consonnes de suite.
Merci beaucoup pour vos réponses, j'ai commencé par remettre les end if en fin de bloc, puis en fait j'ai utilisé ton code fiddy pour transposer en Select Case. Ca marche mais j'ai encore un problème que je n'arrive pas à comprendre.
voici le sub :
Private Sub cmd1Generer_Click() txt1Prenom.Text = "" passage = 0 If Val(txt1PrenomNbr) > 15 Then txt1Prenom.Text = "Euh, ça fait pas un peu beaucoup de lettre ça !?" Exit Sub End If If Val(txt1PrenomNbr) < 3 Then txt1Prenom.Text = "Désolé mais ça ne fera pas asser pour un nom scandinave." Exit Sub End If For a = 1 To Val(txt1PrenomNbr) 10 tableau(a) = Rnd * 26 If tableau(a) = 0 Then GoTo 10 tableauLettre(a) = Chr(Asc("a") + tableau(a) - 1) Select Case tableau(a) Case 1, 5, 9, 15, 21, 25 lettre(a) = 0 Case Else lettre(a) = 1 End Select passage = passage + 1 If passage > 2 Then If lettre(a - 1) & lettre(a - 2) & lettre(a) = 1 Then GoTo 10 End If txt1Prenom.Text = txt1Prenom & tableauLettre(a) Next a End Sub
Au second clic sur le bouton cmdGenerer, l'ordinateur prend en compte la dernière condition et il plante dessus.
If lettre(a - 1) & lettre(a - 2) & lettre(a) = 1 Then GoTo 10
il surligne cette ligne en me parlant d'indice en dehors de la plage.
Je voulais savoir comment faire pour que si les deux lettres précédentes + la lettres tirée actuellement sont des consonnes de retirer une lettre et de rejouer l'opération en attendant que cela soit une voyelle.
Pouvez-vous m'aider encore ?
Merci beaucoup d'avance.
PS. Ce programme servira à tirer aléatoirement de spseudonyme et la fin qui bug actuellement servira à éviter les noms avec 3 consonnes de suite.
ajoute après
Private Sub cmd1Generer_Click()
Dim Tableau(1 to 26)
Private Sub cmd1Generer_Click()
Dim Tableau(1 to 26)
Non la condition ne marche pas j'ai des rendus avec plus de 2 consonnes alignées.
Je crois que tu confonds, le tableau ne doit pas aller jusqu'à 26 mais jqu'à 16 car c'est le "a".
26 c'est la table de caractère, 16 c'est le nombre maximum de caractère et par conséquent la boucle.
Mais j'avais oublié de copier la déclaration des variables :
Une autre idée ?
Merci quand même ^^
Je crois que tu confonds, le tableau ne doit pas aller jusqu'à 26 mais jqu'à 16 car c'est le "a".
26 c'est la table de caractère, 16 c'est le nombre maximum de caractère et par conséquent la boucle.
Mais j'avais oublié de copier la déclaration des variables :
Dim Tableau(1 To 16) As Long Dim tableauLettre(1 To 16) As String Dim lettre(1 To 16) As Long Dim passage As Integer Private Sub cmd1Generer_Click() txt1Prenom.Text = "" passage = 0 If Val(txt1PrenomNbr) > 15 Then txt1Prenom.Text = "Euh, ça fait pas un peu beaucoup de lettre ça !?" Exit Sub End If If Val(txt1PrenomNbr) < 3 Then txt1Prenom.Text = "Désolé mais ça ne fera pas asser pour un nom scandinave." Exit Sub End If For a = 1 To Val(txt1PrenomNbr) 10 Tableau(a) = Rnd * 26 If Tableau(a) = 0 Then GoTo 10 tableauLettre(a) = Chr(Asc("a") + Tableau(a) - 1) Select Case Tableau(a) Case 1, 5, 9, 15, 21, 25 lettre(a) = 0 Case Else lettre(a) = 1 End Select passage = passage + 1 If passage > 2 Then If lettre(a - 1) & lettre(a - 2) & lettre(a) = 1 Then GoTo 10 End If txt1Prenom.Text = txt1Prenom & tableauLettre(a) Next a End Sub
Une autre idée ?
Merci quand même ^^
Re,
Pourquoi Val(txtPrenomNbr) ? C'est pas plutôt la longueur que tu souhaites avoir ? => Fonction len
Ensuite Ta variable "passage" est inutile. Pourquoi ne ferais-tu pas le contrôle sur la variable a ? If a > 2 Then
Cdt
Pourquoi Val(txtPrenomNbr) ? C'est pas plutôt la longueur que tu souhaites avoir ? => Fonction len
Ensuite Ta variable "passage" est inutile. Pourquoi ne ferais-tu pas le contrôle sur la variable a ? If a > 2 Then
Cdt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Tu as déclaré
Dim lettre(1 To 16) As Long
Donc les indices du tableau lettre() doivent etre dans l'intervalle 1 à 16
or si a=1
If lettre(a - 1) & lettre(a - 2) & lettre(a) = 1 Then GoTo 10
serait équivalent à
If lettre(0) & lettre(-1) & lettre(1) = 1 Then GoTo 10
Les indices du tableau sont en dehrs de la plage.
De plus, l'opérateur & sert a à concatener les valeurs texte de plusieurs expressions, à ne pas confondre avec l'opérateur logique AND.
If lettre(a - 1) AND lettre(a - 2) AND lettre(a) = 1 Then GoTo 10
Salut
Tu as déclaré
Dim lettre(1 To 16) As Long
Donc les indices du tableau lettre() doivent etre dans l'intervalle 1 à 16
or si a=1
If lettre(a - 1) & lettre(a - 2) & lettre(a) = 1 Then GoTo 10
serait équivalent à
If lettre(0) & lettre(-1) & lettre(1) = 1 Then GoTo 10
Les indices du tableau sont en dehrs de la plage.
De plus, l'opérateur & sert a à concatener les valeurs texte de plusieurs expressions, à ne pas confondre avec l'opérateur logique AND.
If lettre(a - 1) AND lettre(a - 2) AND lettre(a) = 1 Then GoTo 10
Salut
Re,
La variable passage est initialisée à 0 puis incréméntée de 1 à chaque tour.
Donc pour passage = 3 le test est exécuté, et si a < 3 alors ERREUR
A+.
La variable passage est initialisée à 0 puis incréméntée de 1 à chaque tour.
Donc pour passage = 3 le test est exécuté, et si a < 3 alors ERREUR
A+.
RE,
Possible, j'ai du mal à suivre l'exécution du code, il faudrait afficher le valeur de a à chaque tour de boucle.
En tout cas le message d'erreur est bien explicite, à un momment donné l'indice du tableau inferieur à 1 ou supérieur à 16.
A+.
Possible, j'ai du mal à suivre l'exécution du code, il faudrait afficher le valeur de a à chaque tour de boucle.
En tout cas le message d'erreur est bien explicite, à un momment donné l'indice du tableau inferieur à 1 ou supérieur à 16.
A+.
Oui, je suis d'accord avec toi. Le message est explicite. Mais en lisant le code, je pense que la variable "a" ne prend pas de valeurs négatives ou nulles, mais qu'il passera par une valeur supérieure à 16. Et ceci est probablement dû à l'utilisation de la fonction Val au lieu de len. A voir.
C'est vrai qu'un joli breakpoint serait idéal :p.
C'est vrai qu'un joli breakpoint serait idéal :p.