IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

[Autocad] Insertion d'une ligne dans une listbox (VBA)


Sujet :

VBA

  1. #1
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 41
    Points
    41
    Par défaut [Autocad] Insertion d'une ligne dans une listbox (VBA)
    Bonjour,
    j'ai un problème. Je souhaiterais ajouter une ligne dans une listbox (déjà remplie). J'arrive à ajouter une ligne à la fin de la liste (position par défaut je présume) mais je voudrais l'insérer à une ligne donnée.
    Je m'explique : ma listbox est formée de 4 colonnes correspondant aux coordonnées X,Y,Z et t (temps) de plusieurs points. J'ajoute alors une ligne en précisant ces 4 paramètres. Mais je n'arrive pas à la faire s'insérer où je veux : je veux qu'elle s'insère en fonction de la valeur de t.
    Par exemple si mon nouveau point a t=38500 je voudrais qu'il s'insère à la ligne suivant t=38499 et précédent t=38505 (par exemple).

    Pour l'instant j'ai écris ce qui suit mais je suis perdu, j'arrive pas à avancer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    t = Val(Txtb_t.Text)
     
    Dim i, j As Integer
    j = Liste.Lstb_pts.ListCount
     
    For i = 1 To j
     
    ??????
     
    Liste.Lstb_pts.AddItem (Val(Txtb_x.Text))
    Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 1) = Val(Txtb_y.Text)
    Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 2) = Val(Txtb_z.Text)
    Liste.Lstb_pts.List(Liste.Lstb_pts.ListCount - 1, 3) = Val(Txtb_t.Text)
     
    Next
    Merci pour votre précieuse aide qui me permettra d'avance !

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    Peut-être une solution est-elle de travailler avec une deuxième liste en alternance et qui se superpose à la 1ère list.
    Je m'explique: une deuxième liste même nom que la première mais index 1,
    avec la propriété visible à false.
    Tu recopies en 1ère partie la première liste dans la deuxième jusqu'au Listindex où tu veux insérer en fonction de la valeur de t.
    Tu insères la nouvelle ligne dans la 2e listbox, puis tu insères la suite de la
    1ère List dans la 2e Listbox.
    Tu mets la 1ère List à " Clear " et tu la rends invisible,tu rends visible la 2e listbox avec la nouvelle valeur insérée au bon endroit.



    A+

  3. #3
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Bonjour,

    le code suivant n'est pas testé mais dans le principe ça me parait plus simple de boucler sur les valeurs de ta liste pour comparer ta valeur "t'" avec celles de la liste en partant du début de cette dernière. Une fois que ta valeur t est supérieure à celle sur laquelle tu pointes dans la liste, c'est que tu dois insérer ta valeur à cet index, tu sors donc de la boucle et tu insères avec AddItem mais en précisant l'index. Ca doit donc donner quelquechose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    i = 0
    Do
      If t > Liste.Lstb_pts.List(i, 3) Then Exit Do
      i = i + 1
    Loop Until i = Liste.Lstb_pts.ListCount - 1
    Liste.Lstb_pts.AddItem Val(Txtb_x.Text), i

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    Oublie ma solution, plus compliquée et vois celle de Ohmonbato car en effet
    Dans la MSDN

    Utilisation du contrôle ListBox

    ...
    Ajout d'un élément à un endroit défini
    Pour ajouter un élément à un endroit précis, spécifiez une valeur d'index à la suite de l'élément à ajouter. Par exemple, la ligne de code suivante insère « Japon » en première position et repositionne en conséquence les éléments suivants :

    List1.AddItem "Japon", 0

    Remarquez que c'est la valeur 0, et non la valeur 1, qui spécifie le premier élément de la liste, comme illustré dans la figure 7.35.

    Figure 7.35 Ajout d'un élément dans une liste

  5. #5
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 41
    Points
    41
    Par défaut
    Merci pour vos piste de réflexion !

    OhMonBatp, je comprends l'idée ais je ne parviens pas à faire fonctionner ceci correctement.
    Iclic j'ai un peu de mal à comprendre ta proposition (je suis plutôt débutant en programmation).

    Donc je creuse, creuse et si quelqu'un a encore des idées je suis très preneur !!
    merci

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    Citation Envoyé par stick25 Voir le message
    Je m'explique : ma listbox est formée de 4 colonnes correspondant aux coordonnées X,Y,Z et t (temps) de plusieurs points.
    Salut,

    les lisboxes de VB6 ne comportant qu'une seule colonne "reelle" (et donc "pointable" par un index) peux-tu nous confirmer que tu developpes bien sous VB6 et non sous VBA (VB pour applications Office) ?

    EDIT : pour être plus clair :
    Si tu developpes bien sous VB6 et non sous VBA :
    Ne pas confondre les fausses colonnes (uniquement d'affichage et de presentation) avec de vraies colonnes.
    Il vaudrait alors mieux que tu utilises une listview qui, elle, gere de vraies colonnes.
    Il te faudra dans tous les cas (si tu veux un alignement en colonnes) gerer a la fois la ligne (pour la colonne principale) et la colonne (pour les "sous-items"), quitte a mettre des vides dans les colonnes ne correspondant pas a celle a remplir)

  7. #7
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 41
    Points
    41
    Par défaut
    Je développe sous VBA et je suis débutant, donc je suis à votre entière écoute !!

    Mon problème vient je pense principalement de la boucle pour trouver le numéro de ligne où devra être inséré le nouveaux point.
    Je suis débutant et j'ai du mal à faire ce tit bout de code, donc si jamais quelqu'un pouvait m'aider...

    Merci d'avance !

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Pourrais-tu aussi préciser quel logiciel Office tu utilises ?
    (j'ai déplacé sous Access, mais si tu développes sous Excel...)

  9. #9
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 41
    Points
    41
    Par défaut
    Je suis sous Autocad.

    Mais mon problème et juste un boucle for, ou while, donc je pense qu'elle ne changera pas d'un logiciel à un autre.
    Merci.

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/10/2009, 13h31
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  4. [MySQL] inserer une ligne d'une table dans une autre table
    Par piero53 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/12/2008, 18h29
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo