Boucle avec VB

Fermé
NagNag - 25 oct. 2007 à 16:55
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 30 oct. 2007 à 16:12
Bonjour,
Avec VB6 comment je peux résoudre le problème suivant : trois listes A,B et C la liste A comprend des réels de 1 à 10 (incrémentation) et la liste B comrend les réels suivants (2,3,6,9) , comment renvoyer les éléments dans la liste C les éléments manuquants c-a-d (1,4,5,7,8 et 10) Merci
A voir également:

71 réponses

J'utilise I=R pour ne pas avoir un comptage toujours à partir de 1.
R = est le premier enregistrement, et S le dernier enregistrement.
Mon travail sur requête SQL paramétré chaque année et les classes correspondantes, donc si je prends :

Qr= "SELECT N° FROM Etudiants WHERE classe = ?Parametre? AND Annee = ?Parametre?"
Supposons que j'ai (n) classes EG1,EG2,.....EGn et j'ai (n) années scolaires AS1,AS2.....ASn
les numeros d'inscriptions de EG1 de 1 à 100 et EG2 de 101 à 199 .... et ainsi de suite nécéssairement, il faut utiliser I=R pour que la boucle débute à partir du premier enregistrement et pas de 1, si on a EG1 la boucle va compter à partir de 1 et si on a EG2 la boucle va compter à partir de 101 ...... mais la boucle précédente (c-a-d que je te donnes aujourd'hui) présente une erreur de comptage et pas d'exécution, il n'y a pas de 1 ou 101 ou 201... c-a-d la boucle débute son comptage qu'après le premier enregistrement, et par conséquent il ne retourne pas ce dernier, t'a une idée concernant ce cas, merci de me répondre, j'espère que ta compris l'idée générale de travail.
0
Je peux utiliser ça alors :

While Not Qr.EOF
If i <> Qr.Fields(0) Then
lstaud.AddItem i
Qr.MovePrevious
End If
Qr.MoveNext
i = i + 1
Wend
NB: concernant MovePrevious pour que i suit immédiatement les enregistrements, sinon il va ajouter les enregistrements existants dés la première différence entre i et le champ correspondant, car pour le reste toujours i ne suit pas les Enrg, NON ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 11:34
bonne question ??? le tout est de savoir si le champs de table est trié dans l'ordre croissant ???
0
POLUX31, pardon j'ai pas compris
0

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

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 11:47
dsl, j'avais ton post précédent ...
0
Voilà comment passe :

Soit n: le numéro d'enreg

i=202 n=202 (puisque i=R) => rien ne se passe
i=203 n=203 = > rien ne se passe
i=204 n= 205, 204 est inexistant =>(ajouter 204 à la liste) ==>MovePrevious la boucle revient à 205 (le numero d'enregistrement donc 205 = 205 => rien ne se passe, sinon, il va aller à l'Enreg suivant 206 différent de 205 il va l'ajouter à la liste des chiffres manquants pourtant le 206 est existant.

Mais mon problème est que la boucle ne lit pas 201 qui est manuquant, j'espère que tu ma compris.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 11:57
J'ai compris le blème ...

Je vais créer le conteste sur une base et je tiens au courant ...
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 12:44
voilà ce que j'ai trouvé comme soluce ... c'est pas top mais ça fonctionne

i = Qr.Fields(0)

If i > 1 And i < 100 Then i = 1
If i > 101 And i < 200 Then i = 101
If i > 201 And i < 300 Then i = 201
etc ...

While Not rst.EOF

If i <> Qr.Fields(0) Then
lstaud.AddItem i
Qr.MovePrevious
End If
Qr.MoveNext
i = i + 1
Wend
0
POLUX31,
J'essaye autrement et je reviens
0
POLUX31,
J'essaye autrement et je reviens car si on a 1000000 d'enregistrements comment on va tester ça ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 13:15
dans ce cas il faut faire une fonction qui te retourne i selon le cas de figure ...

Je viens de la faire et ça marche ...

;o)
0
POLUX31, voilà je trouve ce qui suit :
Dim x
Private Function Trouver(i as integer,x as integer) as integer
If i > x And i < x + 99 Then i = x
End Function

je sais pas ?, normalement ça marche, quel ton avis ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 15:47
Quelle est la valuer de X ?
Je ne comprends pas ....
0
variable à partir de 1, qu'on l'ajoute au cours de l'exécution
0
t'a d'autres solutions POLUX31 ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 15:56
pourquoi passer deux paramètres ? et j'aimerai voir à quel moment tu appelles ta fonction ... ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 15:58
Ah oui, j'oubliai le principal ... ta fonction ne retourne rien ... ;o)
0
car x c'est variable qu'on peut le connaître qu'au cours de l'exect x=1 ou 101 ou 201 ......, non ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 oct. 2007 à 16:01
oui ok, mais i alors ???
0
comment faire ? alors POLUX tu peut m'aider stp
0