XL 2021 Insertions de plus de 10 textbox et combobox dans listbox

Bana XIII

XLDnaute Nouveau
Bonjour à tous, je travaille sur une macro depuis le matin, et même ChatGPT n'a pu m'aider.

J'ai sur mon formulaire 14 textbox et 2 combobox qui me servent à renseigner les données et informations des salariés.
Nous avons 10 salariés dans la boite et donc je dois insérer leur données 10 fois dans la listbox avant de tout sauvegarder
dans la feuille correspondante.
Ne pouvant y arriver avec la méthode AddItem, j'ai essayé la méthode List sans plus de succès. Voici mon code, Malheureusement
il ne marche pas, j'ai le message "Erreur d'exécution 381" impossible de définir la propriété list.
VB:
Dim i As Integer
Liste_Données.ColumnCount = 16
   For i = 1 To Total
        ' Récupérer le numéro de ligne à insérer
        Dim Ligne As Integer
        Ligne = Liste_Données.ListCount
        
        ' Insérer les données des TextBox dans les colonnes correspondantes
        Liste_Données.List(Ligne, 0) = Me.Txt_Période1.Value
        Liste_Données.List(Ligne, 1) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 2) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 3) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 4) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 5) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 6) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 7) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 8) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 9) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 10) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 11) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 12) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 13) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 14) = Me.Txt_Période2.Value
        Liste_Données.List(Ligne, 15) = Me.Txt_Période2.Value
        ' Ajoutez ici les valeurs pour les autres TextBox
        
        
        ' Incrémenter le numéro de ligne
        Liste_Données.AddItem
    Next i

Entre temps j'ai eu aussi à essayer le code ci-dessous qui m'insère bien les 16 colonnes, mais malheureusement l'insertion à la suite ne marche pas;
A chaque foi la listbox se vide pour insérer une nouvelle ligne de 16 colonnes à la fois

Dim i As Integer
Dim Total As Integer
Dim Données() As Variant

' Spécifiez ici le nombre total de fois que vous souhaitez insérer les données
Total = 1

' Définir la taille du tableau de données
ReDim Données(1 To Total, 1 To 16)

' Boucle pour récupérer les données des TextBox et ComboBox
For i = 1 To Total
' Insérer les données dans le tableau
Données(i, 1) = Me.Txt_Période1.Value
Données(i, 2) = Me.Txt_Période2.Value
Données(i, 3) = Me.Cbx_Type.Value
Données(i, 4) = Me.Cbx_Salarié.Value
Données(i, 5) = Me.Txt_Avance.Value
Données(i, 6) = Me.Txt_Opposition.Value
Données(i, 7) = Me.Txt_Retenues.Value
Données(i, 8) = Me.Txt_Rappel.Value
Données(i, 9) = Me.Txt_Base.Value
Données(i, 10) = Me.Txt_Fonction.Value
Données(i, 11) = Me.Txt_Transport.Value
Données(i, 12) = Me.Txt_AutresImp.Value
Données(i, 13) = Me.Txt_Caisse.Value
Données(i, 14) = Me.Txt_Assurance.Value
Données(i, 15) = Me.Txt_AutresNonImp.Value
Données(i, 16) = Me.Txt_Sursalaire.Value

Next i
Quelqu'un pourrait m'aider.
 

fanch55

XLDnaute Barbatruc
Bonsoir à tous,
Dans la mesure où nous sommes dans le brouillard total, j'aimerai savoir ce que sont période1 et période 2.
VB:
Liste_Données.List(Ligne, 0) = Me.Txt_Période1.Value
Liste_Données.List(Ligne, 2) = Me.Txt_Période2.Value
bref, un classeur serait le bienvenu ..
 

Bana XIII

XLDnaute Nouveau
Bonsoir à tous,
Dans la mesure où nous sommes dans le brouillard total, j'aimerai savoir ce que sont période1 et période 2.
VB:
Liste_Données.List(Ligne, 0) = Me.Txt_Période1.Value
Liste_Données.List(Ligne, 2) = Me.Txt_Période2.Value
bref, un classeur serait le bienvenu ..
Bonsoir Franch55
Les codes que j'ai fournis sont juste à titre d'exemple, sinon l'ensemble permet de renseigner les informations sur les salariés.

Malheureusement, pour cause de confidentialité je ne peux publier le classeur.

Merci pour la compréhension.
 

fanch55

XLDnaute Barbatruc
Ok,
Une particularité de listbox.additem c'est de ne pas savoir ajouter une ligne de plus de 10 colonnes ( de 0 à 9 ).
D'où le message "Erreur d'exécution 381" quand on précise l'index de colonne 10 ( 11ème colonne ) .
Il faut passer par une variable tableau ( bien plus rapide) et l'affecter à la propriété List de la listbox :
VB:
Dim i As Integer
Liste_Données.Clear
Liste_Données.ColumnCount = 16
Total = 5
ReDim D(Total, 15)
   For i = 0 To Total
        D(i, 0) = "L=" & i
        For j = 1 To Liste_Données.ColumnCount - 1
            D(i, j) = "C=" & j
        Next
    Next i
    Liste_Données.List = D
 
Dernière édition:

fanch55

XLDnaute Barbatruc
En l'adaptant à votre code initial :
VB:
Option Explicit
Private Sub UserForm_Initialize()
Dim I As Integer, J As Integer, Total As Integer, D
With Liste_Données
    .Clear
    .ColumnCount = 16
    Total = 5  ' <--  fournir le bon nombre de lignes
    ReDim D(Total, .ColumnCount - 1)
    For I = 0 To Total
        D(I, 0) = Me.Txt_Période1.Value
        For J = 1 To .ColumnCount - 1
            D(I, J) = Me.Txt_Période2.Value
        Next
    Next I
    .List = D
End With

End Sub
 
Dernière édition:

Bana XIII

XLDnaute Nouveau
Bonjour mon frère Franch55
J'aime bien ta macro, elle me permet d'insérer comme dans ton exemple 5 lignes d'un coup.
Malheureusement ce n'est pas ce que je souhaite.

Si tu vois dans ma demande initiale, ma seconde macro me permet bel et bien d'insérer mes 16 colonnes; le seul hic c'est que quand je veux insérer une nouvelle ligne après avoir vidé mes textbox et combobox, du coup les nouvelles données viennent écraser les anciennes dans la listbox.

Pour être un peu plus claire, j'aimerais avec ma deuxième macro que voici pouvoir insérer autant de lignes de données dans la listebox au lieu d'une seule à la fois comme je l'ai actuellement!


VB:
Dim i As Integer
Dim Total As Integer
Dim Données() As Variant

' Spécifiez ici le nombre total de fois que vous souhaitez insérer les données
Total = 1

' Définir la taille du tableau de données
ReDim Données(1 To Total, 1 To 16)

' Boucle pour récupérer les données des TextBox et ComboBox

For i = 1 To Total

' Insérer les données dans le tableau
Données(i, 1) = Me.Txt_Période1.Value
Données(i, 2) = Me.Txt_Période2.Value
Données(i, 3) = Me.Cbx_Type.Value
Données(i, 4) = Me.Cbx_Salarié.Value
Données(i, 5) = Me.Txt_Avance.Value
Données(i, 6) = Me.Txt_Opposition.Value
Données(i, 7) = Me.Txt_Retenues.Value
Données(i, 8) = Me.Txt_Rappel.Value
Données(i, 9) = Me.Txt_Base.Value
Données(i, 10) = Me.Txt_Fonction.Value
Données(i, 11) = Me.Txt_Transport.Value
Données(i, 12) = Me.Txt_AutresImp.Value
Données(i, 13) = Me.Txt_Caisse.Value
Données(i, 14) = Me.Txt_Assurance.Value
Données(i, 15) = Me.Txt_AutresNonImp.Value
Données(i, 16) = Me.Txt_Sursalaire.Value

Next i

'Insérer les données dans la ListBox
Liste_Données.List = Données

Vous voyez un peu mon attente?
 

cp4

XLDnaute Barbatruc
Bonjour mon frère Franch55
J'aime bien ta macro, elle me permet d'insérer comme dans ton exemple 5 lignes d'un coup.
Malheureusement ce n'est pas ce que je souhaite.

Si tu vois dans ma demande initiale, ma seconde macro me permet bel et bien d'insérer mes 16 colonnes; le seul hic c'est que quand je veux insérer une nouvelle ligne après avoir vidé mes textbox et combobox, du coup les nouvelles données viennent écraser les anciennes dans la listbox.

Pour être un peu plus claire, j'aimerais avec ma deuxième macro que voici pouvoir insérer autant de lignes de données dans la listebox au lieu d'une seule à la fois comme je l'ai actuellement!


VB:
Dim i As Integer
Dim Total As Integer
Dim Données() As Variant

' Spécifiez ici le nombre total de fois que vous souhaitez insérer les données
Total = 1

' Définir la taille du tableau de données
ReDim Données(1 To Total, 1 To 16)

' Boucle pour récupérer les données des TextBox et ComboBox

For i = 1 To Total

' Insérer les données dans le tableau
Données(i, 1) = Me.Txt_Période1.Value
Données(i, 2) = Me.Txt_Période2.Value
Données(i, 3) = Me.Cbx_Type.Value
Données(i, 4) = Me.Cbx_Salarié.Value
Données(i, 5) = Me.Txt_Avance.Value
Données(i, 6) = Me.Txt_Opposition.Value
Données(i, 7) = Me.Txt_Retenues.Value
Données(i, 8) = Me.Txt_Rappel.Value
Données(i, 9) = Me.Txt_Base.Value
Données(i, 10) = Me.Txt_Fonction.Value
Données(i, 11) = Me.Txt_Transport.Value
Données(i, 12) = Me.Txt_AutresImp.Value
Données(i, 13) = Me.Txt_Caisse.Value
Données(i, 14) = Me.Txt_Assurance.Value
Données(i, 15) = Me.Txt_AutresNonImp.Value
Données(i, 16) = Me.Txt_Sursalaire.Value

Next i

'Insérer les données dans la ListBox
Liste_Données.List = Données

Vous voyez un peu mon attente?
Tu as ignoré mon post, je l'ai donc supprimé et d'une
et de deux sans faire l'effort de monter un fichier pour solutionner ton problème
j'en déduis que tu ne t'aides pas toi-même
Cependant, je ne vois pas comment tu rajoutes plusieurs lignes en même temps dans la listbox si les 14 textboxs et 2 comboboxs sont déstinés pour une seule ligne (mais peut-être voir du côté de Redim Preserve) ou compter le nombre de lignes dans la listbox (le i que tu utilises est fixe d'où l’écrasement de la première ligne)
 

fanch55

XLDnaute Barbatruc
Re,
Pour rajouter une ligne à une listbox qui a été "renseignée" auparavant,
paradoxalement, le Additem fonctionne .
Associer l'événement avec un bouton :
VB:
Sub CommandButton1_Click()
Dim C As Integer, L As Integer
    With Me.Liste_Données
        .AddItem
        L = .ListCount - 1
        .List(L, 0) = Me.Txt_Période1.Value
        ' Bloc à remplacer avec vos textbox
        For C = 1 To .ColumnCount - 1
            .List(L, C) = Me.Txt_Période2.Value
        Next
       
    End With
End Sub

Pour conclure:
macro 1 pour créer la/les premières lignes du Listbox
macro 2 pour y ajouter une nouvelle ligne

Salut @cp4
 
Dernière édition:

cp4

XLDnaute Barbatruc
Salut @fanch55
perso je n'ai pas trop compris comment fonctionne son fichier.
En effet, un coup il dit qu'il renseigne 14 textbox et 2 combo et envoie tout ça vers une listbox
Ensuite, il nous dit qu'avec ton code il est parvenu à mettre d'un coup plusieurs lignes dans la listbox.
Démo du code utilisé
+10colonnes.gif
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
244

Statistiques des forums

Discussions
312 213
Messages
2 086 302
Membres
103 174
dernier inscrit
OBUTT