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

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:

tototiti2008

XLDnaute Barbatruc
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 & "'")
...
 

Discussions similaires

Statistiques des forums

Discussions
312 352
Messages
2 087 538
Membres
103 582
dernier inscrit
didinex