Private bErrMetier As Boolean
Private Sub ComboBox1_Change()
'Le commandbutton sera autorisé ou non suivant qu'il y a ou non un choix utilisateur
'et qu'il n'y ait pas eu d'erreur au niveau de la liste des métiers
CommandButton1.Enabled = ComboBox1.ListIndex > -1 And Not bErrMetier
End Sub
Private Sub CommandButton1_Click()
Dim Metier As String
Dim rst As Object, cnx As Object
Dim Path As String: Path = ThisWorkbook.Path & "\"
Sheets("Donnees").Range("2:2").ClearContents
'Récupérer le métier choisit
Metier = ComboBox1.Value
'Si aucun métier dans la valeur du combo (ou chaine vide) sortir
If Len(Trim(Metier)) = 0 Then Exit Sub
'Mettre des doubles guillemets pour la transmition à SQL
Metier = Replace(Replace(Metier, """", """"""), "'", "''")
'Recréer une connextion
Set cnx = CreateObject("Adodb.connection")
cnx.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & Path & "BDD_fiches métiers.xls"
'Interrogation de la feuille BDD
Set rst = cnx.Execute("SELECT TOP 1 * FROM [BDD$] WHERE `METIER`='" & Metier & "' ORDER BY `METIER` ASC;")
'Si l'interrogation a donné quelque chose
If Not rst Is Nothing Then
'Copier les données à partir de A2 de Donnees
Sheets("Donnees").Range("A2").CopyFromRecordset rst
'Fermer le recordset (important)
rst.Close
End If
'Fermer la connexion (important)
cnx.Close
'Libérer les objets en mémoire
Set rst = Nothing
Set cnx = Nothing
Call creation
End Sub
Private Sub Worksheet_Activate()
If ComboBox1.ListCount = 0 Then
Dim rst As Object, cnx As Object
'ATTENTION : mettre le chemin réél du fichier dans cette ligne
Dim Path As String: Path = ThisWorkbook.Path & "\"
'Création de la connexion au fichier
Set cnx = CreateObject("Adodb.connection")
cnx.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & Path & "BDD_fiches métiers.xls"
'Interrogation du fichier
Set rst = cnx.Execute("SELECT `METIER` FROM [BDD$] WHERE NOT ISNULL(`METIER`);")
'Retour Recordset
If Not rst Is Nothing Then
ComboBox1.List = Application.Transpose(rst.GetRows)
rst.Close
End If
'Fermeture connexion
cnx.Close
'Libération des objets mémoires
Set rst = Nothing
Set cnx = Nothing
End If
'S'il n'y a rien dans la combobox ne pas autoriser les boutons ni la combobox
If ComboBox1.ListCount = 0 Then
CommandButton1.Enabled = False
ComboBox1.Enabled = False
bErrMetier = True
'Signaler l'erreur
MsgBox "Une erreur est survenue lors de la création de la liste des métiers!" & vbCrLf & "Veuillez contacter DIEGO", vbExclamation, "Liste métier"
Else
'Sinon indiquer à la variable de niveau module qu'il n'y a eu aucune erreur de combo list
bErrMetier = False
'Autoriser le commandButton et la combo
CommandButton1.Enabled = True
ComboBox1.Enabled = True
End If
End Sub