Résultat d'une ListBox négatif

Guy73000 Messages postés 7 Statut Membre -  
Guy73000 Messages postés 7 Statut Membre -

Bonjour.

Je voudrai constituer une liste de 40000 noms. J'utilise VB6 Entreprise.

Dans une feuille standard, je crée une ListBox appelée Lst1.

Je crée un bouton appelé Cmd1.

Je crée une zone de texte appelé Txt1 et une variable de contrôle N as long.

Voici un exemple.

Dans la Sub Cmd1()

Dim N As Long

For N=0 to 40000

Lst1.AddItem N

next N

End Sub

Dans la Sub Lst1 ()

Txt1.Text=Lst1.ListIndex

End Sub

Une fois la liste affichée je déroule jusqu'à l'adresse affichée 39900 par exemple.

Je click sur la valeur 39900 pour que celle-ci soit écrite dans Txt1.

Le résultat n'est pas 39900 mais -25636.

Comment rendre le résultat positif c'est à dire 39900 et non -25636.

Merci de votre réponse, bonne fin de journée.

5 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     

    En VB6/VBA, le type par défaut est int, hors c'est en 16 bits (héritage).
    Donc les valeurs c'est entre 0-32767 puis ça passe à -32768 pour revenir à -1.
    Pour passer en positif, il faut stocker la valeur dans un long et faire +65536.

    En code :

    long MaVariable
    MaVariable=index
    MaVariable=MaVariable+65536
    

    0
    1. Guy73000 Messages postés 7 Statut Membre
       

      Bonjour Henry.

      Merci pour l'idée.

      Ca marche, si cela peu servir à quelqu'un, voici comment j'ai procédé.

      Dans la Sub Lst1()

      Txt1.Text = Lst1.ListIndex

      If (Lst1.ListIdex <0) Then

      Txt1.Text=(Lst1.ListIdex+65536)

      End if

      Par contre, le même problème recommence pour les saisies supérieures à 65536.

      Si je fais une boucle à 70000 et que sélectionne l'adresse 66240 la réponse est 704.

      Bonne fin de journée.

      0
  2. Guy73000 Messages postés 7 Statut Membre
     

    Merci Beaucoup Henry, c'est sympa.

    Je vais voir ça et je vous tiens au courant.

    Bonne soirée.

    0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

    peut-être

    Const d As Long = 2 ^ 16
    Dim x As Long
    x = (-25636 + d) Mod d
    Debug.Print x
    0
    1. Guy73000 Messages postés 7 Statut Membre
       

      Bonjour.

      Merci de ta réponse c'est sympa.

      Je vais essayer ça.

      Bonne fin de journée.

      0
  4. Utilisateur anonyme
     

    Bonjour 

    vb6  est obsolète depuis environ 20 ans. Ce qui veut dire notamment que de nombreux composants ne fonctionnent plus sur W10, j'ai même pas essayé avec W11.


    VB.Net "son remplaçant" travaille en 32 bits voire en 64bits.

    Visual Studio comprend deux versions gratuites 

    • visual studio community, qui est gratuit pour les petite entreprises sous conditions 
    • visual studio code

    Tu ne rencontrerais pas ce type de problèmes avec VN.Net

    Cela étant, VB est vraiment différent de VB6 contrairement à ce que son nom peut laisser croire.

    Il faudra donc apprendre un nouveau langage.

    A ce compte là, réfléchir à d'autres langages gratuits encore d'actualité serait de toute façon à faire

    • python (réputé facile à apprendre, grosse communauté, mais perso j'aime pas, car il donne des défauts, comme vb6 d'ailleurs)
    • java 
    • c# (vrai langage .Net, VB.Net c'est du c# déguisé en VB)
    • rust
    • etc...

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

    Posez votre question
  6. Guy73000 Messages postés 7 Statut Membre
     

    Bonjour.

    Merci de ta réponse, c'est gentil.

    Oui! Je sais, mais pour le peu que j'ai à faire il me convient.

    J'ai remarqué que ce problème n'existait pas avec le VB d'Exel.

    A vrai dire j'ai un peu la flemme d'apprendre un nouveau langage.

    Bonne fin de journée.

    0