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 :

traitement d'une selection multiple de listbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    Par défaut
    Bonjour à tous,

    J'ai un souci avec une listbox à selection multiple.
    Je voudrais pouvoir traiter les informations séléctionnées de ma Listbox :
    J'ai vu un code sur ce forum qui marche mais je n'arrive pas à l'adapter.
    Voici le code (édité par DanielC sur un autre post ):.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Me.ListBox1
            For i = 0 To .ListCount
                If .Selected(i) Then MsgBox .List(i)
            Next
        End With
    J'ai voulu adapter .
    MsgBox .List(i)
    Voici ce que j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With U_Fact.ListBox1
            For i = 0 To .ListCount
                If .Selected(i) Then c = .List(i)            
                Set rc = SDC.Columns(1).Find(What:=c, LookAt:=xlPart)            
                SDC.Cells(rc.Row, 17).Copy Fl.Cells(randes, 8)
                SDC.Cells(rc.Row, 5).Copy Fl.Cells(randes, 10)            
                '.Selected(i).Value = Fl.Cells(randes, 9).Value
                Set rc = Nothing
            Next
        End With
    Au débogage .List(i) a bien une valeur mais c et rc sont = "" du coup j'ai une erreur.
    Je voudrais me servir des valeurs selectionnées de ma listbox pour récupérer et copier des feuilles SDC à FL des données...
    Si quelqu'un a une méthode plus simple et efficace que la mienne je suis preneur Merci.

    Chaque valeur exposée dans la listBox est un numéro de palette.
    Chacun de ces numéros correspond à une ou plusieurs ligne de la feuille SDC (suivi de commande).
    J'aimerai qu'une fois que l'opérateur a sélectionné le ou les numéros de palette, les valeurs de la ligne correspondant à ce ou ces numéros sur la feuille SDC soient copiées dans la feuille Fl Facturation prévisionnelle.

    Je pense que sur ce forum au moins une personne a déjà rencontré ce problème...)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    Par défaut
    Bonjour,
    j'essaie de m'en sortir avec mon problème mais franchement je n'y arrive pas
    j'ai écrit ceci mais j'ai un message de type l'indice n'appartient pas à la sélection sur c(i) en ayant déclaré c() as string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To ListBox1.ListCount - 1    
                If ListBox1.Selected(i) = True Then c(i) = ListBox1.List(i)    
    Next i
    comment récupérer les valeurs de la listeBox1 selectionnées (dont le nombre varie) pour pouvoir à partir de celles ci faire une recherche de ces valeurs sur une autre feuille?

    ça ne doit pas être compliqué je tourne autour du pot mais je n'y arrive pas.

    I need some Help... PLz

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    Par défaut
    Je m'acharne en espérant que quelqu'un me trouve la bouteille à la mer...

    J'ai écrit ceci dans mon userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub B_OK_Click()
    satisf1 = True
     For Val = 0 To U_Fact.ListBox1.ListCount - 1
                If ListBox1.Selected(Val) = True Then c(Val) = ListBox1.List(Val)
     Next Val
    cbo1 = ComboBox1.Text
    cbo2 = ComboBox2.Text
    cbo3 = ComboBox3.Text
    cbo4 = TextBox4.Text
    cbo5 = TextBox5.Text
    Unload Me
    End Sub
    Et ça dans le module
    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
    If satisf1 = True Then
     For Each c(Val) In U_Fact
     If Not c(Val) = "" Then
     SDC.Activate
                Set rc = SDC.Columns(1).Find(What:=c(Val), LookAt:=xlPart)
                Fl.Cells(randes, 8) = Application.WorksheetFunction.SumIf(SDC.Columns(17), c(Val), SDC.Columns(1))
                Fl.Cells(randes, 10) = Application.WorksheetFunction.SumIf(SDC.Columns(17), c(Val), SDC.Columns(1))
          End If
    Next c(Val)
     
     Fl.Cells(randes, 12).Value = cbo1                         'Chèque ou espèce
     Fl.Cells(randes, 13).Value = cbo2                         'statut complete /partielle
     Fl.Cells(randes, 14).Value = cbo3                         'Vu par tel/mail/pers.
     Fl.Cells(randes, 11).Value = CCur(cbo4)                    'Versemment
     Fl.Cells(randes, 9).Value = CInt(cbo5)                     'Nombre de palette
    End If
    Le problème est qu'il n'accepte pas que pour le For Each c(Val), c(Val) soit un string...
    To be continued...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    Par défaut
    Ps : j'ai essayé de mettre le code complet dans le Userform mais il ne reconnaît plus le n° de ligne du module lié à d'autres opération...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Fl.Cells(randes, 8) = Application.WorksheetFunction.SumIf(SDC.Columns(17), c(Val), SDC.Columns(1))
                Fl.Cells(randes, 10) = Application.WorksheetFunction.SumIf(SDC.Columns(17), c(Val), SDC.Columns(1))
    Je mets le code complet du module au cas où :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub Fonctionpalettelistbox()
     
    Set Flcd = ThisWorkbook.Worksheets("CC2012")
    Set SDC = ThisWorkbook.Worksheets("Suivi de commande")
    Set Bd = ThisWorkbook.Worksheets("Bd stock")
    Set Fl = ThisWorkbook.Worksheets("facturation prévisionnelle")
     
    'Recherche de Liste de Listbox
     
          S_DC.Show
     If satisf1 = False Then Exit Sub
     
     Flcd.Activate
    Set rc1 = Flcd.Columns(7).Find(What:=c1, LookAt:=xlPart)
    lNx = rc1.Row
     
                                                                            Fl.Activate
    ' Remplissage de la feuille de facturation prévisionnelle.
    Range("A1").Select
    If Range("A2").Value <> "" Then ActiveCell.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
          randes = ActiveCell.Row
          ActiveCell.Offset(0, 1).Value = Flcd.Cells(lNx, 8)            'Nom du client
          ActiveCell.Offset(0, 2).Value = rc1.Value                  'Numéro de commande
          ActiveCell.Offset(0, 3).Value = Flcd.Cells(lNx, 9)            'Nom du chantier
          ActiveCell.Offset(0, 4).Value = Flcd.Cells(lNx, 5)            'statut(en cours/soldé)
          ActiveCell.Offset(0, 5).Value = Date                          'Date
          Flcd.Cells(lNx, 1).Copy Fl.Cells(randes, 1)                   'Numéro de Devis
     
     U_Fact.Show
     
    If satisf1 = True Then
     For Each c(Val) In U_Fact
     If Not c(Val) = "" Then
     SDC.Activate
                Set rc = SDC.Columns(1).Find(What:=c(Val), LookAt:=xlPart)
                Fl.Cells(randes, 8) = Application.WorksheetFunction.SumIf(SDC.Columns(17), c(Val), SDC.Columns(1))
                Fl.Cells(randes, 10) = Application.WorksheetFunction.SumIf(SDC.Columns(17), c(Val), SDC.Columns(1))
          End If
    Next c(Val)
     
     Fl.Cells(randes, 12).Value = cbo1                         'Chèque ou espèce
     Fl.Cells(randes, 13).Value = cbo2                         'statut complete /partielle
     Fl.Cells(randes, 14).Value = cbo3                         'Vu par tel/mail/pers.
     Fl.Cells(randes, 11).Value = CCur(cbo4)                    'Versemment
     Fl.Cells(randes, 9).Value = CInt(cbo5)                     'Nombre de palette
    End If
    Set rc = Nothing
    Set Flcd = Nothing
    Set SDC = Nothing
    Set Bd = Nothing
    Set Fl = Nothing
     
    End Sub
    et le code complet de mon Userform U_Fact
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Private Sub B_Annul_Click()
    satisf = False
    Unload Me
    End Sub
     
    Private Sub B_OK_Click()
     
    satisf1 = True
     For Val = 0 To U_Fact.ListBox1.ListCount - 1
                If ListBox1.Selected(Val) = True Then c(Val) = ListBox1.List(Val)
     Next Val
    cbo1 = ComboBox1.Text
    cbo2 = ComboBox2.Text
    cbo3 = ComboBox3.Text
    cbo4 = TextBox4.Text
    cbo5 = TextBox5.Text
     
    Unload Me
    End Sub
     
     
    Private Sub Listbox1_Dblclick(ByVal Cancel As MSForms.ReturnBoolean)
        'Remarque:
        'La propriété RowSource n'accepte pas cette méthode
        ListBox1.RemoveItem (ListBox1.ListIndex)
    End Sub
     
    Private Sub UserForm_Activate()
    ComboBox1.AddItem "Chèque"
    ComboBox1.AddItem "Carte B"
    ComboBox1.AddItem "Espèce"
    If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem ComboBox1.Text
    ComboBox2.AddItem "Partielle"
    ComboBox2.AddItem "Complète"
    If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem ComboBox2.Text
    ComboBox3.AddItem "Vu"
    ComboBox3.AddItem "Tel"
    ComboBox3.AddItem "Mail"
    If ComboBox3.ListIndex = -1 Then ComboBox3.AddItem ComboBox3.Text
     
    End Sub
    Private Sub UserForm_Initialize()
     
        Dim Cell As Range
        Dim Unique As New Collection
        Dim Valeur As Range
        Dim IX As Integer
     
    Set Flcd = ThisWorkbook.Worksheets("CC2012")
    Set SDC = ThisWorkbook.Worksheets("Suivi de commande")
    Set Fl = ThisWorkbook.Worksheets("facturation prévisionnelle")
     
    Me.ListBox1.MultiSelect = fmMultiSelectMulti
                                                                    SDC.Activate
    For IX = 3 To SDC.Range("A" & SDC.Rows.Count).End(xlUp).Row
            On Error Resume Next
    'Définir la plage conditionnée
     
        If SDC.Cells(IX, 18) = Flcd.Cells(lNx, 1) And _
        SDC.Cells(IX, 2).Value = rc1.Value And _
        SDC.Cells(IX, 15).Value = "" Then
    'Stocke les données dans une collection
    '(La collection n'accepte que des données uniques et permet donc de filtrer facilement les doublons).
                Unique.Add SDC.Cells(IX, 1), CStr(SDC.Cells(IX, 1))
        End If
     Next
     
            On Error GoTo 0
     
        'Boucle sur le contenu de la collection pour alimenter la ListBox
        For Each Valeur In Unique
            Me.ListBox1.AddItem Valeur
        Next Valeur
     
    End Sub

Discussions similaires

  1. Selection multiple dans Listbox
    Par Pierre67 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/12/2008, 17h48
  2. Post d'une select multiple
    Par Chikh001 dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2008, 08h56
  3. Export données issue d'une selection multiple
    Par olam37 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/07/2007, 16h26
  4. faire une selection multiple de feuilles en fonction de variables
    Par blackhelmet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 10h32
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

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