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'ai esssayé comme ça :
Dim trouve As String
trouve = ""
i = 1
j = 0

Do While i < 10
    
        Do While j < 4
            If i = B.List(j) Then
                    trouve = trouve & "" & i
                    '(LE PROBLEME EST LA ???????????)
            End If
            j = j + 1
        
        Loop
    
    i = i + 1
    If i = 10 Then C.AddItem trouve
    
Loop
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
26 oct. 2007 à 15:41
Allez ...

Voici que quoi t'aider à mieux comprendre :

Sub test()

'La liste A contient 1,2,3,4,5,6,7,8,9,10
'La liste B contient 1,3,5,7,9
'Je veux renvoyer les chiffres 2,4,6,8 dans la liste C,

Dim i, j, k As Integer
Dim trouver As String
Dim bFind As Boolean
Dim b(4) As Integer

i = 0
j = 1

b(0) = 1
b(1) = 3
b(2) = 5
b(3) = 7
b(4) = 9

bFind = True

Do While i < 5 'je scanne le 2eme tableau

    Do While j < 11 ' je scanne le 1er tableau
        If b(i) = j Then
           Exit Do
        End If
        k = j
        bFind = False
        j = j + 1
    Loop

    If bFind = False Then 'rien trouver => ecrit 3eme tableau
        MsgBox k
        'c.AddItem k
    End If
    
    j = 1 'reinit le compteur du 1er tableau
    bFind = True
    i = i + 1 'on regarde la prochaine occurs du 2nd tableau
Loop

End Sub
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 oct. 2007 à 15:26
Oui le problème est bien là ... mais également dans tes boucles ... lorsque que tu fais ta boucle do while j < 4, tu incrémentes j (j = j + 1), quand ta boucle est finie, tu fais : i = i + 1 mais j reste à 4, donc tu ne repasses plus dans la boucle ...
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
26 oct. 2007 à 15:42
(oupss ... sorry)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 oct. 2007 à 15:32
Peux tu me dire de quel type d'objet sont A, B et C ?
0
Ce sont des ListBox
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
26 oct. 2007 à 15:47
Bon ben voilà tu as la solution prémachée ... tu n'as plus qu'à copier/coller ... en espérant que tu comprennes le pourquoi du comment ..

;o)

Bon courage

Polux
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
26 oct. 2007 à 15:49
(je suis dsl ... je n'avais pas vu tes post)
0
Merci (POLUX31), mais je m'excuse car je suis débutant dans le domaine du programmation et merci pour votre encouragement, je vous dis comment ? mais vous m'avez dis que vous faites pas des exercices. Merci
0
prd, j'ai pas compris
0
prd, j'ai pas compris
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 oct. 2007 à 17:44
pardon nagnag, qu'est-ce que tu n'as pas compris ?
0
Pardon, c'est pour Shaboo
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 oct. 2007 à 17:55
lol, eh oui pourquoi faire simple quand on peut faire compliqué ...

;o)
0
Polux31, je peux l'appliquer comme çà, cad ta reponse dans une base de donnée SQL SERVER
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 oct. 2007 à 18:31
On entre dans un autre domaine là ... ce n'est plus un simple algo de tri de données ... pour l'instant on n'a juste rempli une listBox en effectuant un tri, je ne vois pas le rapport avec une base de données ???

Dis moi un peu plus clairement ce que tu comptes faire ... et si je peux t'aider je le ferai volontier
0
On a une table dans une BD et cette table où il y a des chiffres de 1 à 10000 mais ou il y a des des chiffres manquants à l'interieur par exemple 500,615,381,5487,..... c-a-d renvoyer ces chiffres la.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 oct. 2007 à 18:47
tu peux effectivement faire une extraction dans une table et ensuite effectuer une recherche dans les éléments extraits. Mais ma méthode ne peut pas s'appliquer tel qu'elle est faite ... mais on peut s'en inspirer bien sûr ... As-tu une idée de la façon de faire ? Comment fais-tu pour lire le champ de ta table ?
0
Comme suit justre essai
NB:
- Qr c'est une requete quelconque "SELECT FROM...."
R = valeur minimum dans la table par exemple 1
S = valeur maximum


For i = R To S

If Not Qr.EOF Then

If i <> Qr.Fields(0) Then champ (N° des enregistrements)
MsgBox i
Qr.MovePrevious 'on fixe i
End If

Qr.MoveNext

End If

Next i
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 oct. 2007 à 19:17
ça ne marche pas ...

Si ton premier enregistrement est effectivement différent de i, tu provoques une erreur avec l'instruction : Qr.MovePrevious ....

Plutot qu'une boucle for ...next, utilises de préférence une boucle while ... wend ... tu évites : If Not Qr.EOF then ... pas très bon ...

;o)
0
t'a vu ma la réponse ?
0
Je peux utiliser ça,
i = R

Do While i < s

While Not Qr.EOF
If i <> Qr.Fields(0) Then
Msgbox i
Qr.MovePrevious
End If
Qr.MoveNext
i = i + 1
Wend
Loop

mais, il y a un petit problème pour la première occurrence (exp : s'il n'y a pas de 1 il ne renvoie pas le premier enregistrement manquant.
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 à 10:21
Je te redonne la réponse que je t'ai fait sur l'autre post

Salut nagnag,

Tu déclares i = R mais que vaut R ? idem pour s ?

Pourquoi ne pas faire qu'une boucle ? tu n'as pas besoin de faire do while .... loop

Ensuite dans ton if il y a toujours le Qr.MovePrevious ...

Je suppose que i = 1 pour lire la première occurence du recordset. Si la première occurence est 2, tu ajoutes bien i à l'objet Istaud, mais MovePrevious va générer un message d'erreur, puisque tu es sur la première occurence, tu ne peux pas faire "précédente occurence".
C'est donc un cas particulier qu'il faut traiter de façon indépendante. Même si tu sais que ce n'est pas le cas dans ta table, mais il faut anticiper les éventuels changement pouvant intervenir dans la table (Update, Delete...) qui peuvent changer les données.

Voilà mes remarques ... mais l'idée est excellente.

Bravo et bon courage

;o)

Polux

PS: Merci de me tenir au courant de l'avancement de ton travail ...
0