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 :

Saut de lignes dans une listbox [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Points : 72
    Points
    72
    Par défaut Saut de lignes dans une listbox
    Bonjour à tous;

    J'ai une listbox que je rempli avec plusieurs éléments :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub CommandButton1_Click()
     
    'Suppression des valeurs dans les Textbox
    Interface.TextBox2.Value = ""
    Interface.TextBox3.Value = ""
    Interface.TextBox4.Value = ""
    Interface.TextBox5.Value = ""
    Interface.TextBox6.Value = ""
    Interface.TextBox7.Value = ""
    Interface.TextBox8.Value = ""
    Interface.TextBox9.Value = ""
    Interface.ListBox1.Clear
     
    'Parcours de la BDD
       For i = 2 To UBound(TAB_BDD, 1)
            If TAB_BDD(i, DIC_C_BDD("Question")) <> "" Then
                If Interface.ComboBox1 <> "" And Interface.TextBox1 <> "" Then
                                'Recherche par mot clé et par Famille de Question
                                If Interface.TextBox1.Value <> "" And Interface.ComboBox1.Value <> "" Then
                                    If TAB_BDD(i, DIC_C_BDD("Question")) Like "*" & Interface.TextBox1.Value & "*" And TAB_BDD(i, DIC_C_BDD("Famille Question")) Like "*" & Interface.ComboBox1.Value & "*" Then
                                         Interface.ListBox1.AddItem TAB_BDD(i, DIC_C_BDD("Question"))
                                    End If
                                End If
                Else
                                'Recherche par mot clé
                                If Interface.TextBox1.Value <> "" Then
                                    If TAB_BDD(i, DIC_C_BDD("Question")) Like "*" & Interface.TextBox1.Value & "*" Then
                                         Interface.ListBox1.AddItem TAB_BDD(i, DIC_C_BDD("Question"))
                                    End If
                                End If
     
                                'Recherche par Famille de Question
                                If Interface.ComboBox1.Value <> "" Then
                                    If TAB_BDD(i, DIC_C_BDD("Famille Question")) Like "*" & Interface.ComboBox1.Value & "*" Then
                                        Interface.ListBox1.AddItem TAB_BDD(i, DIC_C_BDD("Question"))
                                    End If
                                End If
                End If
            End If
        Next i
    End Sub
    J'aimerai trouvé un code permettant de sauter une ligne lorsque la lignes dépasse le champs de la listbox.
    J'ai trouvé un code qui ressemble à ce que je souhaite faire, mais je n'arrive pas a l'adapter, ici : https://blogs.msdn.microsoft.com/rah...listbox-items/

    Merci de votre aide, y'a beaucoup de mondes qui ont poser ce genre de question, mais la réponse n'est pas gagné d'avance.

    GK

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    C'est un programme en VB.net, adapté pour un ListBox .net. Il utilise l''héritage" pour modifier le listbox .net existant.

    VB6 - VBA ne supportent pas l'héritage.

    Ceci dit, il y a toujours moyen d'utiliser un ListBox .net avec Excel, mais c'est un processus qui demande des actions supplémentaires.

    Tu peux télécharger Visual Studio Community (gratuit à certaines conditions) et créer une application (alias add-in, add-on, complément ...), ou même un ActiveX, Excel en utilisant un listbox .net et ton bout de programme.
    Ou tu peux te faire un programme VB.net, avec une édition Community, ou même une édition Express, avec ton Listbox .net et qui piloterait Excel au moyen d'un semblant d'Automation. Mais c'est tout comme Automation entre Word et Excel, par exemple, sauf un peu d'adaptation des noms d'objets.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Développer n'est pas se contenter de chercher du code sur la toile et le recopier.
    Lorsque l'on pratique cette "manière", on s'efforce au moins de comprendre ce que l'on copie.
    Veux-tu par exemple bien m'expliquer l'utilité de la dernière de ces trois lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Interface.ComboBox1 <> "" And Interface.TextBox1 <> "" Then
                                'Recherche par mot clé et par Famille de Question
                                If Interface.TextBox1.Value <> "" And Interface.ComboBox1.Value <> "" Then
    Tu voudras ensuite bien expliquer clairement, techniquement et très précisément ce que tu entends exactement par :
    J'aimerai trouvé un code permettant de sauter une ligne lorsque la lignes dépasse le champs de la listbox.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Je vais me contenter de répondre à la question posée.

    Deux choix :
    1- On se contente du scroll horizontal
    Pour cela, il suffit que la listbox soit ... multicolonnes.
    Un exemple :
    un Userform avec dessus une ListBox1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Private Sub UserForm_Activate()
    Dim i&
     
        For i = 1 To 100
            ListBox1.AddItem "Ici nous allons faire de grandes lignes de texte pour pouvoir tester notre listBox... Valeur de liste " & i
        Next i
        ListBox1.ColumnCount = 2
        ListBox1.ColumnWidths = "400;0"
    End Sub
    2- on va imiter la ListBox grâce à un TextBox
    Pour cela, un userform avec dessus un TextBox1 :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Option Explicit
     
    Private Sub UserForm_Initialize()
    Dim i As Integer, texto As String
     
        For i = 1 To 100
          If i = 1 Then texto = Chr(1) & "Ici nous allons faire de grandes lignes de texte Valeur de liste 1" Else texto = texto & Chr(10) & Chr(1) & "Ici nous allons faire de grandes lignes de texte Valeur de liste " & i
        Next i
        With TextBox1
            .BackStyle = fmBackStyleTransparent
            .MultiLine = True
            .ScrollBars = fmScrollBarsVertical
            .Move 5, 5, Me.Width - 16, Me.Height - 40
            .Text = texto & Chr(1)
            .SetFocus
            .CurLine = 0
        End With
    End Sub
     
    Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim debSel As Long, finSel As Long, texto As String, txtSel As String, i As Integer
     
        texto = Replace(TextBox1.Text, Chr(10), "")
        debSel = TextBox1.SelStart
        finSel = TextBox1.SelStart
        Do While Mid(texto, debSel, 1) <> Chr(1)
            debSel = debSel - 1
        Loop
        If Mid(texto, finSel, 1) = Chr(1) Then finSel = finSel + 1
        Do While Mid(texto, finSel, 1) <> Chr(1)
            finSel = finSel + 1
        Loop
        For i = debSel + 1 To finSel - 1
            txtSel = txtSel & Mid(texto, i, 1)
        Next i
        TextBox1.SelStart = debSel
        TextBox1.SelLength = finSel - debSel - 1
        Sheets("Feuil1").Range("A1") = Trim(txtSel)
    End Sub
    EDIT : à mon avis la solution 1 est la meilleure, sans conteste.
    Cordialement,
    Franck

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    Développer n'est pas se contenter de chercher du code sur la toile et le recopier.
    Lorsque l'on pratique cette "manière", on s'efforce au moins de comprendre ce que l'on copie.
    Veux-tu par exemple bien m'expliquer l'utilité de la dernière de ces trois lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Interface.ComboBox1 <> "" And Interface.TextBox1 <> "" Then
                                'Recherche par mot clé et par Famille de Question
                                If Interface.TextBox1.Value <> "" And Interface.ComboBox1.Value <> "" Then
    Bonjour à tous, et merci pour ces éléments de réponses.
    Oui je viens de voir que j'ai une ligne inutile dans ta citation, je viens de la corriger,merci.

    En gros mon souci est illustré sur cette image : Dans le champs n°1, j'ai l'affichage actuel de ma listbox et j'aimerai obtenir un saut de ligne lorsque le nombre de caractère dépasse le champs de vision de ma listbox (j'aimerai obtenir le champs n°2) :
    Nom : image_9.png
Affichages : 1308
Taille : 12,5 Ko

    Il n'y a pas dans les propriétés de la listbox une option permettant de le faire ?
    Merci a pijaku, je vais testé ton code, je vous tiens au courant !

    Merci d'avance.

    Cordialement.

    GK

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Points : 72
    Points
    72
    Par défaut
    Bonjour et merci pour tes solutions pijaku.

    Pour résoudre mon problème j'ai simplement utilisé cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.ColumnWidths = "3000"
    Je passe le sujet en résolu !

    Merci encore !

    Cordialement.

    GK

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

Discussions similaires

  1. saut de ligne dans une MsgBox
    Par yoyoo dans le forum Access
    Réponses: 5
    Dernier message: 16/06/2006, 23h44
  2. Réponses: 9
    Dernier message: 29/03/2006, 16h40
  3. [AJAX] Saut de ligne dans une page html
    Par rapace dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/02/2006, 09h44
  4. Saut de ligne dans une bande d'une grille DevExpress
    Par xant dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/08/2005, 14h51
  5. Mettre une saut de ligne dans une balise alt
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 16/12/2004, 08h45

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