Recherche treeview

josef140

XLDnaute Nouveau
Bonjour,
j'ai une treeview qui représente l'arborescence d'une entreprise, je voudrais effectuer une recherche dans l'arbo sans prendre en compte les majuscules et les espaces. le code que je possède pour le moment ne recherche que si le mot correspond exactement à ce qui est dans l'arborescence. autrement dit quand je recherche le mot Mécaniques il faut taper Mécaniques, si je tape mecaniques(minuscules et sans accent) il ne le trouve pas voilà merci d'avance.

le code :

rivate Sub CommandButton3_Click()
Dim nodX As Node

Dim Cible As String
Cible = InputBox("Veuillez saisir le mot recherché", "Recherche")
If Cible = "" Then Exit Sub
For Each nodX In TreeView1.Nodes
If nodX.Text = Cible Then
nodX.Selected = True
TreeView1.SetFocus
Exit Sub
End If
Next
MsgBox "Valeur " & Cible & " non trouvée dans l'arborescence."

End Sub
 

Habitude

XLDnaute Accro
Re : Recherche treeview

Bonjour

Comme ceci
A Tester

Code:
Function SansAccent(C$) as string
 a = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ" : s = "AAAAAAEEEEIIIINOOOOOUUUUY"
 For i = 1 To Len(C)
 u = InStr(1, a, Mid(C, i, 1), 0): If u Then Mid(C, i, 1) = Mid(s, u, 1)
 Next i
 SansAccent= C
End Function


Private Sub CommandButton3_Click()
Dim nodX As Node, Cible As String
Cible = InputBox("Veuillez saisir le mot recherché", "Recherche")
If Cible = "" Then Exit Sub

 For Each nodX In TreeView1.Nodes
     If SansAccent(ucase(trim(Nodx.Text))= SansAccent(ucase(trim(Cible)) Then
          nodX.Selected = True : TreeView1.SetFocus : Exit Sub
     End If
 Next nodX
MsgBox "Valeur " & Cible & " non trouvée dans l'arborescence."
End Sub
 

josef140

XLDnaute Nouveau
Re : Recherche treeview

Bonjour,
je vous remercie tout d'abord pour vos réponses ,
@ jpb388: ton code marche bien merci.
@Habitude: le code ne marche pas il m'indique qu'il faut déclarer une des variables.
sinon ce que j'aimerais avoir c'est une recherche qui néglige les espaces le problème c'est que ce code ne recherche que si le mot est identique : ex:chaudière fioul il faut taper le mot exactement comme il est sinon il ne le retrouve pas.
 

jpb388

XLDnaute Accro
Re : Recherche treeview

Bonjour
Habitude j'espère que tu ne m'en voudras pas d'avoir adapté ton code
j'ai repris les fonctions et les ai adapté sans le treeview( car je ne connais pas)

Function SansAccent(C$) As String
Dim A$, S$, U%, I%
A = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ": S = "AAAAAAEEEEIIIINOOOOOUUUUY"
For I = 1 To Len(C)
U = InStr(1, A, Mid(C, I, 1), 0): If U Then Mid(C, I, 1) = Mid(S, U, 1)
Next I
SansAccent = C
End Function


Private Sub Sub_appelante()
Dim Cible As String
Cible = InputBox("Veuillez saisir le mot recherché", "Recherche")
If Cible = "" Then Exit Sub
' la j'ai mis une cellule pour le test
If SansAccent(UCase(Trim(Range("d5")))) = SansAccent(UCase(Trim(Cible))) Then
MsgBox "Valeur " & Cible & " trouvée dans l'arborescence."
Else
MsgBox "Valeur " & Cible & " non trouvée dans l'arborescence."
End If
End Sub


Adresse tes remerciements à Habitude car c'est lui qui a fait le travail
 

josef140

XLDnaute Nouveau
Re : Recherche treeview

bonjour,
merci bcp pour votre aide jpb388 le code marche nickel maintenant j'aimerais bien si vous avez une idée pour négliger les espaces ou par exemple quand je cherche le mot chaudière fioul si je tape que chaudière il me la trouve , merci bcp les gars.:D
 

josef140

XLDnaute Nouveau
Re : Recherche treeview

bonjour ,
Le répertoire est dans une feuille Excel. l'arborescence est représenté en fonction des ligne et des colonnes sous la forme suivante:
A1 B1
"""""""C2
"""""""""""D3
""""B4
"""""""C5
"""""""""""D5
Par contre quand je cherche chaudiere il ne la trouve pas puisque c'est chaudière fioul qui est par exemple dans la cellule C5
 

jpb388

XLDnaute Accro
Re : Recherche treeview

Bonjour
a toi de l'adapter au treeview, mais quand il y aura des chaudières fioul et des chaudières électriques comment cela va se passer?

Option Explicit

Function SansAccent(C$) As String
Dim A$, S$, U%, I%
A = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ": S = "AAAAAAEEEEIIIINOOOOOUUUUY"
For I = 1 To Len(C)
U = InStr(1, A, Mid(C, I, 1), 0): If U Then Mid(C, I, 1) = Mid(S, U, 1)
Next I
SansAccent = C
End Function

Private Sub Sub_appelante()
Dim Cible As String, MaStr$, Pos%
Cible = "chaudiere" 'InputBox("Veuillez saisir le mot recherché", "Recherche")
If Cible = "" Then Exit Sub
' la j'ai mis une cellule pour le test
Pos = InStr(1, Range("d5"), " ")
MaStr = Left(Range("d5"), Pos)

If SansAccent(UCase(Trim(MaStr))) = SansAccent(UCase(Trim(Cible))) Then
MsgBox "Valeur " & Cible & " trouvée dans l'arborescence."
Else
MsgBox "Valeur " & Cible & " non trouvée dans l'arborescence."
End If
End Sub


a+
jp
 

josef140

XLDnaute Nouveau
Re : Recherche treeview

Bonjour jp,
Merci tout d'abord pour ton aide précieux,
Le problème c'est que ton code ne traite que le mot spécifique "chaudière" j'ai essayé de l'adapté mais ça ne marche pas.
sinon pour le problème de recherche en cas de chaudières fioul et des chaudières électriques je ne sais pas encore ce que je dois faire, mais je vais essayer avec un code qui affiche une fenêtre liste et ça sera à l'utilisateur de choisir ce qui veut.

Mon code actuel :
Code:
Function SansAccent(C$) As String
Dim A$, S$, U%, I%
A = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ": S = "AAAAAAEEEEIIIINOOOOOUUUUY"
For I = 1 To Len(C)
U = InStr(1, A, Mid(C, I, 1), 0): If U Then Mid(C, I, 1) = Mid(S, U, 1)
Next I
SansAccent = C
End Function


Private Sub CommandButton3_Click()
Dim nodX As Node, Cible As String
Cible = InputBox("Veuillez saisir le mot recherché", "Recherche")
If Cible = "" Then Exit Sub

 For Each nodX In TreeView1.Nodes
     If SansAccent(UCase(Trim(nodX.Text))) = SansAccent(UCase(Trim(Cible))) Then
          nodX.Selected = True: TreeView1.SetFocus: Exit Sub
     End If
 Next nodX
MsgBox "Valeur " & Cible & " non trouvée dans l'arborescence."
End Sub
 
Dernière édition:

jpb388

XLDnaute Accro
Re : Recherche treeview

Bonjour
tu prend le code que je t'ai fait et a la place de Range("d5") et tu met nodX.Text soit 2 endroits a changer (lignes roses)
pour le inputbox c'est pour les essai cela évite de taper chaudière a chaque essai si c'est bon il faut évidemment l'enlever et remettre l'inputbox en service
et ne toucher a rien d'autre
a+
jp
 

Discussions similaires

Réponses
16
Affichages
1 K

Statistiques des forums

Discussions
312 684
Messages
2 090 916
Membres
104 698
dernier inscrit
miespetico