Bonjour à tous, je souhaiterais rendre plus rapide une macro, je m'explique :
Il y a une "page d'accueil", aller dans "ajouter un document", MDP : "toto".
Ensuite vous avez une feuille "liste de documents" qui s’ouvre, qui est en réalité une base de données,
ET vous avez une feuille "zone de recherche" qui vient chercher dans la base de donnée à travers la colonne "description".
Mon problème est : il n'y a que 40 documents dans cette BDD et le système de recherche a déjà une latence... auriez vous une alternative pour le rendre plus rapide ?
Je voulais dire que j'ai une solution facile à mettre en œuvre au moyen de 5 modules de service dont 3 de classe dont j'ai joint de nombreux exemples d'applications dans des discussions qu'on peut retrouver en tapant "ComboBoxLiées" dans la zone de recherche.
'On vérifie si le dictionnaire est vide
If d(1) = "" Then MsgBox "Pas de résultats": Exit Sub
'On enregistre les différents tableaux
Pour que ce soit plus fluide, j'ai enregistré la Liste dans un tableau virtuel.
Ensuite je n'ai pas décomposé le texte de recherche.
Le traitement des accents se réalise avec une fonction de BoisGontier.
Ensuite pour ne pas alimenter la ListBox et les résultats avec une boucle, j'ai extrait de la Liste de base, l'index des lignes répertoriées dans le dictionnaire.
Je te laisse analyser le code en pas à pas et si tu as une question je te filerai un coup de pouce.
Ah oui, j'ai ajouté un Boolean, pour éviter de devoir enregistrer le tableau à chaque boucle, tu le retrouves en début de procédure et également au niveau du bouton valider de ton userform.
Avec l'ancien système de recherche, les pluriels - mots de liaison - accents... étaient ignorés. Là ce n'est plus le cas, pensez vous que c'est possible de le faire ? exemple: "appareil app" donne -> "appareils d'appuis"
Si la recherche est effectuée au moyen d'un objet ComboBoxLiées depuis le même UserForm que celui qui sert à mettre à jour la base (modification ou ajout proposée automatiquement selon préexistence ou non), il est possible d'y adjoindre une recherche intuitive sur certaines ComboBox dont on lui a confié la charge: propose alors la liste des valeurs contenant le texte tapé.
Aussi possible: une recherche de mots clés.
Je viens de comprendre ton intérêt de découper le terme.
Code:
'On découpe le terme
temp = Split(TextBox1.Text, " ")
'On va chercher les références sur la colonne 6 du tableau virtuel
Set d = CreateObject("Scripting.Dictionary")
For i = LBound(TableauListe) To UBound(TableauListe)
For j = LBound(temp) To UBound(temp)
If UCase(sansAccent(TableauListe(i, 6))) Like "*" & UCase(sansAccent(temp(j))) & "*" Then
Trouver = True
Else: Trouver = False: Exit For
End If
Next j
If Trouver = True Then
If Not d.exists(1) Then
d(1) = i
Else: d(1) = d(1) & ":" & i
End If
End If
Next i
En espérant que le code soit toujours aussi fluide.
N'oublie pas de déclarer en Public Trouver As Boolean.
Néanmoins j'ai quelques bugs parfois, si vous testez avec "pont rail" par exemple j'ai un bug à ce niveau :
Code:
'On colorie le fond
With Sheets("Liste de documents")
For i = LBound(tIndex) To UBound(tIndex)
.Cells(tIndex(i, 1) + 2, "F").Interior.ColorIndex = 24
Next i
End With