Créer un annuaire Excel : rechercher dans les contacts en VBA et MYSQL
Cet article fait suite à l’article : Créer un annuaire en excel avec une base de donnée SQL. Vous pouvez retrouver les explications de cette création d’annuaire sur celui-ci ainsi que le sommaire.
Étape 3 : rechercher dans l’annuaire excel
Dans la première partie de l’explication, nous avons préparé notre fichier Excel, avec des macros VBA de recherche qui nous permettaient de rechercher avec chacune des lettres de l’alphabet. Nous allons maintenant lier ces macros avec une recherche SQL pour ressortir les personnes inscrites dans l’annuaire.
On va aussi rajouter une fonction de trie par défaut pour l’affichage des contacts.

- Macro par lettre
Avec cette macro, on va définir ce que l’on recherche, de manière à indiquer à la requête SQL ce qu’elle doit rechercher. On va ainsi réduire le nombre de macro dans notre fichier, et ainsi économiser son temps passé dessus !
Donc pour chaque lettre, on va créer une macro spécifique :
-
-
-
Sub lancementrechercheA()
-
-
Dim lettrestart As Variant
-
-
‘on indique quelle lettre on recherche
-
lettrestart = a
-
-
‘on vient la mettre dans une feuille caché
-
Sheets("liaison").Visible = True
-
Sheets("liaison").Select
-
-
Range("D29").Select
-
ActiveCell.FormulaR1C1 = "a"
-
-
ActiveWindow.SelectedSheets.Visible = False
-
-
‘et on lance la macro de recherche dans l’annuaire !
-
Application.Run "top_affiliés.xlsm!rechercheannuaire"
-
-
End Sub
-
Cette macro va nous permettre de définir une recherche par lettre. Cette macro doit être dupliqué pour chacune des lettres de l’alphabet !
Macro de Recherche
-
-
Sub rechercheannuaire()
-
-
‘on récup la bdd
-
-
Sheets("BDD").Visible = True
-
Sheets("BDD").Select
-
Dim server, uid, pwd, database As Variant
-
-
server = Range("E8")
-
uid = Range("E10")
-
pwd = Range("E12")
-
database = Range("E14")
-
ActiveWindow.SelectedSheets.Visible = False
-
-
‘on récup les valeurs
-
-
Dim nbdata, trie, trieR, lettrestart As Variant
-
-
Sheets("liaison").Visible = True
-
Sheets("liaison").Select
-
-
nbdata = Range("D27")
-
trie = Range("B26")
-
trieR = Range("D26")
-
lettrestart = Range("D29")
-
-
ActiveWindow.SelectedSheets.Visible = False
-
-
‘on vide les data si il y en a !
-
-
If nbdata > 6 Then
-
Sheets("annuaire").Select
-
Range("G7:O" & nbdata).Select
-
Selection.ClearContents
-
-
End If
-
-
‘ on vient indiquer que l’on fait une recherche ! ce qui nous permet par la suite d’éditer de supprimer des contacts
-
-
Sheets("annuaire").Select
-
Range("A1").Select
-
ActiveCell.FormulaR1C1 = "1"
-
-
‘on choisit le trie
-
If (trie = 1) Then
-
trieR = "nom"
-
End If
-
-
-
‘on déclare les variables de la BDD
-
-
‘Déclaration des variables BDD
-
Dim cnx As ADODB.Connection
-
Dim rst As ADODB.Recordset
-
-
‘Instanciation des variables
-
Set cnx = New ADODB.Connection
-
Set rst = New ADODB.Recordset
-
-
‘Définition de la chaîne de connexion
-
-
connstring = "driver={MySQL ODBC 3.51 Driver}; server=" & server & ";uid=" & uid & "; pwd=" & pwd & ";database=" & database
-
cnx.Open connstring
-
-
‘on va ici rechercher tous les noms qui commencent par la lettre que l’on a définit plus tôt !
-
rst.Open "SELECT nom, prenom, fonction, mail, tel1, tel2, adresse FROM annuaire WHERE nom like ‘" & lettrestart & "%’ ORDER BY " & trieR, cnx
-
-
‘on choisit la ligne de départ pour coller les valeurs !
-
b = 7
-
-
‘ici on dit : "si la requete retourne bien quelque chose, copie les valeurs comme ceci "
-
If Not rst.EOF Then
-
Do While Not rst.EOF
-
-
With Sheets("annuaire")
-
-
‘ici on selectionne la ligne et la colonne avec la fonction cells(ligne,colonne)
-
Cells(b, 8).Select
-
ActiveCell.Formula = rst(0) ‘rst(0) correspond au premier enregistrement de la requete…
-
Cells(b, 9).Select
-
ActiveCell.Formula = rst(1)
-
Cells(b, 10).Select
-
ActiveCell.Formula = rst(2)
-
Cells(b, 11).Select
-
ActiveCell.Formula = rst(3)
-
Cells(b, 12).Select
-
ActiveCell.Formula = rst(4)
-
Cells(b, 13).Select
-
ActiveCell.Formula = rst(5)
-
Cells(b, 14).Select
-
ActiveCell.Formula = rst(6)
-
-
‘on incrémente le b pour passer à la ligne suivante
-
b = b + 1
-
-
End With
-
rst.MoveNext ‘– Passage à l’enregistrement suivant
-
Loop
-
-
Range("E5").Select
-
-
Else
-
-
’si on a rien dans la bdd, on affiche le message suivant !
-
MsgBox "la recherche avec la lettre : " & lettrestart & " n’a retourné aucun résultat "
-
-
End If
-
-
End Sub
-
-
-
rst.Open "SELECT nom, prenom, URL, fonction, mail, tel1, tel2, adresse FROM annuaire ORDER BY " & trieR, cnx
-
-
-
rst.Open "SELECT nom, prenom, URL, fonction, mail, tel1, tel2, adresse FROM annuaire WHERE nom like ‘0%’ OR nom like ‘1%’ OR nom like ‘2%’ OR nom like ‘3%’ OR nom like ‘4%’ OR nom like ‘5%’ OR nom like ‘6%’ OR nom like ‘7%’ OR nom like ‘8%’ OR nom like ‘9%’ ORDER BY " & trieR, cnx
-
- Créer un annuaire en excel avec une base de donnée SQL
- Créer un annuaire Excel : la base de données (MYSQL)
- Réaliser et comprendre les sélections en VBA !
- Excel : Évitez les crises d’épilepsie !
- Passer en mode DEVELOPPEUR sur Excel !
On va ensuite écrire la macro de recherche dans la BDD sql, sous cette forme :
Avec cette fonction, on va retourner les enregistrements directement dans notre tableau depuis la base de données. L’avantage de passer dans la base de données, c’est que le temps d’exécution de cette requête est très rapide, à la différence des requêtes de recherche d’Excel en général.
On peut aussi adapter la fonction ci-dessus pour afficher l’ensemble des contacts en modifiant la requete SQL ce qui donne :
ou encore rechercher les contacts qui ont des chiffres dans leur nom ! (ça peut arriver !)
Voilà un peut pour la recherche, maintenant on va pouvoir passer à l’édition des contacts ; le rajout, la suppression.
Tags: excel, mysql excel, vba, vba excel, vba mysql, vba sql Posted in


Laisser un commentaire