Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Chargement Combobox avec plusieurs feuilles de données

  • Initiateur de la discussion Initiateur de la discussion JORDAN
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

JORDAN

XLDnaute Impliqué
Bonjour tout le monde,

Actuellement je charge une ComboBox avec le code ci-dessous
Suite à des changements de configurations de la basse de données
je dois charger cette ComboBox avec 3 feuilles et les données à charger
sur les différentes feuilles ne sont pas dans les mêmes colonnes
Feuil1 colonne B
Feuil2 colonne B
Feuil3 Colonne D

Je peux créer 3 Tablo pour charger les 3 feuilles, jusque là ça va
mais après je ne sais pas trop comment faire pour regrouper
ces 3 tablo en un seul avant d'éffectuer le tri

Merci pour vos conseils

Code:
Sub CBX1Chargement()

With Sheets("Feuil1")
    Const TheCol1 As String = "D2:DA"
    Const TheEnd1 As String = "D65536"
End With

Dim T1 As Variant, Item As Variant
Dim Tablo1() As String
Dim TheList1 As Collection
Dim x1 As Integer, j1 As Integer, i1A As Integer, i1B As Integer
Dim Tmp1A As String, Tmp1B As String

Set TheList1 = New Collection

With Sheets("Feuil1")
T1 = .Range(TheCol1 & .Range(TheEnd1).End(xlUp).Row)
End With

    For i1A = LBound(T1) To UBound(T1)
        If T1(i1A, 1) <> "" Then
            ReDim Preserve Tablo1(x1)
            Tablo1(x1) = T1(i1A, 1)
            x1 = x1 + 1
        End If
    Next

        For i1A = LBound(Tablo1) To UBound(Tablo1)
                For j1 = LBound(Tablo1) + i1B To UBound(Tablo1)
                    If Tablo1(i1A) > Tablo1(j1) Then
                        Tmp1A = Tablo1(j1): Tmp1B = Tablo1(j1)
                        Tablo1(j1) = Tablo1(i1A): Tablo1(j1) = Tablo1(i1A)
                        Tablo1(i1A) = Tmp1A: Tablo1(i1A) = Tmp1B
                    End If
                Next j1
        i1B = i1B + 1
        Next i1A
        
        For i1A = LBound(Tablo1) To UBound(Tablo1)
            On Error Resume Next
            TheList1.Add Tablo1(i1A), Tablo1(i1A)
        Next
        
For Each Item In TheList1
    USF.CBX1.AddItem Item
Next

End Sub
 
Re : Chargement Combobox avec plusieurs feuilles de données

Bonjour,

L'idée est de rassembler les données des diverses feuilles en diverses colonnes dans
une seule colonne d'une nouvelle feuille créée.
Par la suite vous pourrez retravailler ces données et les fournir dans votre ComboBox.
La pièce jointe à ce message servira d'exemple.

Code:
Sub RassembleDonnees()
Dim Feuilles As Variant
Dim Colonnes As Variant

'--- Adaptez le nom de chaque feuille ---
Feuilles = Array("Feuil1", "Feuil2", "Feuil3")
'--- Adaptez le N° de chaque colonne ---
Colonnes = Array(2, 2, 4)
'---------------------------------------

Dim S1 As Worksheet
Dim S2 As Worksheet
Dim R As Range
Dim i&
Dim derLig&
Set S2 = ActiveWorkbook.Sheets.Add(after:=Sheets(ActiveWorkbook.Sheets.Count))
For i& = LBound(Feuilles) To UBound(Feuilles)
  Set S1 = ActiveWorkbook.Sheets(Feuilles(i&))
  S1.Activate
  derLig& = S1.Range(Cells(65536, Colonnes(i&)), Cells(65536, Colonnes(i&))).End(xlUp).Row
  Set R = S1.Range(Cells(1, Colonnes(i&)), Cells(derLig&, Colonnes(i&)))
  R.Copy
  S2.Activate
  If i& = 0 Then
    S2.[a1].Select
  Else
    S2.Range("a" & S2.UsedRange.Rows.Count + 1 & "").Select
  End If
  ActiveSheet.Paste
Next i&
S2.[a1].Select
Application.CutCopyMode = False
End Sub

Bon courage.

Cordialement.

PMO
Patrick Morange
 
Re : Chargement Combobox avec plusieurs feuilles de données

Bonsoir,

Sans doublons + tri rapide

Code:
Private Sub UserForm_Initialize()
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In [tab1]
     If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
  Next c
  For Each c In [tab2]
     If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
  Next c
  For Each c In [tab3]
     If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
  Next c
  temp = MonDico.items
  Call tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
End Sub

Sub tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call tri(a, g, droi)
  If gauc < d Then Call tri(a, gauc, d)
End Sub

Autre méthode:

Code:
Private Sub UserForm_Initialize()
  Sheets.Add
  [tab1].Copy [A1]
  [tab2].Copy [A65000].End(xlUp).Offset(1, 0)
  [tab3].Copy [A65000].End(xlUp).Offset(1, 0)
  [A:A].Sort key1:=[A1]
  [A:A].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C1"), Unique:=True
  Me.ComboBox1.List = [C1].CurrentRegion.Value
  Application.DisplayAlerts = False
  ActiveSheet.Delete
End Sub


JB
Formation Excel VBA JB
 

Pièces jointes

Dernière édition:
Re : Chargement Combobox avec plusieurs feuilles de données

Bonjour PMO2, JB,

Merci pour votre aide à tous les deux

je vais essayer vos solutions afin de voir loaquelle sera la meilleure pour mon
fichier, une précision que j'avais omis de dire est que mes 3 listes sont évolutives
mais cela ne devrait pas poser de problèmes

Je fais mes essais et vous tiens au courant

Encore merci à tous les deux et bonne journée
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
217
Réponses
4
Affichages
580
Réponses
5
Affichages
703
Réponses
5
Affichages
312
Réponses
7
Affichages
316
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…