Mettre des données d'1 ListBox multicolonne vers un tableau

Bonjour,

je souhaite transférer des données d'une ListBox multicolonne ( à 4 colonne) vers un tableau nommé "tableauClient",

avec le bouton ajouter je test :

  • si le tableau existe
  • si oui je vérifie qu'il a le bon nom
  • et si il n'existe pas je le crée .
mais après je galère pour transférer toutes les lignes et colonnes de la listbox multi vers les lignes et colonnes de mon tableau.

j'ai joint mon fichier excel, si quelqu'un a une idée (pour pouvoir les charger dans le tableau et inversement aussi d'ailleurs) Merci d'avance

48essai-tableau.xlsm (29.23 Ko)

Grace à thev j'ai pu comprendre et fairce que je voulais donc pour tous ceux que cela interesse voici le fichier final avec des commentaires dans les codes du userforms

[b]

Fichier ci dessous fini :[/b]

le code que j'utilise est :

Private Sub CommandButtonAjouter_Click()

Dim Ws As Worksheet

Dim ListObj As ListObject

Dim ListObj2 As ListObject

Dim NomTableau As String

Dim DerLign As Long

'*************************************************************************************************************************************

'* ListObjects sert à la création et à la manipulation des tableaux

'*************************************************************************************************************************************

Set Ws = Worksheets("Feuil1")

For Each ListObj In Ws.ListObjects

NomTableau = ListObj.Name ' trouve le nom du tableau si il existe et le mets dans la variable

Next

If NomTableau <> "" Then ' si la variable contient un nom

If NomTableau <> "TableauClient" Then ' verifie que c'est le bon nom de tableau

Worksheets("Feuil1").ListObjects(NomTableau).Name = "TableauClient" 'sinon on le renomme

End If

Else

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$2"), , xlYes).Name = "TableauClient" 'Crée le tableau a 4 colonne et le nomme

Range("TableauClient[[#Headers],[Colonne1]]").Select 'selectionne l'entête de colonne 1

ActiveCell.FormulaR1C1 = "Nom" 'la renomme

Range("TableauClient[[#Headers],[Colonne2]]").Select

ActiveCell.FormulaR1C1 = "Prenom"

Range("TableauClient[[#Headers],[Colonne3]]").Select

ActiveCell.FormulaR1C1 = "Age"

Range("TableauClient[[#Headers],[Colonne4]]").Select

ActiveCell.FormulaR1C1 = "Oui-Non"

End If

DerLign = [TableauClient].Rows.Count + [TableauClient].Rows(0).Row ' Trouve la derniere ligne pleine

DerLign = DerLign ' + 1 ' ajoute un pour être sur la premiere ligne vide

With Sheets("Feuil1") ' Indique le nom de la feuille source

Set ListObj2 = Worksheets("Feuil1").ListObjects("TableauClient") ' remplt les cellule avec le contenu des textbox ou OptionBouton

c'est la que je patauge

.Cells(DerLign, 1) = TextBoxNom.Value

.Cells(DerLign, 2) = TextBoxPrenom.Value

.Cells(DerLign, 3) = TextBoxAge.Value

If OptionButtonOui = True Then .Cells(DerLign, 4) = "Oui"

If OptionButtonNon = True Then .Cells(DerLign, 4) = "Non"

End With

End Sub

Bonsoir,

Une première étape serait d'utiliser une ListBox à 4 colonnes et non 4 Listbox à une colonne.

ci-joint exemple.

Après, il serait bon d'utiliser les propriétés et méthodes associés à Listobject. Par exemple :

 
    With Sheets("Feuil1").ListObjects("TableauClient")
        i = .ListRows.Count    'dernière ligne du tableau
        TextBoxNom = .ListColumns("Nom").DataBodyRange.Rows(i).Value
    End With

Pour ajouter une ligne au tableau à partir de la listbox 4 colonnes

With Sheets("Feuil1").ListObjects("TableauClient")        'ajout d'une ligne vierge à la fin du tableau
        .ListRows.Add
        'indice dans la feuille, de la ligne correspondant à la première cellule vide du champ "nom"
         i = .ListColumns("nom").Range.Find("", SearchDirection:=xlNext).Row
        'indice relatif dans TableauClient, de la ligne correspondant à la première cellule vide du champ "nom"
         i = i - .HeaderRowRange.Row
        'remplissage lignes
          NumList = ListBox1.ListIndex
        .ListColumns("nom").DataBodyRange.Rows(i).Value = ListBox1.List(NumList, 0)
        .ListColumns("prenom").DataBodyRange.Rows(i).Value = ListBox1.List(NumList, 1)
        .ListColumns("Age").DataBodyRange.Rows(i).Value = ListBox1.List(NumList, 2)
        .ListColumns("Oui-Non").DataBodyRange.Rows(i).Value = ListBox1.List(NumList, 3)
End With

Cher thev effectivement tu as raison car dans ma précipitation et mon cerveau embrouillé j'ai envoyé le mauvais fichier !!!!

merci pour ta réponse, je donne quand même le bon code et le bon fichier :

donc voici le bon code et le bon fichier :

Private Sub CommandButtonAjouter_Click()

Dim Ws As Worksheet

Dim ListObj As ListObject

Dim ListObj2 As ListObject

Dim NomTableau As String

Dim DerLign As Long

'*************************************************************************************************************************************

'* ListObjects sert à la création et à la manipulation des tableaux

'*************************************************************************************************************************************

Set Ws = Worksheets("Feuil1")

For Each ListObj In Ws.ListObjects

NomTableau = ListObj.Name ' trouve le nom du tableau si il existe et le mets dans la variable

Next

If NomTableau <> "" Then ' si la variable contient un nom

If NomTableau <> "TableauClient" Then ' verifie que c'est le bon nom de tableau

Worksheets("Feuil1").ListObjects(NomTableau).Name = "TableauClient" 'sinon on le renomme

End If

Else

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$2"), , xlYes).Name = "TableauClient" 'Crée le tableau a 4 colonne et le nomme

Range("TableauClient[[#Headers],[Colonne1]]").Select 'selectionne l'entête de colonne 1

ActiveCell.FormulaR1C1 = "Nom" 'la renomme

Range("TableauClient[[#Headers],[Colonne2]]").Select

ActiveCell.FormulaR1C1 = "Prenom"

Range("TableauClient[[#Headers],[Colonne3]]").Select

ActiveCell.FormulaR1C1 = "Age"

Range("TableauClient[[#Headers],[Colonne4]]").Select

ActiveCell.FormulaR1C1 = "Oui-Non"

End If

DerLign = [TableauClient].Rows.Count + [TableauClient].Rows(0).Row ' Trouve la derniere ligne pleine

DerLign = DerLign ' ajoute un pour être sur la premiere ligne vide

With Sheets("Feuil1") ' Indique le nom de la feuille source

FinList = (ListBoxNom.ListCount - 1) + DerLign

For NumLign = 0 To 6

For NomCol = 0 To 4 'FinList

'NomListBox = "ListBox" & NumCol & ".List(" & a & ")"

'MsgBox "2eme Boucle NumCol : " & NumCol & " i : " & i

Set ListObj2 = Worksheets("Feuil1").ListObjects("TableauClient")

NumColTab = NumCol + 1

.Cells(NumLign, NumColTab) = Me.ListBoxNom.List(NumLign, NumCol)

a = a + 1

Next NomCol

Next NumLign

End With

End Sub

je vais regarder ton code et voir si je le comprends (ce qui n'est pas gagné) et merci et encore desolé

41essai-tableau.xlsm (29.23 Ko)

Grace à thev j'ai pu comprendre et fairce que je voulais donc pour tous ceux que cela interesse voici le fichier final avec des commentaires dans les codes du userforms

MERCI BEAUCOUP THEV

Fichier ci dessous fini :

Rechercher des sujets similaires à "mettre donnees listbox multicolonne tableau"