Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête SQL avec comme valeur d'un champ le contenu d'une listbo x

2 réponses
Avatar
Cla
Bonjour,
j'ai sous access une Bd contenant une table classe et enseigner qui contient les noms des professeurs ainsi que la classe dans laquelle ils enseignent. Sous Excel, j'ai réalisé un lien avec cette base et dans une listbox, j'ai inséré la table classe avec le nom des classes, qui est liée à une cellule qui me renvoit le numéro d'ordre de la classe sélectionné.Ce que je voudrais, c'est que lorsque que je sélectionne une classe dans la listbox, j'ai la liste des professeurs qui y enseignent qui s'affiche dan sune plage de cellule. Cela est-il possible et si oui qqun aurait il un code se rapprochant de ce que je recherche?
merci

2 réponses

Avatar
michdenis
Bonjour Cla,

Voici une procédure qui devrait solutionner ta problématique. Il serait préférable que tu l'adaptes selon un événement
relié à ton contrôle "ListBox" pour la mise à jour de l'information. De même, pour accroître la rapidité au niveau de
l'exécution du code, tu peux ouvrir une connection vers ta base de données lorsque la feuille devient active (feuille où
l'action se déroule) et la refermer seulement lorsqu'une autre feuille est sélectionnée.

Amuse toi bien !


'ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE :
'Microsoft activex data objects 2.0 librairy

'------------------------------------------
Sub ImporterDesDonnéesDeAccess()

Dim Cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Rg As Range
Dim NbEnr As Long, CheminDb As String
Dim NomTable As String, NomFeuille As String
Dim Tblo As Variant, Requete As String
Dim NomProfesseur As String
Dim ChampDeLaTableQuestionner As String

'******Variables à renseigner********

'Nom de la table Access où sont les données
NomTable = "Employés"

'Le Nom du professeur désiré en supposant que ta
'ListBox est un contrôle issu de la boîte à outils contrôle
'Adapte le nom de la feuille et celui du listbox
With Worksheets("Feuil1")
NomProfesseur = .ListBox1.Text
End With
If NomProfesseur = "" Then Exit Sub

'Le nom du champ de la table où se retrouve les classes
ChampDeLaTableQuestionner = "Classe"

'Chemin et Nom de la base de données
CheminDb = "C:ExcelComptoir.mdb"

'**********************************************

'Texte de la requête à exécuter
Requete = "Select " & ChampDeLaTableQuestionner & " From " _
& NomTable & " Where Nom = '" & _
NomProfesseur & "'" & "Group by Nom "

'La chaîne de connexion à une base de donnée Access
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminDb & ";"

'Ouverture du recordset
Rst.Open Requete, Cnt, adOpenStatic

NbEnr = Rst.RecordCount
'Si aucun enregistrement est trouvé lors de la requête
If NbEnr = 0 Then
MsgBox "Aucun enregistrement trouvé." & vbCrLf & _
"Fin de l'opération.", vbInformation + vbOKOnly, "Annulation"
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set Sh = Nothing
Exit Sub
End If

'Éviter le rafraîchissement de l'écran
Application.ScreenUpdating = False

'Nom de la feuille où seront acheminés les résultats
With Worksheets("Feuil1")
'La première cellule de cette plage
Set Rg = .Range("A1")
End With

Tblo = Rst.GetRows
Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value = Application.Transpose(Tblo)

'Redimensionnement des cellules.
Rg.CurrentRegion.Columns.AutoFit
Rg.CurrentRegion.Rows.AutoFit

' Ferme la connection et le recordset
Rst.Close: Cnt.Close

'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set Sh = Nothing
End Sub
'------------------------------------------


Salutations!



"Cla" a écrit dans le message de
news:
Bonjour,
j'ai sous access une Bd contenant une table classe et enseigner qui contient les noms des professeurs ainsi que la
classe dans laquelle ils enseignent. Sous Excel, j'ai réalisé un lien avec cette base et dans une listbox, j'ai inséré
la table classe avec le nom des classes, qui est liée à une cellule qui me renvoit le numéro d'ordre de la classe
sélectionné.Ce que je voudrais, c'est que lorsque que je sélectionne une classe dans la listbox, j'ai la liste des
professeurs qui y enseignent qui s'affiche dan sune plage de cellule. Cela est-il possible et si oui qqun aurait il un
code se rapprochant de ce que je recherche?
merci
Avatar
michdenis
Bonjour Cla,

C'est la même procédure mais avec une légère correction au niveau de la requête ...


Voici une procédure qui devrait solutionner ta problématique. Il serait préférable que tu l'adaptes selon un événement
relié à ton contrôle "ListBox" pour la mise à jour de l'information. De même, pour accroître la rapidité au niveau de
l'exécution du code, tu peux ouvrir une connection vers ta base de données lorsque la feuille devient active (feuille où
l'action se déroule) et la refermer seulement lorsqu'une autre feuille est sélectionnée.

Amuse toi bien !

'ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE :
'Microsoft activex data objects 2.0 librairy

'------------------------------------------
Sub ImporterDesDonnéesDeAccess()

Dim Cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Rg As Range
Dim NbEnr As Long, CheminDb As String
Dim NomTable As String, NomFeuille As String
Dim Tblo As Variant, Requete As String
Dim NomProfesseur As String
Dim ChampNomProfesseur As String
Dim ChampDeLaTableQuestionner As String

'******Variables à renseigner********

'Nom de la table Access où sont les données
NomTable = "Employés"

'Le Nom du professeur désiré en supposant que ta
'ListBox est un contrôle issu de la boîte à outils contrôle
'Adapte le nom de la feuille et celui du listbox
With Worksheets("Feuil1")
NomProfesseur = .ListBox1.Text
End With

'Le Nom du Champ de la table regroupant les professeurs
ChampNomProfesseur = "Nom"

If NomProfesseur = "" Then Exit Sub

'Le nom du champ de la table où se retrouve les classes
ChampDeLaTableQuestionner = "Classe"

'Chemin et Nom de la base de données
CheminDb = "C:ExcelComptoir.mdb"

'**********************************************

'Texte de la requête à exécuter
Requete = "Select " & ChampDeLaTableQuestionner & " From " _
& NomTable & " Where " & ChampNomProfesseur & " = '" & _
NomProfesseur & "'" & "Group by " & ChampDeLaTableQuestionner

'La chaîne de connexion à une base de donnée Access
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminDb & ";"

'Ouverture du recordset
Rst.Open Requete, Cnt, adOpenStatic

NbEnr = Rst.RecordCount
'Si aucun enregistrement est trouvé lors de la requête
If NbEnr = 0 Then
MsgBox "Aucun enregistrement trouvé." & vbCrLf & _
"Fin de l'opération.", vbInformation + vbOKOnly, "Annulation"
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set Sh = Nothing
Exit Sub
End If

'Éviter le rafraîchissement de l'écran
Application.ScreenUpdating = False

'Nom de la feuille où seront acheminés les résultats
With Worksheets("Feuil1")
'La première cellule de cette plage
Set Rg = .Range("A1")
End With

Tblo = Rst.GetRows
Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value = Application.Transpose(Tblo)

'Redimensionnement des cellules.
Rg.CurrentRegion.Columns.AutoFit
Rg.CurrentRegion.Rows.AutoFit

' Ferme la connection et le recordset
Rst.Close: Cnt.Close

'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set Sh = Nothing
End Sub
'------------------------------------------


Salutations!








"Cla" a écrit dans le message de
news:
Bonjour,
j'ai sous access une Bd contenant une table classe et enseigner qui contient les noms des professeurs ainsi que la
classe dans laquelle ils enseignent. Sous Excel, j'ai réalisé un lien avec cette base et dans une listbox, j'ai inséré
la table classe avec le nom des classes, qui est liée à une cellule qui me renvoit le numéro d'ordre de la classe
sélectionné.Ce que je voudrais, c'est que lorsque que je sélectionne une classe dans la listbox, j'ai la liste des
professeurs qui y enseignent qui s'affiche dan sune plage de cellule. Cela est-il possible et si oui qqun aurait il un
code se rapprochant de ce que je recherche?
merci