XL 2010 Synchronisation de 3 combobox

Asture

XLDnaute Nouveau
Bonjour les amis, je suis nouveau de la programmation et je bloque sur une appli de saisie avec des combobox que je veux faire dépendre les uns aux autres. Merci encore pour l'aide.
 

Pièces jointes

  • Classeur1.xlsm
    15.4 KB · Affichages: 12

Dranreb

XLDnaute Barbatruc
Bonjour.
Cette ressource est faite pour vous :
Remarque: Il faudrait un tableau avec juste les 3 colonnes, en répétant sur chaque ligne les informations communes.
 
Dernière édition:

Asture

XLDnaute Nouveau
Bonjour.
Cette ressource est faite pour vous :
Remarque: Il faudrait un tableau avec juste les 3 colonnes, en répétant sur chaque ligne les informations communes.
Merci, mais xa ne m'aide pas. Si je pouvait avoir un exemple avec mon fichier, cela me sera d'une grande aide. Merci
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Asture , @Dranreb , le Forum

Voice ce que Dranreb essaie de t'expliquer, mais en image :
1594657553173.png


Car ta base est tout sauf une Database structurée !
D'où par la suite des jongleries infernales et instables en VBA pour piloter des UserForms !!!


Bonne découverte du monde VBA
@+Thierry
 

job75

XLDnaute Barbatruc
Bonjour Asture, Bernard, _Thierry,

Pas besoin de ComboBoxes, des listes de validation font très bien l'affaire.

Et le tableau structuré de la 1ère feuille me va très bien.

Voyez le fichier joint et cette macro dans le code de la feuille "bd" :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rc&, j%, DListe$, n%, SPListe$(), i&
Cells.Validation.Delete 'RAZ
With [Tableau2]
    If Target.Row = 1 Or Target.Column > .Columns.Count Then Exit Sub
    rc = .Rows.Count
    For j = 1 To .Columns.Count Step 2
        DListe = DListe & "," & .Cells(1, j)
        n = n + 1
        ReDim Preserve SPListe(1 To n)
        For i = 1 To rc
            If .Cells(i, j + 1) <> "" Then SPListe(n) = SPListe(n) & "," & .Cells(i, j + 1)
        Next i
        SPListe(n) = Mid(SPListe(n), 2)
    Next j
    DListe = Mid(DListe, 2)
End With
'---listes de validation---
With ActiveCell.Validation
    If ActiveCell.Column Mod 2 Then
        .Add xlValidateList, Formula1:=DListe 'liste des départements
    ElseIf ActiveCell(1, 0) <> "" Then
        n = Application.Match(ActiveCell(1, 0).Text, Split(DListe, ","), 0)
        .Add xlValidateList, Formula1:=SPListe(n) 'liste des sous-préfectures
    End If
End With
End Sub
Elle se déclenche quand on sélectionne une cellule et crée la liste de validation correspondante.

Nota : à quoi va servir l'UserForm ?

A+
 

Pièces jointes

  • Listes(1).xlsm
    23.4 KB · Affichages: 3

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @job75 , re @Dranreb , re @Asture

Oui certe, mais je pense qu'il faut parfois remettre un peu les gens en question sur leur façon de voir une Table et l'évolution de celle-ci dans le temps...

Certe, avec ce genre d'acrobaties on peut même faire faire le café à Excel, mais sérieusement tu crois qu'Asture va pouvoir suivre ne fusse qu'un tiers de ce code ? Il a bien précisé "je suis nouveau de la programmation"

Et tel que je vois son tableau c'est lui qui l'a créé (mal) il n'est, me semble-t'il, pas assujetti à des données exportées/importées et donc il a le choix de faire une Table Structurée comme nous l'avons suggéré Dranreb et moi.

Mais sinon pas mal tes acrobaties et l'idée des Liste de Validation.

Bonne soirée
@+Thierry
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Ceci est un bon début pour votre UserForm NOUVEAU, qui permet déjà le fonctionnement correct des ComboBox.
VB:
Option Explicit
Private WithEvents CL As ComboBoxLiées, CA As ControlsAssociés, LCou As Long, TVL()
Private Sub UserForm_Initialize()
   Set CL = CLsCAs.Création.ComboBoxLiées: CL.Plage Feuil1
   Set CA = CLsCAs.Création.ControlsAssociés: Set CA.Colonnes = CL.Colonnes
   CL.Add Me.ComboBox1, "DEPARTEMENT"
   CL.Add Me.ComboBox2, "SOUS-PREFECTURE"
   CL.Add Me.ComboBox3, "PAYS RURAL"
   CA.Add Me.TextBox4, "VILLAGE"
   CA.Add Me.TextBox5, "LOCALISATION"
   CL.CouleurSympa
   CL.Actualiser
   End Sub
 

Dranreb

XLDnaute Barbatruc
Avec une suite possible :
VB:
Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   Btn_effacer.Enabled = NbrLgn = 0 Imp Complet
   Ajout.Visible = Complet: Ajout.Enabled = Complet
   If NbrLgn = 1 Then Exit Sub
   LCou = 0: ReDim TVL(1 To 1, 1 To CL.Colonnes.Count)
   CA.ValeursDepuis TVL
   End Sub
Private Sub CL_Résultat(Lignes() As Long)
   If UBound(Lignes) <> 1 Then Exit Sub
   LCou = Lignes(1): TVL = CL.Lignes(LCou).Range.Value
   CA.ValeursDepuis TVL
   End Sub
Private Sub Btn_effacer_Click()
   CL.Nettoyer
   End Sub
Private Sub Ajout_Click()
   CA.ValeursVers TVL
   If LCou = 0 Then
      CL.ValeursVers TVL
      CL.Lignes.Add.Range.Value = TVL
      CL.Actualiser
   Else
      CL.Lignes(LCou).Range.Value = TVL
      End If
   End Sub
Remarque: il n'y a pas assez de ComboBox pour isoler une seule ligne existante pour "BOUNA", "BOUKO" et "BOUKO". Mais il serait possible de mettre une ListBox pour les afficher toutes.
 
Dernière édition:

Asture

XLDnaute Nouveau
Bonjour.
Ceci est un bon début pour votre UserForm NOUVEAU, qui permet déjà le fonctionnement correct des ComboBox.
VB:
Option Explicit
Private WithEvents CL As ComboBoxLiées, CA As ControlsAssociés, LCou As Long, TVL()
Private Sub UserForm_Initialize()
   Set CL = CLsCAs.Création.ComboBoxLiées: CL.Plage Feuil1
   Set CA = CLsCAs.Création.ControlsAssociés: Set CA.Colonnes = CL.Colonnes
   CL.Add Me.ComboBox1, "DEPARTEMENT"
   CL.Add Me.ComboBox2, "SOUS-PREFECTURE"
   CL.Add Me.ComboBox3, "PAYS RURAL"
   CA.Add Me.TextBox4, "VILLAGE"
   CA.Add Me.TextBox5, "LOCALISATION"
   CL.CouleurSympa
   CL.Actualiser
   End Sub
Merci, Dranreb pour ton message. Je viens de mettre dans mon usf nouveau. Il affiche erreur de compilation. Type défini par l'utilisateur non defini et il sélectionné CA As........
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG