Boucle avec VB

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
Configuration: Windows 2000
Internet Explorer 6.0

71 réponses

Résumé de la discussion

Le problème consiste à déterminer, en VB6, les éléments de A qui ne figurent pas dans B et les transférer dans C, comme dans l’exemple où A contient 1 à 10 et B contient 2,3,6,9. Une solution consiste à utiliser deux boucles : parcourir A puis, pour chaque élément, comparer avec B et, si absent, l’ajouter à C. Des échanges suggèrent aussi d’éviter les chaînes et de déclarer A et B comme tableaux numériques (Integer) et de bien initialiser les index afin d’éviter les erreurs. En cas d’ordre différent entre A et B ou de nécessité de meilleures performances, une approche robuste peut consister à trier A puis réaliser la différence avec B, ou à utiliser des structures associatives.

Bobot (l’IA à votre service)
  1. salut,

    Je ne suis pas là pour faire les exercices ... je suis là pour aider sur tel ou tel point d'algo ou code. Désolé
    1. Bonjour,
      Je sais, mais je peux te donner mon algo si tu veux ?
      1. Envoie ...

        Tu dois utiliser 2 boucles :

        l'une pour ta 1ere liste, l'autre pour ta 2nde liste :

        tu scannes la 1ere et tu compares avec la 2eme => si l'occurence de la 1ere liste est dans la 2eme OK, sinon tu inseres dans la 3eme.
    2. CODE :
      '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,

      'Début du code
      Dim i, j As Integer
      Dim trouver As String
      i = 1
      j = 0

      Do While i < 10

      trouver = ""

      Do While j < 4 'puisque 5 éléments dans la liste

      If i = B.List(j) Then
      trouver = trouver & " " & j & ","
      End If

      j = j + 1

      Loop

      i = i + 1

      If i = 10 Then c.AddItem trouver
      Loop
      1. Pas mal ...

        Mais avec cette instruction :

        If i = 10 Then c.AddItem trouver


        tu ne vas insérer qu'une seule ligne dans ta 3eme liste. Elle est la concatenation des valeurs trouvés dans la comparaison entre ta 1ere liste et ta 2eme liste.

        C'est ce que tu recherches ?
    3. Oui ce que je cherche
      1. Ok ...

        Mais je pense que ta 3eme liste ressemblera à ta 2eme liste ;p
    4. Non...
      Je veux renvoyer les chiffres pairs dans la troisième liste, comment ça ?
      1. regarde ton code :

        If i = B.List(j) Then
            trouver = trouver & " " & j & ","
        End If


        je le fais tourner

        i = 1 B.List(0) = 1 => OK => tu concatenes => trouver = 0
        i = 1 B.List(1) = 3 => pas OK
        i = 1 B.List(2) = 5 => pas OK
        i = 1 B.List(3) = 7 => pas OK
        i = 1 B.List(4) = 9 => pas OK

        i = 2 B.List(0) = 1 => pas OK
        i = 2 B.List(1) = 3 => pas OK
        i = 2 B.List(2) = 5 => pas OK
        i = 2 B.List(3) = 7 => pas OK
        i = 2 B.List(4) = 9 => pas OK

        i = 3 B.List(0) = 1 => pas OK
        i = 3 B.List(1) = 3 => OK => tu concatenes => trouver = 0,1
        i = 3 B.List(2) = 5 => pas OK
        i = 3 B.List(3) = 7 => pas OK
        i = 3 B.List(4) = 9 => pas OK

        ...

        et en plus je m'apperçois que tu n'auras pas les bon elements
        1. si tu initialises 'trouver' dans ta bloucle, tu vides les éléments de : trouver = trouver & " " & j & "," . Il faut initialiser 'trouver' en dehors de la boucle.

          Ensuite A et B sont de tableaux initialisés. Il faut les déclarer:

          Dim tabA(10) As Integer
          Dim tabB(5) As Integer

          tabA(1) = 1
          tabA(2) = 2

          etc ...

          idem pour tabB

          Ensuite J reste initialisé à 4 donc tu ne testes qu'une seule fois dans ta boucle. Il faut donc l'initialiser en dehors de la seconde boucle.
          Tu testes des entiers (Integer), donc les valeurs qui doivent être dans le tableau C doivent aussi être des entiers et non une chaîne de caractères (String).

          Mais l'idée générale est bonne, creuses un peu plus, tu n'es pas loin du résultat. Aides toi de ce que dit Shaboo
          Bon courage ...

          ;o)

          Polux
          1. cad l'erreur ici
            If i = B.List(j) Then
            trouver = trouver & " " & j & ","
            End If
            1. aider moi car rien ne ca marche, merci
              1. mets ton code stp
              2. mets ton code avec les balises code stp
            2. i = 1
              j = 0

              Do While i < 10

              Do While j < 4
              If i = B.List(j) Then
              Exit Do
              Else
              C.AddItem j
              End If
              j = j + 1

              Loop

              i = i + 1

              Loop

              NB: Je veux renvoyer 2,4,6,8 et 10 (sachant que la 1ere liste contient 1...10 et la 2ème 1,3,5,7,9
              1. i = 1 
                j = 0 
                
                
                Do While i < 10 
                
                Do While j < 4 
                If i = B.List(j) Then 
                Exit Do 
                Else 
                C.AddItem j 
                End If 
                j = j + 1 
                
                Loop 
                
                i = i + 1 
                
                Loop 
                
                1. If i = B.List(j) Then 
                     Exit Do 
                  Else 
                     C.AddItem j 
                  End If 


                  Ok ...

                  On reprend.

                  je le fais tourner avec ton code

                  i = 1 B.List(0) = 1 => tu ne vas pas plus loin grace au Exit Do

                  i = 2 B.List(0) = 1 => tu ajoutes 0 à ta 3eme liste
                  i = 2 B.List(1) = 2 => tu ne vas pas plus loin grace au Exit Do

                  i = 3 B.List(0) = 1 => tu ajoutes 0 à ta 3eme liste
                  i = 3 B.List(1) = 2 => tu ajoutes 1 à ta 3eme liste
                  i = 3 B.List(1) = 3 => tu ne vas pas plus loin grace au Exit Do

                  etc, etc , ...

                  Vois tu d'ou viens le pb ?
                  1. 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
                    1. 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
                  2. 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 ...
                    1. (oupss ... sorry)
                  • 1
                  • 2
                  • 3
                  • 4