Voici à quoi ressemble la base de connaissance finie :
textbox : Txt_search
combobox : cb_Clients
Bouton recherche : bttn_search
Listbox : lb_result
Checkbox : chkArchive
Imports System.IO Imports System.Windows.Forms.WebBrowser Imports System.Windows.Forms.Application Imports Microsoft.VisualBasic Imports Microsoft.Office Imports Microsoft.Office.Interop Public Class FRMKB 'variable des répertoires Dim sDirectory As String 'Variable de lecture des fichiers texte (Liste Client, Source Client, répertoire Archives) Dim sClientFile = IO.File.ReadAllLines("\\chemin\lsClient.txt", System.Text.Encoding.Default) Dim sLienClient As String() = IO.File.ReadAllLines("\\chemin\lsSource.txt", System.Text.Encoding.Default) Dim sLienArchive As String() = IO.File.ReadAllLines("\\chemin\lsArchive.txt", System.Text.Encoding.Default) Private Sub BttnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BttnSearch.Click 'On vide la listbox lb_result.Items.Clear() If sDirectory = "" Then MsgBox("Renseigner l'ensemble des champs", MsgBoxStyle.Critical) End If 'Défini les mots clés pour la recherche. Répertoire et mot clés inscrits dans les zones de texte Dim sKW1 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search.Text & "*") Dim sKW2 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search2.Text & "*") Dim sKW3 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search3.Text & "*") Dim sKW4 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search4.Text & "*") 'Si la zone de texte 1, n'est pas vide, on affiche le mot clé dans la listbox If Not txt_search.Text = String.Empty Then For Each sR1 As String In sKW1 lb_result.Items.Add(sR1) Next End If 'Si la zone de texte 2, n'est pas vide, on affiche le mot clé dans la listbox If Not txt_search2.Text = String.Empty Then For Each sR2 As String In sKW2 lb_result.Items.Add(sR2) Next End If 'Si la zone de texte 3, n'est pas vide, on affiche le mot clé dans la listbox If Not txt_search3.Text = String.Empty Then For Each sR3 As String In sKW3 lb_result.Items.Add(sR3) Next End If 'Si la zone de texte 4, n'est pas vide, on affiche le mot clé dans la listbox If Not txt_search4.Text = String.Empty Then For Each sR4 As String In sKW4 lb_result.Items.Add(sR4) Next 'Si la zone de texte 1 est vide, on demande de saisir 1 mot clé minimum ElseIf txt_search.Text = "" Then MsgBox("Veuillez Entrer un mot clé", MsgBoxStyle.Information) End If End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'Chargement du fichier client pour le ComboBox (il ouvre le fichier texte comportant la liste des clients Me.cb_Clients.Items.AddRange((System.IO.File.ReadAllLines("\\chemin\lsClient.txt", System.Text.Encoding.Default))) 'Charge la flashnews rtb_Info.LoadFile("\\chemin\FlashNews.txt", RichTextBoxStreamType.PlainText) rtb_Info.SelectionAlignment = ContentAlignment.TopCenter 'Expiration de la licence (a supprimer si vous ne souhaitez pas que ça expire Dim sDateEnd As Date = #4/1/2014# Dim sDate As Date = Date.Today Dim result As Integer = DateTime.Compare(sDateEnd, sDate) Dim relationship As String If result < 0 Then relationship = MsgBox("Licence Expirée", MsgBoxStyle.Critical) Me.Close() End If End Sub Private Sub cb_Clients_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb_Clients.SelectedIndexChanged 'on vide la listbox lb_result.Items.Clear() 'Alors là c'est plus embêtant, je vais tâcher d'être clair. 'On va faire 2 actions. 'Action 1 : transformer le répertoire initial de recherche pour aller faire une recherche dans le répertoire archive 'Action 2 : Si on sélectionne le client 0 (première ligne du fichier lsclient.txt), il va chercher dans le fichier lsSource.txt le chemin réseau pour ce client 'Le gros inconvéniant : Si on rajoute un même client dans la liste (donc case 12 dans le code), il faudra modifier le code pour qu'il soit pris en charge, donc une 'compilation du code à refaire. Select cb_Clients.SelectedIndex Case 0 'si la case à cocher archive est cochée on change le chemin pour qu'il aille chercher dans lsarchive.txt au lieu de lsSource. If chkArchive.Checked Then sDirectory = sLienArchive(0) Else 'sinon on fait la recherche dans lsSource.txt sDirectory = sLienClient(0) End If Case 1 If chkArchive.Checked Then sDirectory = sLienArchive(1) Else sDirectory = sLienClient(1) End If Case 2 If chkArchive.Checked Then sDirectory = sLienArchive(2) Else sDirectory = sLienClient(2) End If Case 3 If chkArchive.Checked Then sDirectory = sLienArchive(3) Else sDirectory = sLienClient(3) End If Case 4 If chkArchive.Checked Then sDirectory = sLienArchive(4) Else sDirectory = sLienClient(4) End If Case 5 If chkArchive.Checked Then sDirectory = sLienArchive(5) Else sDirectory = sLienClient(5) End If Case 6 If chkArchive.Checked Then sDirectory = sLienArchive(6) Else sDirectory = sLienClient(6) End If Case 7 If chkArchive.Checked Then sDirectory = sLienArchive(7) Else sDirectory = sLienClient(7) End If Case 8 If chkArchive.Checked Then sDirectory = sLienArchive(8) Else sDirectory = sLienClient(8) End If Case 9 If chkArchive.Checked Then sDirectory = sLienArchive(9) Else sDirectory = sLienClient(9) End If Case 10 If chkArchive.Checked Then sDirectory = sLienArchive(10) Else sDirectory = sLienClient(10) End If Case 11 If chkArchive.Checked Then sDirectory = sLienArchive(11) Else sDirectory = sLienClient(11) End If Case Else cb_Clients.SelectedIndex = False End Select End Sub Private Sub BttnReset_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BttnReset.Click 'Si on clique sur Clear ça vide tout et ça rafraichi le flashnews lb_result.Items.Clear() sDirectory = "" txt_search.Text = "" txt_search2.Text = "" txt_search3.Text = "" txt_search4.Text = "" cb_Clients.Text = "" chkArchive.Checked = False rtb_Info.LoadFile("\\chemin\FlashNews.txt", RichTextBoxStreamType.PlainText) rtb_Info.SelectionAlignment = ContentAlignment.TopCenter End Sub Private Sub lb_result_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lb_result.DoubleClick 'Si on double clic sur un ligne de la listbox ça ouvre le document, que ça soit du Word, Excel, PPT, PDF.... Process.Start(fileName:=lb_result.SelectedItem) End Sub End Class
Entrer sur chaque ligne le nom des clients souhaités
Ne surtout pas oublier l'anti slash à la fin (même avec des espaces pas besoin de guillemets)
ça va être la même que le lsSource.txt mais avec un autre répertoire
Code simple permettant de rechercher des procédures dans des répertoires par mot clés.
Exemple de recherche possible : Si je tape dans "txt_search" incident et dans "txt_search2 " imprimante
Il va sortir tous les articles contenant dans le titre incident et imprimante
Exemple : Incident imprimante.doc, incident disque dur.doc, configuration imprimante.doc etc.
Le flashnews peut être modifié sans recompilation, mais le refresh se fera après un clic sur le bouton "clear" ou après une réouverture de l'appli. Sinon il faut rajouter un timer.
Si on tape en mot clé dans txt_search uniquement "pilote imprimante", il sortira tous les fichiers dont le titre contient à la suite "pilote imprimante". Mais il ne trouvera pas " pilote de l'imprimante" ou "pilote impression", d'où la recherche sur 4 zones de texte.
Ce code ne permet pas de rajouter sans modification de celui-ci d'autres clients (pas plus de 12) et chemin dans les fichiers textes. Il faudra alors recompiler le code en rajoutant dans la section :
Private Sub cb_Clients_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb_Clients.SelectedIndexChanged Case 12 If chkArchive.Checked Then sDirectory = sLienArchive(11) Else sDirectory = sLienClient(11) End If Case 13 etc.