Listes cascade sur 3 niveaux avec classeur fermé (ADO) trié et sans doublon.

  • Initiateur de la discussion Initiateur de la discussion prorudess
  • 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 !

prorudess

XLDnaute Junior
Bonjour à tous,

J'utilise la méthode dite ADO trouvée sur le site de Boisgontier : Formation Excel VBA JB
J'arrive à afficher les données de ma table distante dans mes trois Combobox.

La première est bien triée et ne contient pas de doublon, par contre les deux autres ne le sont pas.
Je sais que c'est la fonction "Group By" qui permet cela mais je n'arrive pas à définir celle-ci dans mes autres combobox.

Je vous donne mon code, si quelqu'un aurait déjà rencontré ce cas ou aurait une idée.

Je vous remercie d'avance.
Code:
Dim répertoire
Dim fichier
----------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
  'Microsoft ActiveX Data Object 2.8 doit être activé
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  répertoire = "mon répertoire"
  fichier = "mon fichier.xls"
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & répertoire & fichier
  Set rs = cnn.Execute("SELECT client FROM BD WHERE client<>''Group By client")
  Me.Client.List = Application.Transpose(rs.GetRows)
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
End Sub
----------------------------------------------------------------------------------
Private Sub Client_Change()
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & répertoire & fichier
  Set rs = cnn.Execute("SELECT Prestation FROM BD WHERE Client='" & Me.Client & "'")
  Me.Prestation.List = Application.Transpose(rs.GetRows)
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
  Me.Prestation.SetFocus
  Me.Prestation.ListIndex = -1
  Me.Dossier.ListIndex = -1
End Sub
----------------------------------------------------------------------------------
Private Sub Prestation_Change()
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & répertoire & fichier
  Set rs = cnn.Execute("SELECT Dossier FROM BD WHERE Client='" & Me.Client & "'")
  Me.Dossier.List = Application.Transpose(rs.GetRows)
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
  Me.Dossier.SetFocus
  Me.Dossier.ListIndex = -1
End Sub
 
Dernière édition:
Re : Listes cascade sur 3 niveaux avec classeur fermé (ADO) trié et sans doublon.

Bonjour produress,

GROUP BY est fait pour faire des calculs sur un groupe (somme de quelque chose par client, par exemple)
Pour supprimer les doublons, il est plutôt conseillé d'utiliser DISTINCT

Code:
...
Set rs = cnn.Execute("SELECT DISTINCT client FROM BD WHERE client<>''")
...
Set rs = cnn.Execute("SELECT DISTINCT Prestation FROM BD WHERE Client='" & Me.Client & "'")
...
Set rs = cnn.Execute("SELECT DISTINCT Dossier FROM BD WHERE Client='" & Me.Client & "'")
...
 
- 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

Réponses
8
Affichages
771
Réponses
8
Affichages
11 K
C
  • Question Question
2
Réponses
15
Affichages
3 K
Compte Supprimé 979
C
Retour