ADO query

pobrouwers

XLDnaute Occasionnel
Bonjour le forum,
J'ai récupéré sur le forum le code suivant pour alimenter une combobox à partir d'un fichier fermé.
Code:
 Private Sub UserForm_Initialize()
'nécessite d'activer la référence Microsoft ActiveX Data Object 2.x Library
Dim Rs As ADODB.Recordset
Dim Cn As String
Dim Cible As String
Dim Fichier As String

Fichier = ThisWorkbook.Path & '\\FichierB.xls' 'adapter le chemin

Cn = 'DRIVER={Microsoft Excel Driver (*.xls)};' & _
        'ReadOnly=1;DBQ=' & Fichier

    Cible = 'SELECT * FROM [Feuil1$];'

Set Rs = New ADODB.Recordset
Rs.Open Cible, Cn, adOpenForwardOnly, adLockReadOnly, adCmdText

'les données à récuperer sont dans la colonne A
If Not Rs.EOF Then
    ComboBox1.AddItem Rs.Fields(0).Name 'entete
    
    Do While Not Rs.EOF
    ComboBox1.AddItem Rs.Fields(0).Value
    Rs.MoveNext
    Loop
End If

Rs.Close
Set Rs = Nothing
End Sub
Dans mon userform, j'ai une autre combobox appeléé 'comboNumCip',
j'aimerais que la 'combobox1' soit filtrée par rapport à ma combobox 'comboNumCip'.
Dans le fichier B, la colonne A correspond a la combobox 'comboNumCip'.
Quelqu'un peut-il m'aider ?
Merci
 

MichelXld

XLDnaute Barbatruc
bonsoir

tu ne précises pas le type de données que tu as dans la colonne A du classeur fermé :

ces exemples présument que ton Combobox 'comboNumCip' contient le nom des champs du classeur fermé


pour du texte

Cible = 'SELECT * FROM [Feuil1$] WHERE Vendeur ='' & comboNumCip.Value & '';'


pour des dates

Cible = 'SELECT * FROM [Feuil1$] WHERE Vendeur =#' & comboNumCip.Value & '#;'


pour des valeurs numériques

Cible = 'SELECT * FROM [Feuil1$] WHERE Vendeur =' & comboNumCip.Value & ';'

tu trouveras d'autres exemples sur le meme principe dans ce lien

Ce lien n'existe plus

Lien supprimé



bonne soirée
MichelXld
 

pobrouwers

XLDnaute Occasionnel
Merci MichelXlD

Ce sont des champs texte.
Mais ca ne fonctionne pas...
Je joints le code initialize du userform.
Au fait, je souhaiterais que la combobox 'comboNumcip' soit filtrée avec la comboCDF. La comboNumcip est alimentée par le fichier fermé. Le point commun est la comboCDF et la colonne A du fichier fermé.
Voici le code ...
Si tu as 5 minutes ....
Code:
Private Sub UserForm_Initialize()
Dim rep As Variant
Dim rep1 As String
Dim c As Range
Dim Rs As ADODB.Recordset
Dim Cn As String
Dim Cible As String
Dim Fichier As String


Label29.Caption = Format(Date, 'DD/MM/YYYY')

Me.ComboNumCip.Enabled = Me.OptionButton1
Me.ComboNatCIP.Enabled = Me.OptionButton1
Me.TxtMontCIP.Enabled = Me.OptionButton1



rep = Split(ThisWorkbook.Path, '\\')
rep1 = rep(UBound(rep))


With Me.ComboCDF
    .ColumnCount = 4
    .ColumnWidths = '150;0;0;0'
    For Each c In Sheets('CDF').Range('F1:F' & Sheets('CDF').Range('F65536').End(xlUp).Row)
        If c = rep1 Then
            .AddItem c.Offset(0, -3)
            .List(.ListCount - 1, 1) = c.Offset(0, -1)
            .List(.ListCount - 1, 2) = c.Offset(0, -2)
            .List(.ListCount - 1, 3) = c.Offset(0, -3)
        End If
    Next c
End With

With Sheets('NatDep')
    Me.ComboNatDep.List = .Range('A2:A' & .Range('a65536').End(xlUp).Row).Value
End With

Fichier = ThisWorkbook.Path & '\\FichierB.xls' 'adapter le chemin

Cn = 'DRIVER={Microsoft Excel Driver (*.xls)};' & _
        'ReadOnly=1;DBQ=' & Fichier

    Cible = 'SELECT * FROM [Feuil1$];'

Set Rs = New ADODB.Recordset
Rs.Open Cible, Cn, adOpenForwardOnly, adLockReadOnly, adCmdText

'les données à récuperer sont dans la colonne A
If Not Rs.EOF Then
   ' ComboBox1.AddItem Rs.Fields(2).Name 'entete
    
    Do While Not Rs.EOF
    ComboNumCip.AddItem Rs.Fields(1).Value
    Rs.MoveNext
    Loop
End If

Rs.Close
Set Rs = Nothing

End Sub
 

MichelXld

XLDnaute Barbatruc
bonsoir

j'ai 5 minutes mais j'ai l'impression de comprendre le contraire d'un message à l'autre

dans ton premier message tu dis

'j'aimerais que la 'combobox1' soit filtrée par rapport à ma combobox 'comboNumCip'. '

et dans ton dernier message

'je souhaiterais que la combobox 'comboNumcip' soit filtrée avec la comboCDF'


quoi qu'il en soit , il faut que tu lances ta requete en utilisant l'evenement Change du combobox 'comboCDF' et non l'evenement initialize de l'UserForm



bonne soiree
MichelXld
 

pobrouwers

XLDnaute Occasionnel
Effectivement, je me suis rendu compte que je m'étais un peu mêlé les pinceaux avec mes noms de mes combobox, (en tout cas, bien vu ;) )lorsque j'ai écrit le 2eme message. C'est le 2eme qui est le bon
C'est vrai que c'est plus logique de placer le code dans l'evenement change ! Ca marche !
Juste un petit truc encore... Si je change la combobox comboCDF et qui ne trouve pas de valeur dans le fichier B, il garde dans la comboNumCip le dernier record trouvé auparavent. Est-il possible de faire un clear
Autre petite question, qu'est-il préférable d'utiliser comme driver :
- DRIVER={Microsoft Excel Driver (*.xls)
- Microsoft.Jet.OLEDB.4.0

Merci en tout cas MichelXLD
 

MichelXld

XLDnaute Barbatruc
rebonsoir

pour supprimer les elements de la Combobox tu peux ecrire tout simplement

comboNumCip.Clear


pour plus d'infos sur les 2 types de connection

Ce lien n'existe plus

voir le chapitre 'Connexion à Excel à l'aide d'ADO'

j'utilise indifférement les 2 sans probleme particulier


bonne soirée
MichelXld
 

pobrouwers

XLDnaute Occasionnel
Salut le forum, MichelXLD,

J'ai encore un petit souci avec mon code ...
Le voici :
Code:
Private Sub ComboNumCip_Change()
Dim Rs As ADODB.Recordset
Dim Cn As String
Dim Cible As String
Dim Fichier As String

With ComboNumCip
    Fichier = ThisWorkbook.Path & '\\FichierB.xls' 'adapter le chemin

    Cn = 'DRIVER={Microsoft Excel Driver (*.xls)};' & _
        'ReadOnly=1;DBQ=' & Fichier

    Cible = 'SELECT * FROM [Feuil1$] WHERE NumCIP ='' & ComboNumCip.Value & '' and CDF ='' & ComboCDF.Value & '' ;'
    
    Set Rs = New ADODB.Recordset
    Rs.Open Cible, Cn, adOpenForwardOnly, adLockReadOnly, adCmdText
    If Rs.EOF Then
        ComboNatCIP.Clear
    End If
    
        If Not Rs.EOF Then
   ' ComboBox1.AddItem Rs.Fields(2).Name 'entete
    ComboNatCIP.Clear
            Do While Not Rs.EOF
    ComboNatCIP.AddItem Rs.Fields(2).Value
    Rs.MoveNext
            Loop
        End If
        
    Rs.Close
    Set Rs = Nothing
    
End With

End Sub
Il fonctionne tres bien mais le probleme c'est que la comboNatCIP est bien alimentée mais les doublons ne sont pas gérés.
J'ai cherché sur le formum, il y a plein de posts sur les doublons mais je n'arrive pas à l'appliquer a mon code...
Quelqu'un peut-il m'aider?
Merci d'avance
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 995
Membres
104 001
dernier inscrit
dessinbecm