Pb listbox

Bonjour,

Bon vu que je n'ai pas eu de réponses à mon anciennne question je vais essayer de la reformuler plus clairement .

Sur vb g une feuille avec une list box et un bouton . J'aimerai lorsque je selectionne plusieurs valeurs de la list box et que j'appui sur le bouton , que ces valeurs s'affichent les unes en dessous des autres dans excel à partir de la case B6 !!
Pour le moment je n'arrive à afficher qu'une valeur même si j'en sélectionne plusieurs et ça m'ennerve !! svp aidez moi c urgent et ça me bloque pour la suite de mon travail!!

Merci..
Configuration: Windows XP
Internet Explorer 6.0

18 réponses

  1. bonjour

    Inspires toi de ça :

    Private Sub cmd_Click()
    Dim i As Integer
    Dim j As Integer
    
        j = 6
    For i = 0 To List1.ListCount - 1
        If List1.Selected(i) Then
            Worksheets("Feuil1").Range("B" & j).Value = Me.List1.List(i)
            j = j + 1
        End If
    Next i
    End Sub
    


    ;o)

    Polux
    1. merci beaucoup ça marche !!! Il me reste plus qu'à trouver comment ajouter des lignes si le nombre de valeurs selectionnées est supérieur à 3 ...vi je débute hein alors faut pas se moquer lol
      1. Avec cette procédure ta sélection peut être presque infinie ...

        ;o)

        Polux
        1. Suite du problème...j'arrive pas à insérer des nouvelles lignes grrr ! J'aimerai que lorsqu'on atteint la cellule b9 ( donc si le nombre de valeur est supérieur à 3 ) ben on insère une ligne ! ( ex : donc si le nombre de valeurs choisis est 5 il y aura 2 lignes insérer en + )

          Je sais c tout bète mais jtrouve vraiment pas :/

          help !$
          1. Bonjour,

            SI tes cellules sont vides, avec le code que je t'ai donné ça suffit. Si le cellule B10 contient une valeur il faut effectivement insérer les lignes supplémentaires. Il faut faire ceci à la place de la procédure donnée précédemment.

            Private Sub cmd_Click()
            Dim i As Integer
            Dim j As Integer
            
                j = 6
            For i = 0 To List1.ListCount - 1
                If j >= 9 Then
                    Worksheets("Feuil1").Rows(( j + 1) & ":" & (j + 1)).Select
                    Selection.Insert Shift:=xlDown
               End If
               If List1.Selected(i) Then
                   Worksheets("Feuil1").Range("B" & j).Value = Me.List1.List(i)
                    j = j + 1
                End If
            Next i
            End Sub


            J'ai pas testé mais ça devrait marcher

            ;o)

            Polux
            1. Content pour toi si ça marche :o)

              bon courage pour la suite

              ;o)

              Polux
              1. Je rencontre à nouveau un problème...

                J'ai donc une useform avec une listbox et un bouton. J'ai donc ds ma useform le code suivant :
                ListBox1.AddItem "xxx"
                ListBox1.AddItem "xyyxx"
                ListBox1.AddItem "xyyyxx"
                etc....

                J'ai réussi à faire de sorte que quand je sélectionne un élément de ma listbox , cet élément s"affiche dans excel parfaitement ( c'était mes question précédentes ) . Mais maintenant j'aimerai attribuer des Valeurs à chaque éléments ! Par exemple dire pour le premier élément de la listbox qu'il vaut 5 jours , le second élément de la listbox vaut 3 jours etc.. Et lorsque je sélectionne un élément(ou plusieurs) , il va s'afficher comme d'habitude en B6 mais j'aimerai que s'ajoute sur la même ligne en g6 sa valeurs qui est de 5 jours !

                Les jours ne doivent pas apparaître dans ma listebox mais seulement ds mon code et sur EXCEL !

                EXEMPLE: j'ai attribué 5 jours à lélément 1 de ma listebox , 3jours à l'élément2, 4 jours à lément3, 10jours à lélément4.
                Je séléctionne l'élément 1 et 3 de ma list box et appui sur OK.
                Je veus obtenir comme résultat : en B6 : le nom du premier élément de la listbox et en G6 "5jours" . Et en C7 le nom du troisème élément de la list box avec en G7 son nombre de jours correspondant cad : "4jours"

                Comment faire cela ??
                Comment attribué une valeur à un élément de ma list box , sachant que c'est une séléction multiple !

                Le code de mon bouton est celui ci pour l'instant (celui qui permet dafficher mes éléments sélectionner ):

                Private Sub CmdAjouter1_Click()
                Dim i As Integer
                Dim j As Integer

                j = firstlinetowrite

                With ListBox1
                For i = 0 To .ListCount - 1
                If .Selected(i) Then
                Do While Worksheets("EstimChargeSSet").Range("B" & j).Value <> ""
                j = j + 1
                Loop
                If Not doesExist(.List(i)) Then
                If j > addline Then
                Worksheets("EstimChargeSSET").Cells(j, 1).EntireRow.Insert
                End If
                Worksheets("EstimChargeSSet").Range("B" & j).Value = "xxxx"
                Worksheets("EstimChargeSSet").Range("C" & j).Value = .List(i)
                j = j + 1
                End If
                End If
                Next
                End With
                End Sub

                HELP HELP
                1. bonjour,

                  Pour faire ce que tu demandes je ferais une fonction avec comme paramètre d'entrée la valeur de ta listbox et en paramètre de retour le résultat issu d'un select case. Par exemple :

                  Public Function ReturnNbJour(Byval str As Variant) As String
                       Select Case str
                          case "xxx"
                                 ReturnNbJour = "5 jours"
                          case "xyyxx"
                                 ReturnNbJour = "3 jours"
                  ' etc ... pour chaque élément de ta listbox
                       End Select
                  End function


                  Ensuite dans le bouton CmdAjouter1_Click(), tu ajoutes :
                  Worksheets("EstimChargeSSet").Range("G" & j).Value = ReturnNbJour(.List(i))

                  Je pense que ça doit résoudre ton blème.

                  ;o)

                  polux
                  1. bonjour !
                    Merci polux pour ta fonction returnNbJour , elle m' a bien inspirée et j'ai réussi à faire ce que je souhaitai !

                    Je rencontre un nouveau petit problème :$

                    Toujours avc ma listbox et excel lol . Alors enfaite j'ai crée un bouton Supprimer . Et j'aimerai ,en selectionnant une valeur de ma listbox et en appuyant sur Supprimer , que ça recherche la valeur selectionné dans excel et si on la trouve ben ça supprime la ligne !!!

                    Voila mon code, qui ne reconnait pas mon delete... :

                    Private Sub cmdSupprimer_Click()
                    Dim i As Integer
                    Dim j As Integer
                    Dim first As Integer
                    Dim last As Integer
                    j = 11

                    With ListBox1
                    For i = 0 To .ListCount - 1

                    If .Selected(i) Then

                    If Worksheets("EstimChargeSSE-CTP").Range("C" & j).Value = .List(i) Then
                    Worksheets("EstimChargeSSE-CTP").Range("C" & j).Value = Delete

                    End If
                    End If
                    Next
                    End With
                    End Sub
                    1. bonjour sixty,

                      Remplace :

                      Worksheets("EstimChargeSSE-CTP").Range("C" & j).Value = Delete

                      par :

                      Worksheets("EstimChargeSSE-CTP").Range("C" & j).Value = ""

                      Mais là tu ne vas qu'effacer la valeur de la cellule.

                      Je n'ai pas Excel sous la main là :s ... et je n'ai pas en tête la méthode ... mais je vais regarder comment sélectionner la ligne et la supprimer cet aprem ou ce soir et je te poste la solution ...

                      ;o)

                      polux
                      1. re

                        pffffff

                        c'est simple ... j'avais la tête ailleur.

                        Remplace :

                        Worksheets("EstimChargeSSE-CTP").Range("C" & j).Value = Delete

                        par :

                        Worksheets("EstimChargeSSE-CTP").Range("C" & j).EntireRow.Delete

                        voilà ... ça doit marcher

                        ;o)

                        Polux
                        1. Oui, merci, enfaite moi aussi j'ai trouvé la solution 2 min après avoir posté le message lol . dsl

                          Sinon, j'ai deux autres petits problèmes ( décidément, en viendrais-je à bout ?? lol )

                          _lorsque je supprime des lignes et que je veus en rajouter cela engendre des problèmes ( selon le nombre de lignes que j'ai supprimer) sur des ordres que j'ai donné sur les lignes qui suivent !!! ( par exemple aux endroits ou ça devait rajouter des lignes ca ne le fait plus !)

                          _ Ensuite J'ai sur certaines lignes des formules, et lorsque j'ajoute des nouvelles lignes forcément les formules n'apparaissent pas..comment les faires apparaître ??

                          vOilou

                      2. re

                        pour recopier la formule il faut faire :

                        Worksheets("Feuil1").Rows(i).FillDown

                        i étant le numéro de la ligne à recopier ...

                        Pour le reste je ne sais pas :s

                        Si tu peux, fais moi passer ton fichier par msn ce soir, je regarderai ...

                        ;o)

                        Polux
                        1. C'est possible de sélectionner plusieurs listbox en même temps ? car j'ai un même code pour les 5 listbox et j'aimerai faire une procédure !
                          1. Bonjour,

                            Non je ne crois pas que l'on puisse faire un selection multiple sur plusieurs listbox en même temps ... mais on peut faire une procédure commune pour chaque listbox ...

                            ;o)

                            Polux
                            1. ué c'est ce que j'ai essayé de faire..." call procedure x " ms bon ça marche pas ! tampis g recopié le code 5 fois :)