combobox en cascade en ligne

snoopy07

XLDnaute Occasionnel
Bonsoir
je voudrais un petit peu d aide pour mon userfrom ou j' ai 5 combobox

pour le combobox N° 1 nomme TxtJours et pour le N° 5 nomme TxtChèque , j'ai pas de soucis pour les alimenter

pour le combobox N°2 nommé TxtCatégorie j'ai pas de souci
mon problème est avec le N°3 et N°4
Le combobox N°3 nomme TxtEtablissement doit etre alimenenter suivant la Combobox N°2
Le combobox N°4 nomme TxtQuiQuoi doit etre alimenenter suivant la Combobox N°2 et N°3
La plage de cellulle qui alimente le combobox N°3 TxtEtablissement se trouve en (BD!$B2:$P64999)
La plage de cellulle qui alimente le combobox N°4 TxtQuiQuoi se trouve en (BD!$Q$2:$AF:$64999)

j arrive a alimenter mon combobox N°3 suivant le N°2 le probleme est que mon programme prend la colonne pour alimenter la combobox n°3 au lieu de la ligne

Document Cjoint




merci d avance pour vos conseil

cordialement
Snoopy 07
 

jp14

XLDnaute Barbatruc
Re : combobox en cascade en ligne

Bonjour

Ci jdessous les modifications à apporter pour le combobox n°3
Un colonne cachée contient le numéro de la ligne
Code:
Private Sub UserForm_Initialize()
-----------------------

     Set Ws = Sheets("Bd")
     
     With Me.TxtCatégorie
             For j = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
             .AddItem Ws.Range("A" & j)
             .List(.ListCount - 1, .ColumnCount - 1) = j ' dernière colonne contient le numéro de la ligne
          Next j
            End With

----------------------------

Code:
Private Sub TxtCatégorie_Change()
    Dim ligne As Long, lig As Long
    Dim col As Byte
    Dim I As Integer
    Dim DerLgn As Integer
    If Me.TxtCatégorie.ListIndex = -1 Then Exit Sub
    With Me.TxtCatégorie
    'col = .ListIndex + 2
      lig = CLng(.List(.ListIndex, .ColumnCount - 1)) ' lig contient le numéro de ligne que l'on récupère dans la colonne cachée
    End With

 Me.TxtEtablissement.Clear
 With Ws
    For I = 2 To 16 ' lecture des colonns B à Z, ligne lig
        If .Cells(lig, I) <> "" Then Me.TxtEtablissement.AddItem .Cells(lig, I) 
    Next I
 End With
        'With Me.TxtEtablissement
            '.ListIndex = IIf(.ListCount > 1, -1, 0)
        
       ' End With
End Sub
Pour le combobox4 il faut simplement écrire" For = 17 to 26"

A tester

JP
 
Dernière édition:

snoopy07

XLDnaute Occasionnel
Re : combobox en cascade en ligne

Bonsoir jp14
merci pour ton aide
j'ai encore un probleme
pour la combobox TxtEtablissement cela fonctionne bien
mais pour la combobox TxtCatégorie ca m affiche le numéro de ligne que l'on récupère dans la colonne cachée au lieu de ma liste
pour le combobox N°4 je ne l ai pas encore tester

cordialement
Snoopy 07
 

jp14

XLDnaute Barbatruc
Re : combobox en cascade en ligne

Bonjour

J'ai oubliè d'inscrire les modifications à apporter aux propriètés des combobox
With ComboBox3
.Clear
.ColumnCount = 2
.ColumnWidths = "222;0" '0 pour cacher la colonne
.Width = 222
end with

Bonne journée

JP
 

snoopy07

XLDnaute Occasionnel
Re : combobox en cascade en ligne

Bonjour

merci pour ta reponse

j ai encore un petit probleme sur mon combobox TxCatégorie la premiere ligne afficher est toujours le numero de ligne cache

voici mon command j ai programmer

Private Sub UserForm_Initialize()
Dim j As Long
'J'alimente les combobox'
Me.TxtJours.RowSource = "Jours"
Me.TxtType.RowSource = "Type_d_opération"


Set Ws = Sheets("Bd")

With Me.TxtCatégorie
For j = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & j)
.List(.ListCount - 1, .ColumnCount - 1) = j ' dernière colonne contient le numéro de la ligne

TxtEtablissement.Clear
.ColumnCount = 2
.ColumnWidths = "222;0" '0 pour cacher la colonne
.Width = 222


Next j
End With


End Sub

Private Sub TxtCatégorie_Change()
Dim ligne As Long, lig As Long
Dim col As Byte
Dim I As Integer
Dim DerLgn As Integer
If Me.TxtCatégorie.ListIndex = -1 Then Exit Sub
With Me.TxtCatégorie
col = .ListIndex + 2
lig = CLng(.List(.ListIndex, .ColumnCount - 1)) ' lig contient le numéro de ligne que l'on récupère dans la colonne cachée
End With

Me.TxtEtablissement.Clear
With Ws
For I = 2 To 16 ' lecture des colonns B à Z, ligne lig
If .Cells(lig, I) <> "" Then Me.TxtEtablissement.AddItem .Cells(lig, I)
Next I
End With
With Me.TxtEtablissement
.ListIndex = IIf(.ListCount > 1, -1, 0)


End With
End Sub


Private Sub TxtEtablissement_Change()
Dim ligne As Long, lig As Long
Dim col As Byte
Dim I As Integer
Dim DerLgn As Integer
If Me.TxtCatégorie.ListIndex = -1 Then Exit Sub
With Me.TxtCatégorie
col = .ListIndex + 2
lig = CLng(.List(.ListIndex, .ColumnCount - 1)) ' lig contient le numéro de ligne que l'on récupère dans la colonne cachée
End With

Me.TxtQuiQuoi.Clear
With Ws
For I = 17 To 26 ' lecture des colonns B à Z, ligne lig
If .Cells(lig, I) <> "" Then Me.TxtQuiQuoi.AddItem .Cells(lig, I)
Next I
End With
With Me.TxtQuiQuoi
.ListIndex = IIf(.ListCount > 1, -1, 0)

End With
End Sub

je ne trouve pas l erreur


bonne fin de journée

cordialement
Snoopy 07
 

Pièces jointes

  • probleme.PNG
    probleme.PNG
    20.2 KB · Affichages: 47
  • 3 essai nouvelle feuille.xlsm
    83.3 KB · Affichages: 59
  • 3 essai nouvelle feuille.xlsm
    83.3 KB · Affichages: 50

jp14

XLDnaute Barbatruc
Re : combobox en cascade en ligne

Bonsoir

Je n'ai pas tout testé, j'ai l'impression que tout est correct

Code à modifier, le paramètrage ne doit pas rentrer dans la boucle.
Code:
Private Sub UserForm_Initialize()
Dim j As Long
'J'alimente les combobox'
Me.TxtJours.RowSource = "Jours"
Me.TxtType.RowSource = "Type_d_opération"
   
Set Ws = Sheets("Bd")
TxtEtablissement.Clear
     
With Me.TxtCatégorie
    .ColumnCount = 2
    .ColumnWidths = "222;0" '0 pour cacher la colonne
    .Width = 222
    For j = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
        .AddItem Ws.Range("A" & j)
        .List(.ListCount - 1, .ColumnCount - 1) = j ' dernière colonne contient le numéro de la ligne
    Next j
End With
 
        
End Sub

Bonne soirée

JP
 

Pièces jointes

  • NOUVELLE FEUILLE.JPG
    NOUVELLE FEUILLE.JPG
    53.8 KB · Affichages: 47

snoopy07

XLDnaute Occasionnel
Re : combobox en cascade en ligne

Re bonsoir

je voudrais savoir comment faire un tri par ordre alphabetique sur mon combobox nommé TxtEtablissement et sur le combobox nommé TxtQuiQuoi

merci d'avance pour vos reponse
Cordialement
Snoopy 07
 

jp14

XLDnaute Barbatruc
Re : combobox en cascade en ligne

Bonsoir

Ci dessous un code pour trier les données dans un combobox

Code:
Option Explicit
Option Base 0
Dim Ws As Worksheet, Tablo() As String


Private Sub UserForm_Initialize()
Dim A As String, Tablo1() As String
Dim j As Long, DL1 As String
Dim Cellule1 As Range
'J'alimente les combobox'
    Me.TxtJours.RowSource = "Jours"
    Me.TxtType.RowSource = "Type_d_opération"

    Set Ws = Sheets("Bd")
    DL1 = Ws.Range("A" & Rows.Count).End(xlUp).Row
    ReDim Tablo(DL1 - 2) ' ligne2 et 0
    j = 0
    For Each Cellule1 In Ws.Range("A2:A" & DL1)
        If Cellule1.Value <> "" Then
            Tablo(j) = Cellule1.Value & "/" & Cellule1.Row 'cellule1.Address si désire une cellule ou cellule1.Column pour une colonne
            j = j + 1
        End If
    Next Cellule1
    'For j = 2 To DL1 ancienne version
            'A = Ws.Range("A" & j).Value
            'If A <> "" Then Tablo(j - 2) = A & "/" & (j)
    'Next j
    Call triabulles1dim(Tablo())
     With Me.TxtCatégorie
    .ColumnCount = 2
    .ColumnWidths = "222;0" '0 pour cacher la colonne
    .Width = 222
        For j = LBound(Tablo) To UBound(Tablo)
             Tablo1 = Split(Tablo(j), "/")
             .AddItem Tablo1(0)
             .List(.ListCount - 1, .ColumnCount - 1) = Tablo1(1)
          Next j
            End With

End Sub



Sub triabulles1dim(Tablo() As String)
Dim T As Long
Dim i As Integer, j As Integer
Dim X As String, Y As String

'tri des nombres par ordre croissant
For i = 0 To UBound(Tablo)
    For j = 0 To UBound(Tablo)
        If Tablo(j) > Tablo(i) Then
            X = Tablo(i)
            Y = Tablo(j)
            Tablo(i) = Y
            Tablo(j) = X
        End If
    Next j
Next i
End Sub


A tester

Bonne soirée

JP
 
Dernière édition:

snoopy07

XLDnaute Occasionnel
Re : combobox en cascade en ligne

Bonsoir Jp

je viens de tester ton code et il ne marche pas
dans mon combobox TxtCatégorie ca me remet le numéro de ligne que l'on récupère dans la colonne cachée au lieu de ma liste

cordialement
Snoopy 07
 

snoopy07

XLDnaute Occasionnel
Re : combobox en cascade en ligne

Re bonsoir

je viens de trouver ce code mais je n 'arrive pas a le faire marcher

Private Sub UserForm_Initialize()
Dim j As Long
'J'alimente les combobox'
Me.TxtJours.RowSource = "Jours"
Me.TxtType.RowSource = "Type_d_opération"

Set Ws = Sheets("BD")
TxtEtablissement.Clear

With Me.TxtCatégorie
.ColumnCount = 2
.ColumnWidths = "222;0" '0 pour cacher la colonne
.Width = 222
For j = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & j)
.List(.ListCount - 1, .ColumnCount - 1) = j ' dernière colonne contient le numéro de la ligne
Next j


Next I
triList
Me.TxtEtablissement.SetFocus
Me.TxtEtablissement.DropDown

Private Sub triList()
'Tri le contenu du ComboBox par ordre alphabétique
With Me.TxtEtablissement
For I = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .List(I) < .List(j) Then
strTemp = .List(I)
.List(I) = .List(j)
.List(j) = strTemp
End If
Next j
Next I
End With
End Sub

cordialement
Snoopy 07
 

jp14

XLDnaute Barbatruc
Re : combobox en cascade en ligne

Bonjour

Code à rajouter après "trilist" pour vérifier le résultat du tri après avoir changé le nom de la combobox dans la procédure.

Code:
Private Sub UserForm_Initialize()
-----------------------
Next I
triList
' code pour vérifier le nom et le numéro de ligne
For j = 0 To .ListCount - 1
    MsgBox .List(j) & " ligne " & .List(j, 1)
Next j

Me.TxtEtablissement.SetFocus
-----------------------------------

Le code suivant fonctionne correctement, il porte sur une colonne de la combobox.
Code:
Private Sub TxtCatégorie_Change()
    Dim ligne As Long, lig As Long
    Dim Col As Byte
    Dim i As Integer
    Dim DerLgn As Integer
    If Me.TxtCatégorie.ListIndex = -1 Then Exit Sub
    With Me.TxtCatégorie
    'col = .ListIndex + 2
      lig = CLng(.List(.ListIndex, .ColumnCount - 1))
    End With
 Me.TxtEtablissement.Clear
 With Ws
    For i = 2 To 26
        If .Cells(lig, i) <> "" Then Me.TxtEtablissement.AddItem .Cells(lig, i)
    Next i
 End With
 triList
End Sub

Private Sub triList()
Dim j As Long, i As Long, strtemp As Variant

'Tri le contenu du ComboBox par ordre alphabétique
With Me.TxtEtablissement
For i = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .List(i) < .List(j) Then
strtemp = .List(i)
.List(i) = .List(j)
.List(j) = strtemp
End If
Next j
Next i
End With
End Sub

Bonne journée

JP
 
Dernière édition:

Discussions similaires

Réponses
28
Affichages
1 K

Statistiques des forums

Discussions
312 387
Messages
2 087 856
Membres
103 671
dernier inscrit
rachid1983