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 :

Creation d'un listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Par défaut Creation d'un listbox
    Bonjour,

    j'ai besoin de votre aide j'ai du mal à faire des listbox
    Je vous explique mon probleme.

    Dans mon classeur j'ai un onglet "Dépense" et un onglet "Analytique"
    Dans onglet "Analytique" j'ai des codes en format texte en colonne A sur 40 lignes (A2:A40)
    Dans l'onglet "Dépense" j'ai 20 colonnes sur 500 lignes et le code analytique en colonne 12.

    je souhaiterais que lorsque je clic un bouton de commande toutes les écritures du code analytique "A2" (par exemple code "test1") que toute les lignes dans l'onglet "dépense" ou le code "test1" apparaissent dans un userform à l'aide d'une listbox.


    J’espère être assez clair?

    J'ai lu beaucoup de sujet sur les listbox mais je n'arrive pas à comprendre.
    Pouvez-vous m'aider pour faire le code?
    Merci de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour tiralarc03,

    (Désolé pour le EDIT - j'avais lu trop rapidement ton explication, très explicite, à première vue ! )

    Bref, voici le code que je te propose :
    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
    Option Explicit
     
    Private Sub UserForm_Initialize()
     
    With Worksheets("Dépense")
        Me.ComboBox1.List = .Range(.Range("A2"), .Columns(1).Find("*", , , , , xlPrevious)).Value
    End With
    Me.ComboBox1.ListIndex = -1
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim oRng As Range
    Dim oCell As Range
    Dim oStr As String
    Dim oRng2 As Range
    Dim i As Integer
     
    Me.ListBox1.Clear
    With Worksheets("Analytique")
        Set oRng = FindAll(Me.ComboBox1.Value, .Columns(12), xlFormulas, xlWhole)
        For Each oCell In oRng
            Set oRng2 = .Range("A" & oCell.Row)
            oStr = oRng2
            For i = 1 To 19
                oStr = oStr & " | " & oRng2.Offset(0, i)
            Next i
            Me.ListBox1.AddItem oStr
        Next oCell
    End With
     
    End Sub
    J'ai créé un UserForm avec simplement une ComboBox et une (très) grande ListBox.
    Mon bouton de commande est rattaché, tout simplement à la macro pour lancer le UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub tiralarc03()
     
        UserForm1.Show
     
    End Sub
    Enfin, j'utilise la fonction "FindAll" (j'ai décidé de l'utiliser aujourd'hui ).
    Donc, il faut que tu l'insères dans un module (en dessous de la Sub ci-dessus, par exemple) :
    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
    Function FindAll(What, Optional SearchWhat As Variant, _
            Optional LookIn, _
            Optional LookAt, _
            Optional SearchOrder, _
            Optional SearchDirection As XlSearchDirection = xlNext, _
            Optional MatchCase As Boolean = False, _
            Optional MatchByte, _
            Optional SearchFormat) As Range
        'LookIn can be xlValues or xlFormulas, _
         LookAt can be xlWhole or xlPart, _
         SearchOrder can be xlByRows or xlByColumns, _
         SearchDirection can be xlNext, xlPrevious, _
         MatchCase, MatchByte, and SearchFormat can be True or False. _
         Before using SearchFormat = True, specify the appropriate settings _
         for the Application.FindFormat object, e.g., _
         Application.FindFormat.NumberFormat = "General;-General;""-"""
        Dim aRng As Range
        If IsMissing(SearchWhat) Then
            On Error Resume Next
            Set aRng = ActiveSheet.UsedRange
            On Error GoTo 0
        ElseIf TypeOf SearchWhat Is Range Then
            If SearchWhat.Cells.Count = 1 Then
                Set aRng = SearchWhat.Parent.UsedRange
            Else
                Set aRng = SearchWhat
                End If
        ElseIf TypeOf SearchWhat Is Worksheet Then
            Set aRng = SearchWhat.UsedRange
        Else
            Exit Function                       '*****
            End If
        If aRng Is Nothing Then Exit Function   '*****
        Dim FirstCell As Range, CurrCell As Range
        With aRng.Areas(aRng.Areas.Count)
        Set FirstCell = .Cells(.Cells.Count)
            'This little 'dance' ensures we get the first matching _
             cell in the range first
            End With
        Set FirstCell = aRng.Find(What:=What, After:=FirstCell, _
            LookIn:=LookIn, LookAt:=LookAt, _
            SearchDirection:=SearchDirection, MatchCase:=MatchCase, _
            MatchByte:=MatchByte, SearchFormat:=SearchFormat)
        If FirstCell Is Nothing Then Exit Function          '*****
        Set CurrCell = FirstCell
        Set FindAll = CurrCell
        Do
            Set FindAll = Application.Union(FindAll, CurrCell)
            'Setting FindAll at the top of the loop ensures _
             the result is arranged in the same sequence as _
             the  matching cells; the duplicate assignment of _
             the first matching cell to FindAll being a small _
             price to pay for the ordered result
            Set CurrCell = aRng.Find(What:=What, After:=CurrCell, _
                LookIn:=LookIn, LookAt:=LookAt, _
                SearchDirection:=SearchDirection, MatchCase:=MatchCase, _
                MatchByte:=MatchByte, SearchFormat:=SearchFormat)
            'FindNext is not reliable because it ignores the FindFormat settings
        Loop Until CurrCell.Address = FirstCell.Address
    End Function
    Pour mémoire, c'est une fonction "connue" du Web dont les versions peuvent légèrement varier.

    Bref, n'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Par défaut
    Bonjour,
    Merci de ta réponse.

    Kimy_Ire;8129180]Bonjour tiralarc03,

    (Désolé pour le EDIT - j'avais lu trop rapidement ton explication, très explicite, à première vue ! )

    Bref, voici le code que je te propose :
    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
    Option Explicit
     
    Private Sub UserForm_Initialize()
     
    With Worksheets("Dépense")
        Me.ComboBox1.List = .Range(.Range("A2"), .Columns(1).Find("*", , , , , xlPrevious)).Value
    End With
    Me.ComboBox1.ListIndex = -1
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim oRng As Range
    Dim oCell As Range
    Dim oStr As String
    Dim oRng2 As Range
    Dim i As Integer
     
    Me.ListBox1.Clear
    With Worksheets("Analytique")
        Set oRng = FindAll(Me.ComboBox1.Value, .Columns(12), xlFormulas, xlWhole)
        For Each oCell In oRng
            Set oRng2 = .Range("A" & oCell.Row)
            oStr = oRng2
            For i = 1 To 19
                oStr = oStr & " | " & oRng2.Offset(0, i)
            Next i
            Me.ListBox1.AddItem oStr
        Next oCell
    End With
     
    End Sub
    non le code analytique et dans l'onglet "analytique" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Worksheets("Analytique")
        Me.ComboBox1.List = .Range(.Range("A2"), .Columns(1).Find("*", , , , , xlPrevious)).Value
    End With
    Me.ComboBox1.ListIndex = -1
    End Sub
    Est-ce que cela change quelque chose d'autre?

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Hum... D'après ma compréhension, tu as des codes dans l'onglet "Dépense" qui sont repris dans l'onglet "Analytique" / colonne L.
    Quand tu sélectionnes un code repris de l'onglet "Dépense", tu vas chercher ses correspondances dans l'onglet "Analytique".

    Bref, n'hésite pas à être plus précis avec un Workflow peut-être...

    Cordialement,
    Kimy

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Par défaut
    Non c'est l'inverse j'ai les codes dans l'onglet "Analytique" qui sont repris dans l'onglet "Depenses" / colonne L.
    Quand je sélectionne un code repris de l'onglet "Analytique", et je vais chercher ses correspondances dans l'onglet "Depenses".

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Donc tu as juste à changer ces deux lignes :
    1. Dans le Private Sub UserForm_Initialize(), With Worksheets("Dépense") par With Worksheets("Analytique"),
    2. et inversement dans le Private Sub ComboBox1_Change().

    N'hésite pas à me dire si ça ne fonctionne pas !

    Cordialement,
    Kimy

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

Discussions similaires

  1. [XL-2007] creation d'une listbox
    Par chris09300 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/02/2011, 21h02
  2. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50
  3. creation d'une file listbox
    Par calimero91 dans le forum Access
    Réponses: 5
    Dernier message: 24/05/2006, 15h40
  4. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  5. Creation d une clee dans la registry en VC++
    Par rico27fr dans le forum MFC
    Réponses: 4
    Dernier message: 30/05/2002, 12h36

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