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 :

Alimenter Listbox à partir de textboxs [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Alimenter Listbox à partir de textboxs
    Bonjour,

    J'effectue des saisies dans des textboxs, je voudrais avec un bouton les transférer dans une listbox.

    M'inspirant des certains fichiers et tutoriel, je suis parvenu à faire ceci sur l'userform2, à l'initialisation sa listbox est vide.

    Par contre celui qui me concerne, à l'initialisation sa listbox n'est pas vide (propriété rowsource= bd qui est une plage dynamique nommée).

    Je n'ai pas compris pourquoi, ça fonctionne pour l'un et pas pour l'autre. C'est surement en rapport avec la source de la listbox.

    Si c'est ça, alors quelle serait la bonne solution pour y parvenir.

    En fait, je voudrais rajouter des items à la listbox en utilisant un bouton. Puis avant de fermer l'userform, transférer toute la listbox sur la feuille.

    en vous remerciant.
    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
    Private Sub CmdValider_Click()
        i = UserForm2.ListBox1.ListCount
     
        UserForm2.ListBox1.AddItem
        UserForm2.ListBox1.Column(0, i) = TextBox1
        UserForm2.ListBox1.Column(1, i) = TextBox2
        UserForm2.ListBox1.Column(2, i) = TextBox3
     
        'vider textboxs------------
        For i = 1 To 3
            UserForm2.Controls("textbox" & i) = ""
        Next
     
        UserForm2.TextBox1.SetFocus
     
    End Sub
     
    Private Sub UserForm_Initialize()
    'UserForm2
        With ListBox1
            .ColumnCount = 3
            .ColumnWidths = "50;50;50"
        End With
    End Sub
    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
    Private Sub CmdExit_Click()
        Unload Me
    End Sub
     
    Private Sub CmdVersListBox_Click()
        i = UserForm1.ListBox1.ListCount
     
        UserForm1.ListBox1.AddItem
        ListBox1.Column(0, i) = TextBox1
        ListBox1.Column(1, i) = TextBox2
        ListBox1.Column(2, i) = TextBox3
        ListBox1.Column(3, i) = TextBox4
        ListBox1.Column(4, i) = TextBox5
        ListBox1.Column(5, i) = TextBox6
        ListBox1.Column(6, i) = TextBox7
        ListBox1.Column(7, i) = TextBox8
        ListBox1.Column(8, i) = TextBox9
        ListBox1.Column(9, i) = TextBox10
        ListBox1.Column(10, i) = TextBox11
        ListBox1.Column(11, i) = TextBox12
        ListBox1.Column(12, i) = TextBox13
     
        For i = 1 To 13
            Controls("textbox" & i) = ""
        Next
     
        'ListBox1.Selected(ListBox1.ListCount - 1) = True       'selectionner dernière item de la listbox
     
        TextBox3.SetFocus
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Cathodique, bonjour le forum,

    Chaque fois que dans ce forum j'ose dire que la propriété [RowSource] d'une ComboBox/ListBox c'est de la m... je me fais reprendre. Il n'empêche que si tu alimentes ta ListBox1 dynamiquement (en effaçant bien sûr sa propriété {RowSource]) avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Me.ListBox1.List = Range("BD").Value
    End Sub
    Tu n'auras plus de problème. Seul préjudice, la propriété [ColumnHeads] qui ne fonctionne plus mais tu peux facilement la remplacer par des labels...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir Thautheme,

    Je te suis très reconnaissant. En effet, pour la propriété ColumnHeads je peux m'en passer.

    C'est vraiment super, ça fait 3 jours que je cherche une solution.

    Pourrais-tu m'orienter pour transférer tous les items de la listbox vers la BD.

    Encore merci, bon week-end.

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Cathodique, bonsoir le forum,

    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CmdListToXl_Click()    'transfert listbox vers feuille xl
    Dim BD As Object
    Dim PLV As Integer
     
    Set BD = Sheets("bd")
    PLV = BD.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
    For I = 1 To 13
        BD.Cells(PLV, I).Value = Me.Controls("TextBox" & I).Value
    Next I
    Unload Me
    End Sub

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Thautheme,
    Chaque fois que dans ce forum j'ose dire que la propriété [RowSource] d'une ComboBox/ListBox c'est de la m... je me fais reprendre.
    Je trouve très excessif ce qualificatif pour cette propriété qui est d'une simplicité quant à son utilisation.
    En effet mis à part le chargement d'une liste avec condition, il me semble que cette propriété offre de nombreux avantages et j'aimerais connaître la raison qui te pousse à décrier son utilisation.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Invité
    Invité(e)
    Par défaut
    Rebonsoir Tautheme,

    Je te remercie beaucoup mais ce n'est pas les textboxs que je voulais transférer. Je voudrais transférer tout le contenu de la ListBox.

    Je sais mettre une plage de la feuille excel dans un tableau mais pas une listbox. Enfin, j'ai pensé aux tableaux car le transfert est très rapide.

    Encore merci.

    je me suis inspiré d'un code pour transférer toutes les lignes de la listbox avec 2 boucles.

    par contre je n'ai pas réussi en utilisant un tableau. voici le code ça pourrait servir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CmdListToXl_Click()    'transfert listbox vers feuille xl
    Dim i As Long, j As Long
    i = UserForm1.ListBox1.ListCount
     
    For i = 0 To ListBox1.ListCount - 1
    For j = 1 To 13
        Cells(i + 2, j) = ListBox1.List(i)
        Cells(i + 2, j) = ListBox1.Column(j - 1, i)
        Next j
    Next i
    End Sub
    Un coup de pousse pour le transfert avec tableau si c'est faisable. Merci.

    Bonne soirée à tous!

    une autre méthode mais avec les tableaux que je ne maitrise pas beaucoup, niet je n'ai rien pu faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub ListBoxToSheet()
    Worksheets(1).Range("A2").Resize(ListBox1.ListCount, 13).Value = ListBox1.List()
    End Sub
    J'ai trouvé ce code mais je n'arrive pas à l'adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub CopyFromArray()
    Dim TheArray As Variant
    Dim TheRange As Range
     
    TheArray = Me.ListBox1.List
     
    Set TheRange = Range(Cells(2, 1), Cells(UBound(TheArray) + 1, 1))
     
    TheRange = TheArray
    End Sub
    j'ai executé pas à pas et utilisé la fenêtre des variables locales, ayant 3 lignes dans la listbox (en haut du module option base 1)

    on a TheArray(1) ------> variant(0 to 12)
    TheArray(2) ------> variant(0 to 12)
    TheArray(3) ------> variant(0 to 12)
    Alors je n'ai pas compris grand chose, je pense que c'est au niveau de la ligne set TheRange que ça cloche.

    Merci de me donner un coup de pouce.

    Bonne soiréeNom : fenetre variables locales.JPG
Affichages : 1625
Taille : 26,2 Ko
    Dernière modification par AlainTech ; 01/01/2015 à 20h34. Motif: Fusion de 3 messages

  7. #7
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    @ Philippe

    Tu as raison Philippe j'ai sans doute été excessif. Pourtant au départ je voulais écrire grosse m... Mais je me suis dit que là, ça serait "excessif"... Je plaisante mais je considère que la propriété [RowSource] ne peut-être utilisée qu'avec des données fixes (les jours de la semaines, les mois, etc). Dès qu'il s'agit de données dynamique je la bannis... Tu me demandes quelle raison me pousse a décrier cette méthode et je te réponds : ce fil par exemple !

    @ Cathodique
    Ton code modifié :

    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
    Private Sub UserForm_Initialize()
    Me.ListBox1.List = Range("bd").Value
    End Sub
     
    Private Sub CmdVersListBox_Click()
    Dim I As Integer
     
    UserForm1.ListBox1.AddItem
    For I = 0 To 12
        ListBox1.Column(I, Me.ListBox1.ListCount - 1) = Me.Controls("TextBox" & I + 1).Value
        Controls("textbox" & I + 1).Value = ""
    Next
    End Sub
     
    Private Sub CmdListToXl_Click()    'transfert listbox vers feuille xl
    Dim tc As Variant
     
    tc = Me.ListBox1.List
    Sheets("bd").Range("A2").Resize(UBound(tc, 1) + 1, UBound(tc, 2) + 1) = tc
    End Sub
     
    Private Sub CmdExit_Click()
        Unload Me
    End Sub
    Toutefois il me semble que tu prends le problème à l'envers...

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

Discussions similaires

  1. [Débutant] Remplir un Listbox à partir d'un textbox
    Par samiasamia dans le forum VB.NET
    Réponses: 3
    Dernier message: 12/04/2013, 19h41
  2. [XL-2007] Remplissage de 2 Listbox à partir de n Textbox et d'une Listbox
    Par JmVBA dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/11/2012, 17h06
  3. Trier une Listbox à partir d'une Textbox
    Par Aquarium dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/08/2010, 14h15
  4. [XL-2002] Alimenter une listbox à partir d'une autre sur une feuille différente
    Par pitoumad dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2010, 16h22
  5. Réponses: 3
    Dernier message: 14/06/2008, 16h10

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