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

Macros et VBA Excel Discussion :

Mettre un élément d'une ListBox sur plusieurs lignes / Faire des sauts de lignes [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Kentarosan
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Par défaut Mettre un élément d'une ListBox sur plusieurs lignes / Faire des sauts de lignes
    Bonjour à tous,

    Tout est dans le titre.

    J'ai une ListBox assez étroite sur mon UserForm et j'aimerai que chaque Item soit sur plusieurs lignes. J'ai déjà essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each idDemande In Demandes.GetDemandes()
        lb_Demandes.AddItem idDemande 'La première colonne de la ListBox fait 0pt de large. Données invisibles maggle 8-)
        lb_Demandes.List(lb_Demandes.ListCount - 1, 1) = Demandes.GetType(idDemande) & vbCrLf & Demandes.GetObjet(idDemande) 'Et donc dans la deuxième colonne qui elle est visible, je met mes 2 infos que je voudrais séparer d'un retour à la ligne.
    Next
    (Demandes.GetType et Demandes.GetObjet sont deux fonctions qui renvoient des chaînes de caractères.)

    Voilà, si quelqu'un a une solution à me proposer, je suis preneur. Même si c'est de la magouille, ça me va, je ne sais pas si c'est vraiment possible de base en fait.

    Merci par avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    les éléments d'une listbox ne peuvent occuper qu'une seule ligne chacun.
    Ta démarche ne saurait donc aboutir.

  3. #3
    Membre averti Avatar de Kentarosan
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Par défaut
    Re,

    Merci de ta réponse.

    Comme je suis quelqu'un de borné et déterminé j'ai quand même tenté un truc. C'est pas encore tout à fait fonctionnel mais c'est l'idée.

    J'ai découpé le texte que je voulais mettre sur 2 lignes dans 1 ligne de ListBox en 2 lignes de ListBox, ce qui donne ça dans le Initialize du Userform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
        For Each idDemande In Demandes.GetDemandes()
            lb_Demandes.AddItem idDemande 'Première colonne de la listbox est invisible
            lb_Demandes.List(lb_Demandes.ListCount - 1, 1) = Demandes.GetType(idDemande)
            lb_Demandes.AddItem idDemande
            lb_Demandes.List(lb_Demandes.ListCount - 1, 1) = Demandes.GetObjet(idDemande)
        Next
    End Sub
    Et ensuite, lors de la sélection d'un élément de la liste, on coche celui d'au-dessus si on a cliqué sur celui d'en-dessous et vice-versa.
    J'ai dû rajouter un boolean enCoursSelection dans mon module parce que l'évènement Change de la ListBox est rappelé à chaque fois que je change l'état du deuxième élément. Logique, mais ça crée une boucle infinie et c'est pénible.

    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
    16
    Private Sub lb_Demandes_Change()
        With lb_Demandes
            If .ListIndex > -1 Then
                If .ListIndex Mod 2 = 0 And .Selected(.ListIndex + 1) = False And enCoursSelection = False Then
                    enCoursSelection = True
                    .Selected(.ListIndex + 1) = True
                ElseIf .ListIndex Mod 2 = 1 And .Selected(.ListIndex - 1) = False And enCoursSelection = False Then
                    enCoursSelection = True
                    .Selected(.ListIndex - 1) = True
                End If
                idDemandeSelectionnee = .List(.ListIndex)
                AffichageDemande
            End If
        End With
        enCoursSelection = False
    End Sub
    Donc actuellement, il n'y a que 2 problèmes que je n'ai pas eu le temps de régler :
    • La gestion de l'erreur lors de la sélection du premier et du dernier élément, parce qu'il test le Selected d'un élément qui n'existe pas,
    • Et le décochage de tous les autres éléments lorsque l'on clic sur un nouveau.


    Voilou, peut-être que ce petit bout de code aidera quelqu'un, moi je retourne à une liste plus simple avec une scrollbar en bas.

    A la prochaine !

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ce que tu fais-là :
    1) n'est pas ce que tu demandais, mais une approche/contournement autre
    2) t'interdit l'ajout d'un article qui ne serait pas "décomposé" sur deux lignes de la listbox (car sinon -->> badaboum).

  5. #5
    Membre averti Avatar de Kentarosan
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Par défaut
    Approche / contournement c'est ce que j'entendais par "magouille"

    Et dans mon cas, mes "demandes" ont toutes un type et un objet.

    Bref, de toutes façons, ma méthode bricolage fait un peu usine à gaz pour simplement éviter de mettre une listbox plus large..

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Tu as un idDemande unique pour au plus 2 lignes

    Pourquoi ne pas l'utiliser

  7. #7
    Membre averti Avatar de Kentarosan
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 37
    Par défaut
    Ha oui c'est pas bête ça!

    On clic sur un élément, on récupère l'id de cet élément, on parcourt la ListBox pour trouver son compère et on l'active. Peut-être laisser mon boolean pour éviter le même coup de la boucle infinie mais déjà ça retire les erreurs de sortie de liste pour le premier et le dernier et c'est quand même vachement moins compliqué et lourd que mon délire avec le modulo.

    Merci beaucoup, je vais aller mettre ça en place dès que j'aurai un peu de temps!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/03/2013, 15h29
  2. mettre les résultat d'une requête sur plusieurs colonne
    Par irma2011 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2012, 11h09
  3. Mettre une instruction sur plusieurs lignes
    Par Nikogram dans le forum C#
    Réponses: 8
    Dernier message: 25/10/2009, 09h42
  4. selection de plusieurs éléments d'une ListBox
    Par keks42 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/09/2008, 15h32
  5. Réponses: 10
    Dernier message: 23/02/2008, 19h01

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