VBA : Moteur de recherche et exportation du résultat dans une autre feuille

tsikoudia91

XLDnaute Nouveau
Bonjour le forum,

J'ai demandé de l'aide sur des combobox liées ET indépendantes qui a été depuis résolue par dranreb.
Malheureusement, j'ai encore du mal à comprendre ce code très élaboré ce qui me retarde dans la mise en place finale de mon moteur de recherche. J'ai du louper un épisode car cela ne fonctionne pas. Au lieu d'avoir la ligne entière correspondante aux choix qui s'affiche dans la feuille "Résultat", j'obtiens des lignes qui n'ont rien à voir avec les sélections. Où est mon erreur ?

Je ne sais pas comment imbriquer mon code dans le sien, notamment en ce qui concerne la validation des contrôles de mon formulaire (voir module 1). D'ailleurs je ne sais même pas si ce que j'ai fait tient la route :eek:

L'un(e) de vous peut-il/elle jeter un coup d'oeil ?

Un grand merci pour toute l'aide que vous voudrez bien m'apporter sur ce sujet.

G.M.
 

Pièces jointes

  • Documentation juridique_XLD1.zip
    144.7 KB · Affichages: 61

Dranreb

XLDnaute Barbatruc
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

Bonjour.
Comme ça ça va mieux:
VB:
Private Sub CMBvalider_Click()
Dim N As Long, L As Long, C As Long, Ls As Long, T() As Variant

T = CBL.PlgTablo.Value
For N = 1 To UBound(TLgn)
   L = TLgn(N)
   Ls = Ls + 1
   For C = 1 To 15: T(Ls, C) = T(L, C): Next C
   Next N

Sheet3.[3:65536].ClearContents
Sheet3.Rows(3).Resize(Ls, 15).Value = T
Sheet3.Activate
Unload Me
End Sub
Remarque, il serait peut être plus prudent d'utiliser 2 tableaux. Comme ça alors:
VB:
Private Sub CMBvalider_Click()
Dim Te() As Variant, Le As Long, _
    Ts() As Variant, Ls As Long, N As Long, C As Long

Te = CBL.PlgTablo.Resize(, 15).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 15)
For N = 1 To UBound(TLgn)
   Le = TLgn(N)
   Ls = Ls + 1
   For C = 1 To 15: Ts(Ls, C) = Te(Le, C): Next C
   Next N
Sheet3.[3:65536].ClearContents
Sheet3.Rows(3).Resize(Ls, 15).Value = Ts
Sheets("Résultat").Activate
Unload Me
End Sub
À +
 
Dernière édition:

tsikoudia91

XLDnaute Nouveau
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

Merci Dranreb voilà qui est bien mieux :D

Mais comment puis-je indiquer que je veux conserver le même format c'est-dire, les couleurs, bordures, liens hypertextes ?
Puis-je intégrer un code du style "copy-paste" ? Dans la feuille "CD" par exemple, j'ai réussi (exploit !) à exporter les lignes contenant le mot "CD-ROM" et à conserver le format en utilisant le code "Union". Il faut dire qu'il y avait un seul critère...

Pour ce qui est de l'alimentation des différents contrôles (dans le Module 1) est-ce que je fais fausse route ?
 

Dranreb

XLDnaute Barbatruc
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

C'est un petit poil moins rapide, mais au fond plus simple:
VB:
Private Sub CMBvalider_Click()
Dim Le As Long, Ls As Long, N As Long
Sheet3.[3:65536].Delete
Ls = 2
For N = 1 To UBound(TLgn)
   Le = TLgn(N): Ls = Ls + 1
   CBL.PlgTablo.Rows(Le).Copy Destination:=Sheet3.Rows(Ls)
   Next N
Sheet3.Activate
End Sub
Pour ce qui est de la deuxième question, je crois vraiment depuis longtemps, que vous auriez intéret à mettre le support dans une seule colonne et à l'intégrer à la chaîne des combobox. Après tout on n'est pas obligé d'y choisir quelque chose si le support n'a pas d'importance. Quant aux dates elle pourraient faire l'objet de tests dans la boucle avant de "copier destiner".
 

tsikoudia91

XLDnaute Nouveau
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

beaucoup mieux ! :D
il est vrai que ça ralentit davantage mais au moins je suis sûre d'avoir les données.

Y-a-til un moyen d'alléger ceci ? il sert à vider la feuille de tout son contenu (bordures, couleurs, etc) sauf la deuxième ligne quand on revient sur la page de bienvenue. Le problème est que l'on "voit" la feuille se vider :$

Code:
Private Sub CommandButton1_Click()
'Affichage de la page 1'
Rows("3:65536").Select
    Selection.ClearContents
    Selection.Interior.ColorIndex = xlNone
    Selection.Borders.LineStyle = xlNone
Sheets("Bienvenue").Activate
End Sub
 

tsikoudia91

XLDnaute Nouveau
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

Mais… supprimez simplement les lignes ! C'est exactement la 1ère instruction exécutable de mon dernier CMBvalider_Click

(oh mon Dieu... tout parait si simple).... :D

Quant aux différents formats, je crois que vous avez raison : je vais tout simplement les supprimer ; je garde néanmoins la liste des CD-ROM.

Le code dans le module 1 vous semble correct ? (oui, j'ai besoin d'être rassurée : :p )

Merci.
 

Dranreb

XLDnaute Barbatruc
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

Mettez Option Explicit en tête de vos module.
Ça vous permettra de repérer immédiatement les variables non déclarées
(Comme par exemple TB_contenu qui est le même nom qu'une TextBox dans USFRecherche, mais ça ça n'a rien à voir) .
 

Dranreb

XLDnaute Barbatruc
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

Il faut essayer de programmer un maximum de choses interagissant avec les contrôles d'un userform dans le code de cet userform.
Maintenant, si ça peut vous arranger, les contrôles d'un userform sont quand même connus en tant que propriétés de cet userform dans tout le projet VBA. Mais ne souriez pas trop vite: Les dernières valeurs qui leur ont été affectées ne sont accessibles qu'à condition que l'userform soit encore chargé en mémoire. Notamment plus après un Unload ni une demande non gérée de fermeture par l'usager. Après un .Hide, si…
À +
 

tsikoudia91

XLDnaute Nouveau
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

mais je ne souris pas du tout ;)

La raison pour laquelle j'ai placé le code des différents contrôles du formulaire dans un module est que je ne voulais tout simplement pas le "perdre".

Corrigez-moi si je me trompe (mais pas trop fort merci :p ) je devrais imbriquer le code qui se trouve "en attente" dans le module 1 sous celui-ci

Code:
Private Sub CMBvalider_Click()
Dim Le As Long, Ls As Long, N As Long
Sheet3.[3:65536].Delete
Ls = 2
For N = 1 To UBound(TLgn)
   Le = TLgn(N): Ls = Ls + 1
   CBL.PlgTablo.Rows(Le).Copy Destination:=Sheet3.Rows(Ls)
   Next N
Sheet3.Activate
Unload USFrecherche
End Sub

Par ailleurs, comment faire en sorte que le bouton "valider" soit actif dès l'ouverture du formulaire ?
 

Dranreb

XLDnaute Barbatruc
Re : VBA : Moteur de recherche et exportation du résultat dans une autre feuille

Oui, c'est mieux vu. Mais vous n'espérez tout de même pas, j'espère, que ça limitera le remplissage de Résultat à ce qui sera filtré ?
Car ça ce n'est pas possible. Pour cela, il faudrait faire des test, pour les dates, dans la boucle, voire plus précocement dans la procédure CBL_Résultat, en fabriquant une TlgnBis ne comportant que les lignes qui sont dans la période. Et pour le support, le plus simple serait d'en permettre le choix dans un ComboBox supplémentaire alimenté par une colonne unique.

Pour le 2ième point, vous parlez d'un vestige où une ListBox devait contenir le résultat des sélections dans les ComboBox. Mais il n'y a pas de ListBox dans votre userform, juste une TextBox nommée TB_Contenu. À quoi sert-elle ?
Enlevez les instructions où il est question de la propriété Enabled de ce bouton, si toutefois vous êtes sure que ça a un sens de pouvoir l'utiliser si rien n'a été choisi dans les ComboBox.
 
Dernière édition:

Discussions similaires

Réponses
27
Affichages
971

Membres actuellement en ligne

Statistiques des forums

Discussions
314 499
Messages
2 110 249
Membres
110 711
dernier inscrit
chmessi