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 .
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
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
- Messages
- 4'096
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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é
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 :