Bonjour,
Dans le cadre professionnel, il m'a été confié un projet, créer une base de données Excel. Pour un soucis de confidencialité, je ne me pencherais pas plus sur le sujet.
La création de la base a pris beaucoup de temps, et surtout son remplissage fut exténuant.
Je suis presque à la date butoire pour la remise du projet, et il me manque la mise en place d'un moteur de recherche fonctionnel.
Je me suis mis à l'apprentissage du VBA afin de réaliser un code valable. Mais la complexité et la dureté de compréhension du VBA m'a poussé vers du bricolage de code. (Je commence à comprendre un peu la logique du code mais pas plus...)
Le sujet:
A partir d'un mot ou un numéro, et grace à un code VBA de comparaison (moteur de recherche), une liste de résultats s'affiche.
Ces résultats seront des liens hypertext qui pointeront vers l'adresse de la cellule, dont sa valeur est égale ou contient une partie du mot ou du numéro recherché.
Mes débuts de solutions:
Une feuille "Search Engine", est dédiée pour les résultats du moteur de recherche.
Sur cette même feuille, il y a deux boutons.
L'un est un effacement des résultats:
L'autre fait appel à une inputbox afin de récupérer le mot ou numéro a recherché, puis fait appel à une fonction de recherche (que j'ai copié d'une des réponse d'aides pour un autre topic):
Enfin, là où se pose tout mon problème (enfin je crois), c'est cette fonction de recherche.
Je fait une recherche dans une feuille précise de mon classeur.
Je définis une plage de cellules dans laquelle faire la recherche.
Et puis les résultats s'affichent sous forme de liens hypertext (hypothèse).
Et le résultat, c'est que rien ne s'affiche.
Voila le code:
Par contre modifant le code , en enlevant la délimitation de la plage, la recherche se fait bien par mot avec un affichage des résultats (en lien hypertext).
Cependant la recherche n'est concluante qu'avec qu'avec des mots. Pour les numéros il ne se passe rien.
Exemple du code:
Je tiens à préciser que les cellules dans tout le classeur sont définies en standard.
Je me tiens à votre disposition pour des questions que vous vous poseriez.
Merci pour votre aide,
KuZ
Dans le cadre professionnel, il m'a été confié un projet, créer une base de données Excel. Pour un soucis de confidencialité, je ne me pencherais pas plus sur le sujet.
La création de la base a pris beaucoup de temps, et surtout son remplissage fut exténuant.
Je suis presque à la date butoire pour la remise du projet, et il me manque la mise en place d'un moteur de recherche fonctionnel.
Je me suis mis à l'apprentissage du VBA afin de réaliser un code valable. Mais la complexité et la dureté de compréhension du VBA m'a poussé vers du bricolage de code. (Je commence à comprendre un peu la logique du code mais pas plus...)
Le sujet:
A partir d'un mot ou un numéro, et grace à un code VBA de comparaison (moteur de recherche), une liste de résultats s'affiche.
Ces résultats seront des liens hypertext qui pointeront vers l'adresse de la cellule, dont sa valeur est égale ou contient une partie du mot ou du numéro recherché.
Mes débuts de solutions:
Une feuille "Search Engine", est dédiée pour les résultats du moteur de recherche.
Sur cette même feuille, il y a deux boutons.
L'un est un effacement des résultats:
Code:
Sub effacer_plage()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.Interactive = False
If MsgBox("Etes-vous certain de vouloir supprimer le contenu des résultats ?", vbYesNo, "Demande de confirmation") = vbYes Then
Range("A9:A65536").ClearContents
MsgBox "Le contenu des résultats a été effacé !"
End If
Range("A4").Select
Application.Interactive = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
L'autre fait appel à une inputbox afin de récupérer le mot ou numéro a recherché, puis fait appel à une fonction de recherche (que j'ai copié d'une des réponse d'aides pour un autre topic):
Code:
Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.Interactive = False
reponse = InputBox("Veuillez saisir la référence ou le nom de l'article ?", "Recherche d'articles")
Call recherche(reponse)
Range("A4").Select
Application.Interactive = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Enfin, là où se pose tout mon problème (enfin je crois), c'est cette fonction de recherche.
Je fait une recherche dans une feuille précise de mon classeur.
Je définis une plage de cellules dans laquelle faire la recherche.
Et puis les résultats s'affichent sous forme de liens hypertext (hypothèse).
Et le résultat, c'est que rien ne s'affiche.
Voila le code:
Code:
Sub recherche(mot)
On Error GoTo fin
ligne_r = 9
For Each ws In Sheets
If ws.Name = "Capacité - Capacities" Then
Set maplage = Worksheets("Capacité - Capacities").Range(Cells(1, 1), Cells(65536, 2))
With maplage
Set c = .Find(mot, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Sheets("Moteur de recherche").Cells(ligne_r, 1).Select
Selection.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & ws.Name & "'!" & c.Address, TextToDisplay:=c.Value
ligne_r = ligne_r + 2
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
trouve = True
End If
End With
End If
Next ws
If Not trouve Then MsgBox ("Pas de " & mot & " trouvé dans ce fichier")
fin:
End Sub
Par contre modifant le code , en enlevant la délimitation de la plage, la recherche se fait bien par mot avec un affichage des résultats (en lien hypertext).
Cependant la recherche n'est concluante qu'avec qu'avec des mots. Pour les numéros il ne se passe rien.
Exemple du code:
Code:
Sub recherche(mot)
On Error GoTo fin
ligne_r = 9
For Each ws In Sheets
If ws.Name = "Capacité - Capacities" Then
With ws.Cells
Set c = .Find(What:=mot, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Sheets("page d'ouverture").Cells(ligne_r, 1).Select
Selection.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
ws.Name & "!" & c.Address, TextToDisplay:=c.Value
ligne_r = ligne_r + 1
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
trouve = True
End If
End With
End If
Next ws
If Not trouve Then MsgBox ("Pas de " & mot & " trouvé dans ce fichier")
fin:End Sub
Je tiens à préciser que les cellules dans tout le classeur sont définies en standard.
Je me tiens à votre disposition pour des questions que vous vous poseriez.
Merci pour votre aide,
KuZ
Dernière édition: