Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Améliorer une macro

thomashty

XLDnaute Occasionnel
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 ?

Merci de votre aide

Thomas
 

Pièces jointes

  • Outil à modifier.xlsm
    143.5 KB · Affichages: 79

thebenoit59

XLDnaute Accro
Re : Améliorer une macro

Bonjour Thomas, bonjour Dranreb.

Je ne suis pas certain que ce soit plus fluide pour le moment, mais avec des liste de documents plus importantes ça le sera certainement.
 

Pièces jointes

  • thomashty - Améliorer une macro.xlsm
    145.7 KB · Affichages: 40

Dranreb

XLDnaute Barbatruc
Re : Améliorer une macro

Bonjour.

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.
 

thomashty

XLDnaute Occasionnel
Re : Améliorer une macro

Bonjour Benoît,

C'est génial c'est beaucoup plus fluide ! Puis je vous demander comment vous avez modifier le système de recherche ?

J'ai juste une petite question, lorsque la recherche ne donne rien, la macro entre en mode debogage, est-il possible d'éviter ça ?

Le bug se trouve à ce niveau :

Code:
tIndex = Application.Transpose(Split(d(1), ":"))
tListBox = Application.Index(TableauListe, tIndex, 6)
tListe = Application.Index(TableauListe, tIndex, Array(1, 2, 3, 4, 5, 6, 7))

Merci encore pour votre aide !!

Bien à vous

Thomas
 
Dernière modification par un modérateur:

thebenoit59

XLDnaute Accro
Re : Améliorer une macro

Pour l'erreur, ajoute cette partie :

Code:
'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.
 

thomashty

XLDnaute Occasionnel
Re : Améliorer une macro

J'ai (déjà) une question...

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"

Merci d'avance

Thomas
 

Dranreb

XLDnaute Barbatruc
Re : Améliorer une macro

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.
 

thebenoit59

XLDnaute Accro
Re : Améliorer une macro

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.
 

thomashty

XLDnaute Occasionnel
Re : Améliorer une macro

Super ça fonctionne !

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
 

Discussions similaires

Réponses
15
Affichages
496
Réponses
6
Affichages
332
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…