VB6 - Next sans For !?
Résolu/Fermé
A voir également:
- VB6 - Next sans For !?
- Vb6 - Télécharger - Divers Utilitaires
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Download instagram for pc - Télécharger - Divers Communication
- Saveaspdf.exe for office 2007 - Télécharger - Bureautique
9 réponses
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
2 juil. 2008 à 22:22
2 juil. 2008 à 22:22
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+
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
2 juil. 2008 à 22:56
2 juil. 2008 à 22:56
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.
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
3 juil. 2008 à 12:17
3 juil. 2008 à 12:17
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 ^^
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
3 juil. 2008 à 13:45
3 juil. 2008 à 13:45
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
3 juil. 2008 à 13:52
3 juil. 2008 à 13:52
Salut,
Bien vu pour & au lieu de AND. Par contre, il ne va pas avoir de problème d'indices négatifs grâce à sa variable passage. ^^
Cdt
Bien vu pour & au lieu de AND. Par contre, il ne va pas avoir de problème d'indices négatifs grâce à sa variable passage. ^^
Cdt
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+.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
3 juil. 2008 à 14:14
3 juil. 2008 à 14:14
Oui mais passage est incrémenté de 1 à chaque incrémentation de la variable a. Donc pas de soucis.
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+.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
3 juil. 2008 à 14:50
3 juil. 2008 à 14:50
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.