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 Byte
Private 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 Sub

2) 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 Worksheet
Private 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
34exceldalod.xlsm (61.49 Ko)

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 Sub
Private 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 sub

C'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 Byte
Private Sub UserForm_Initialize()
BD = Array("BASE DE DONNEE", "BASE DE DONNEE1")
ComboBox1.List = BD
ComboBox2.List = BD
End Sub
Private 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 Worksheet
Private Sub UserForm_Initialize()
BD = Array("BASE DE DONNEE", "BASE DE DONNEE1")
ComboBox1.List = BD
ComboBox2.List = BD
End Sub
Private 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 Sub

Merci bien à vous deux pour votre aide

Rechercher des sujets similaires à "choisir base donnees combobox recuperer"