malhivertman1
Messages postés489Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention22 novembre 2007
-
6 nov. 2006 à 11:46
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024
-
7 nov. 2006 à 13:31
Bonjour,
Je fais un for avec un step n (n étant une valeur passé passé en paramètre) mais j'aimerai que mon step n diminu au fur et a mesure, c'est a dire qu'au debut, ce soit step 25, puis step 20, puis step 15 et ainsi de suite, avant mon next, je veux reduire mon pas mais je n'y arrive pas.
malhivertman1
Messages postés489Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention22 novembre 20071 6 nov. 2006 à 15:20
Public Function CouperChaine(ByVal uneChaine As String, ByVal n As Integer)
'cette fonction coupe une chaine tous les n caractères
'et insere un retour a la ligne entre chaque coupure
Dim tmp As String
Dim maChaine As String
Dim retourChariot As String
Dim i As Integer
retourChariot = vbCrLf 'retour a la ligne
maChaine = ""
If InStr(uneChaine, " ") > 0 Then
For i = 1 To Len(uneChaine)
'on parcours la chaine tous les n caractères jusqu'à
'la fin de la chaine
tmp = tmp & Mid(uneChaine, i, 1)
If Len(tmp) > n Or i = Len(uneChaine) Then
If Right(tmp, 1) <> " " And Right(tmp, 1) <> "," And Right(tmp, 1) <> "." And (Len(uneChaine) - i) > 0 Then
tmp = Mid(tmp, 1, InStrRev(tmp, " "))
i = i - (n - InStrRev(tmp, " ") + 1)
End If
maChaine = maChaine & tmp & retourChariot
tmp = ""
If n > 10 Then
n = n - 3
End If
End If
Next
Else
For i = 1 To Len(uneChaine)
'on parcours la chaine tous les n caractères jusqu'à
'la fin de la chaine
tmp = tmp & Mid(uneChaine, i, 1)
If Len(tmp) > n Or i = Len(uneChaine) Then
maChaine = maChaine & tmp & retourChariot
tmp = ""
If n > 10 Then
n = n - 3
End If
End If
Next
End If
Return maChaine
End Function
Voilà, ça, ça fait ce que je voulais et j'avais tester ton programme avant de dire qu'il ne fesait pas exactement ce que je voulais.
Merci de m'avoir donner l'idée de faire caractere par caractere au lieu de chercher indefiniment comment modifier un step.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 6 nov. 2006 à 11:56
A vérifier la méthode de Drikce, mais il est possible que ce ne soit pas possible
Les paramètres de la boucle For sont mis en place avant le lancement de la boucle.
Une fois la boucle lancée il est probable qu'il ne soit pas possible de les changer.
Ainsi tu ne dois pas pouvoir, je pense, changer la valeur initiale, la valeur finale et le saut
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
malhivertman1
Messages postés489Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention22 novembre 20071 6 nov. 2006 à 12:23
oui Drikce j'avais qd même essayé avec n=n-5 mais non, ca ne marchait pas.
Et NHenry, en fait, c'est une fonction qui coupe une chaine de caractere et j'ai deja i qui prend qqch dc je ne peux pas mettre i+=n-1
Je vous donne ma fonction complete, ca sera peut etre plus facile.
Public Function CouperChaine(ByVal uneChaine As String, ByVal n As Integer)
'cette fonction coupe une chaine tous les n caractères
'et insere un retour a la ligne entre chaque coupure
Dim tmp As String
Dim maChaine As String
Dim retourChariot As String
Dim i As Integer
retourChariot = vbCrLf 'retour a la ligne
maChaine = ""
If InStr(uneChaine, " ") > 0 Then
For i = 1 To Len(uneChaine) Step n
tmp = Mid(uneChaine, i, n)
If Right(tmp, 1) <> " " And Right(tmp, 1) <> "," And Right(tmp, 1) <> "." And (Len(uneChaine) - i) > n Then
tmp = Mid(tmp, 1, InStrRev(tmp, " "))
i = i - (n - InStrRev(tmp, " "))
n -= 5
End If
maChaine = maChaine & tmp & retourChariot
Next
Else
For i = 1 To Len(uneChaine) Step n
tmp = Mid(uneChaine, i, n)
maChaine = maChaine & tmp & retourChariot
Next
End If
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 6 nov. 2006 à 13:42
Bonjour,
En vb6 j'aurait plutôt fait comme ca :
Function CouperChaine2(uneChaine As String, n As Integer)
Dim i As Integer, c As Integer
Dim chainetemp As String, retourchario ' as String
retourChariot = vbCrLf 'retour a la ligne
chainetemp = ""
CouperChaine2 = ""
For i = 1 To Len(uneChaine)
c = c + 1
If c = n + 1 Then
CouperChaine2 = CouperChaine2 + retourChariot + chainetemp
chainetemp = ""
c = 1
End If
chainetemp = chainetemp + Mid(uneChaine, i, 1)
Next i
End Function
malhivertman1
Messages postés489Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention22 novembre 20071 6 nov. 2006 à 14:11
TMONOD, j'ai précisais que je faisais du vb.net dans le titre justement pour qui n'y ait pas des gens qui me reponde en vb 6 dc autant bien lire le sujet avant de répondre à côté. merci.
Et oui NHenry, j'ai déclaré en haut de ma page Option explicit.
Donc si je comprend bien, il est impossible de modifier la valeur d'un step. Parce qu'il faut en fait qu'avec une chaine de caractere, le programme me sorte qqch comme :
xxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxx
xxxxxxxx
xxxx
xx
x
malhivertman1
Messages postés489Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention22 novembre 20071 6 nov. 2006 à 14:25
l'algo ne m'apporte rien de + sauf qu'il est fait caractere par caractere et non avec un step. Il manque aussi une variable pour permettre de couper la chaine et de mettre le retour a la ligne sans effacé ce qu'il y avait avant.
mais je vais surement m'orienter vers du caracteres par caracteres pour faire ce que j'ai dis avant.
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 7 nov. 2006 à 13:30
Bonjour
Tu as mis Option explicit, mais Option Strict ?
Il n'est pas possible de jouer avec le STEP en effet (cela me pose
souvent des pb lors du parcours d'une collection avec suppression de
certains items).
A la place de chaine de x, préfère les variables numériques (plus rapide).
Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)