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: