Choisir base et données dans d'une ComboBox et récupérer les données
Hello, Bonjour a tous les membres de la communauté
je reviens vers vous avec un soucis en rapport avec:
1) choisir base de données et récupérer les donnés données afin d'en faire un bulletin sur la feuille nommée "belletin"
Pour celà, j'ai essayé d'adapter un code mais on met dit" erreurs d'exécution 424, objet requis"
Dim NomTS As String
Dim TS As ListObject
Dim lig As Integer
Dim BD()
Dim i As Integer, j As BytePrivate Sub UserForm_Initialize()
BD = Array("BASE DE DONNEE", "BASE DE DONNEE1")
ComboBox1.List = BD
ComboBox2.List = BD
Call ComboBox1_Change
End Sub
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Set TS = ThisWorkbook.Sheets(ComboBox.Value)
With Sheets("bulletin")
For i = 4 To Sheets(ComboBox.Value).Range("B" & Rows.Count).End(xlUp).Row
.Range("C2") = Sheets(ComboBox.Value).Range("B" & i)
.Range("B4") = Sheets(ComboBox.Value).Range("C" & i)
.Range("C4") = Sheets(ComboBox.Value).Range("D" & i)
.Range("D4") = Sheets(ComboBox.Value).Range("E" & i)
.Range("E4") = Sheets(ComboBox.Value).Range("F" & i)
.Range("B5") = Sheets(ComboBox.Value).Range("G" & i)
.Range("C5") = Sheets(ComboBox.Value).Range("H" & i)
.Range("D5") = Sheets(ComboBox.Value).Range("I" & i)
.Range("E5") = Sheets(ComboBox.Value).Range("J" & i)
.Range("B6") = Sheets(ComboBox.Value).Range("K" & i)
.Range("C6") = Sheets(ComboBox.Value).Range("L" & i)
.Range("D6") = Sheets(ComboBox.Value).Range("M" & i)
.Range("E6") = Sheets(ComboBox.Value).Range("N" & i)
.Range("C7") = Sheets(ComboBox.Value).Range("O" & i)
.Range("E7") = Sheets(ComboBox.Value).Range("P" & i)
.PrintOut
Next i
End With
End Sub2) choisir base de données et copier une partie de de données afin d'en faire une liste sur la feuille nommée "liste"
ici aussi on met dit: "erreurs d'exécution 424, objet requis"
voici le code adapté
Dim lig As Integer
Dim BD()
Dim i As Integer
Dim OD As Worksheet
Dim CO As WorksheetPrivate Sub UserForm_Initialize()
BD = Array("BASE DE DONNEE", "BASE DE DONNEE1")
ComboBox1.List = BD
ComboBox2.List = BD
Call ComboBox1_Change
End Sub
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Set OD = ThisWorkbook.Sheets(ComboBox.Value)
Set CO = Worksheets("Liste")
CO.Range("A1").CurrentRegion.Clear
OD.Range("B4:B10").Copy CO.Range("A1")
OD.Activate
OD.Range("A1").Select
End Sub
Bonjour SOME,
Pour le 1er point : Tu définis TS as ListObject qui semblerait devoir pointer vers un tableau structuré. Par contre tu tentes de lui assigner une feuille de calcul "Set TS = ThisWorkbook.Sheets(ComboBox.Value) " d'où une erreur de compil. Par ailleurs, je ne vois pas pourquoi tu appelles "Call ComboBox1_Change" dans l'initialisation du formulaire, cet événement se déclenchera lorsque tu effectueras un choix dans "ComboBox1". Notes que tu voudrais utiliser "ComboBox.Value" mais dans le code je ne vois pas comment "ComboBox" est alimenté, il y a des objets "ComboBox1" et "ComboBox2" mais pas de "ComboBox" ...
Pour le 2ème point : La solution est dans la dernière remarque du point 1
Bonjour
Ce n'est pas vraiment l'idée que je vous avais donnée dans ce fil --> https://forum.excel-pratique.com/s/goto/1123860
Pourquoi faites vous un Call ComboBox1_Change dans la sub initialize de l'USF listes ?? idem dans l'USF Bulletin ?
Vous devez ouvrir l'USF et faire un choix dans la combobox1 ou 2.
Comme mentionné par Cyflo, Combobox n'existe pas.
Edit : les codes dans l'USF bulletin comme ceci
Dim TS As ListObject
Dim BD()Private Sub UserForm_Initialize()
BD = Array("BASE DE DONNEE", "BASE DE DONNEE1")
ComboBox1.List = BD
ComboBox2.List = BD
'Call ComboBox1_Change
End SubPrivate Sub ComboBox1_Change()
Dim i As Integer
Dim cel As Range
Application.ScreenUpdating = False
If ComboBox1.ListIndex = 0 Then i = 0 Else: i = 1
Set TS = ThisWorkbook.Sheets(BD(i)).ListObjects(1)
With Sheets("bulletin")
.Range("C2") = TS.DataBodyRange.Item(1, 1)
.Range("B4") = TS.DataBodyRange.Item(1, 2)
.Range("C4") = TS.DataBodyRange.Item(1, 3)
.Range("D4") = TS.DataBodyRange.Item(1, 4)
.Range("E4") = TS.DataBodyRange.Item(1, 5)
'....
End with
end subC'est juste une idée. Le tout est de savoir aussi si vous devez sortir un bulletin séparé sur chaque ligne du tableau (donc Riz, ..)
Bonjour à M. Dan , justement, j'ai voulu modifier votre code pour l'a adapté à mon application originale.
Dans cette application, il y'a des données qui ne se trouvent pas dans les tableaux, mais sur la même feuille que je veux récupérer également. C'est pourquoi j'ai essayé de modifier. Mais je ne savais pas je ne devrais pas définitif TS.
Après les remarques de Cyflo, j'ai compris et j'ai corrigé. Ça marche correctement.
Pour le problème 1
Dim NomTS As String
Dim lig As Integer
Dim BD()
Dim i As Integer, j As BytePrivate Sub UserForm_Initialize()
BD = Array("BASE DE DONNEE", "BASE DE DONNEE1")
ComboBox1.List = BD
ComboBox2.List = BD
End SubPrivate Sub ComboBox1_Change()
Application.ScreenUpdating = False
With Sheets("bulletin")
For i = 4 To Sheets(ComboBox1.Value).Range("B" & Rows.Count).End(xlUp).Row
.Range("C2") = Sheets(ComboBox1.Value).Range("B" & i)
.Range("B4") = Sheets(ComboBox1.Value).Range("C" & i)
.Range("C4") = Sheets(ComboBox1.Value).Range("D" & i)
.Range("D4") = Sheets(ComboBox1.Value).Range("E" & i)
.Range("E4") = Sheets(ComboBox1.Value).Range("F" & i)
.Range("B5") = Sheets(ComboBox1.Value).Range("G" & i)
.Range("C5") = Sheets(ComboBox1.Value).Range("H" & i)
.Range("D5") = Sheets(ComboBox1.Value).Range("I" & i)
.PrintOut
Next i
End With
End Sub- pour le problème 2
Dim lig As Integer
Dim BD()
Dim i As Integer
Dim OD As Worksheet
Dim CO As WorksheetPrivate Sub UserForm_Initialize()
BD = Array("BASE DE DONNEE", "BASE DE DONNEE1")
ComboBox1.List = BD
ComboBox2.List = BD
End SubPrivate Sub ComboBox1_Change()
Application.ScreenUpdating = False
Set OD = ThisWorkbook.Sheets(ComboBox1.Value)
Set CO = Worksheets("Liste")
CO.Range("A1").CurrentRegion.Clear
OD.Range("B4:B10").Copy CO.Range("A1")
Co.Activate
Co.Range("A1").Select
End SubMerci bien à vous deux pour votre aide