Recherche intuitive VBA (EN COURS DE RESOLUTION)

misteryann

XLDnaute Occasionnel
Bonsoir à toutes et tous
Voila le soucis:
j'ai voulu transposer un code de recherche intuitive d'un classeur (qui marche) vers un autre mais cela ne fonctionne pas.

Principe : on sélectionne le type de recherche (DI ou Libellé) puis dans la combobox on tape les mots clefs.

Si vous avez une idée...
(Je suis fan des commentaires en fin de ligne de code)

Cordialement.
Misteryann
 

Pièces jointes

  • Classeur exemple.xlsm
    46 KB · Affichages: 44

laurent950

XLDnaute Accro
Bonjour, BrunoM45, misteryann

Je viens de voir mais je connais pas la finalité de cette action :
a partir de qu'elle valeurs du fichier excel il faut alimenté la : ListBox

Complément
La correction de BrunoM45 (ajouté la ligne pour alimenter la Listbox)

ajouté a la fin du module : Private Sub UserForm_Initialize()
' Prépare la combobox6 avec l'option par défaut
AlimComboBox ("DI")
'et
AlimComboBox "Libellé"

ajouté a la fin du module : Sub AlimComboBox(Titre As String)
' ComboBox6
Me.ComboBox6.ListIndex = -1
Me.ComboBox6.List = choix1
Me.ComboBox6.SetFocus
' ListBox1
Me.ListBox1.List = choix1
End With

je connais pas trop la finalité du code BrunoM45 mais j'ai essayé

cdt
 
Dernière édition:

misteryann

XLDnaute Occasionnel
Re Bruno et Laurent

Bruno: oui j'ai essayé et cela fonctionne

Laurent: la feuilles 'Base" est le "four tout" du fichier
Les feuilles "DI, Devis et BdC" sont justes des tableaux alimentés pour mon chef (ils aiment bien les tableaux les chefs :D)

Pour expliquer le fichier:
tout part d'une DI (Demande d'Intervention) qui va générer un Devis puis un Bon de Commande (BdC)

Donc une feuille "BASE" (le four tout) ou on va retrouver toutes les infos (de la DI jusqu'au paiement du BdC)
"DI, Devis et BdC" sont des tableaux alimentés pour mon chef avec les infos juste essentielles

La multipage DI peut évoluer (via la Frame "intervention" par exemple)

Normalement la multipage DEVIS sera figée (car si devis accepté : OK on incrémente les tableaux, sinon rien ne se passe)
Dans cette multipage, je vais être amené à faire une recherche de DI

La multipage Bon de Commande évoluera
Dans cette multipage, je vais être amené à faire une recherche de Devis

J'espère avoir été explicite et merci de votre aide

Cordialement
 

laurent950

XLDnaute Accro
BrunoM45,
Il faudrait en faite utilisée avec des tableaux, des tableaux indépendant stockés dans un module de
classe. stocké l'information et venir la rechercher par la suite !
je ferais plutôt comme cela, car avec le systéme Set mondico = CreateObject("Scripting.Dictionary" c'est
pas très souple.
Vous en penser quoi ?
 

misteryann

XLDnaute Occasionnel
Re
Je ne suis pas Clint Tuttle :p

j'essaye avec mes quelques moyens de faire un fichier qui fonctionne bien, simple et intuitif

J'ai déjà un fichier VBA qui permet de gérer de la DI au BdC qui marche bien (avec envoi de mail, création de pdf (grâce au forum et au site de JB)
Sauf que la hiérarchie demande plus
Aussi, le passe par une USF avec multipages car je pourrai rentrer plus d'infos
Sauf qu'il y a quelques Couac...

Gossiny était un scénariste et ne savait pas dessiner, Uderzo un réalisateur
Je suis un (tout) petit Gossiny, le Forum un Uderzo

Cordialement
 

laurent950

XLDnaute Accro
BrunoM45 et misteryann,

J'ai préparer c'est plus simple avec les modules de classes et aussi les variables tableaux.
Il faut juste savoir avec qu'elle colonne des feuilles excel ont alimentes les combobox et listebox

J'ai fait l'amorce de votre fichier, ensuite cela peux se compléter facilement

je connais pas les régles, et donc je sais pas avec quoi alimenté quoi ! (mais initialisation de l usurform est bien plus
rapide avec moins de lignes de code

cdt
 

Pièces jointes

  • Classeur exemple (3).xlsm
    42.7 KB · Affichages: 13

laurent950

XLDnaute Accro
BrunoM45
se bout de code sert a quoi l'action ?
Sub AlimComboBox()
With Sheets("DI")
col = Application.Match(titre, f.[A1:I1], 0)
If IsError(col) Then Exit Sub
Set mondico = CreateObject("Scripting.Dictionary")
mondico.CompareMode = vbTextCompare
a = Application.Transpose(f.Cells(2, col).Resize(f.Cells(65000, col).End(xlUp).Row).Value)
For i = LBound(a) To UBound(a)
If a(i) <> "" Then
b = Split(a(i), ",")
For j = LBound(b) To UBound(b)
mondico(b(j)) = ""
Next j
End If
Next i
choix1 = mondico.keys
Call Tri(choix1, LBound(choix1), UBound(choix1))
Me.ComboBox6.ListIndex = -1
Me.ComboBox6.List = choix1
Me.ComboBox6.SetFocus
End With
End Sub
 

misteryann

XLDnaute Occasionnel
Re

Cela fait parti de
Private Sub OptionButton1_Click()
titre = "DI": AlimComboBox
End Sub
Private Sub OptionButton2_Click()
titre = "Libell?": AlimComboBox
End Sub


Sub AlimComboBox()
With Sheets("DI")
col = Application.Match(titre, f.[A1:I1], 0)
If IsError(col) Then Exit Sub
Set mondico = CreateObject("Scripting.Dictionary")
mondico.CompareMode = vbTextCompare
a = Application.Transpose(f.Cells(2, col).Resize(f.Cells(65000, col).End(xlUp).Row).Value)
For i = LBound(a) To UBound(a)
If a(i) <> "" Then
b = Split(a(i), ",")
For j = LBound(b) To UBound(b)
mondico(b(j)) = ""
Next j
End If
Next i
choix1 = mondico.keys
Call Tri(choix1, LBound(choix1), UBound(choix1))
Me.ComboBox6.ListIndex = -1
Me.ComboBox6.List = choix1
Me.ComboBox6.SetFocus
End With


End Sub
Private Sub ComboBox6_Change()
If Me.ComboBox6.ListIndex = -1 And IsError(Application.Match(Me.ComboBox6, choix1, 0)) Then
Me.ComboBox6.List = Filter(choix1, Me.ComboBox6.Text, True, vbTextCompare)
Me.ComboBox6.DropDown
Else
ComboBox6_click
End If
End Sub
 

misteryann

XLDnaute Occasionnel
Re
Pour l'UserForm_Initialize() c'est cool sauf que les combos vont jusqu'à la dernière ligne du tableau (65000)

POUR
"il faut le fichier excel que j'ai poster et ajouter les en-tête de colonne sur chaque feuille
et mettre des labels devant les combox en rapport avec les en-tête pour poursuivre et savoir quoi
remplir"
Je ne comprends pas (mon dernier cours de BASIC remonte à l'ORIC ATMOS"
 

laurent950

XLDnaute Accro
Bonsoir,
Je pense qu'il faut préparer dans un premier temps le classeur excel :
- 1 ) Chaque Feuille les traiter comme une base de données access (dans le principes)
soit un tableau avec lignes et colonnes (et chaque en-tête de colonne doit être renseigné)
- 2) Organisé sa boite de dialogue multipage avec pour chaque (block = fram) le détail
chaque combobox ou listebox ect. (Noté l'information à côté)
- 3) ne pas faire trop grande la boite de dialogue
- 4) ensuite se ne sont que des règles a définir

compléter un fichier excel avec l'usurform + une mini base avec des données test
le code viendra tous seul par la suite

Remplir les champs label

corrigé : Pour l'UserForm_Initialize() c'est cool sauf que les combos vont jusqu'à la dernière ligne du tableau (65000)
Laurent
 

Pièces jointes

  • Classeur exemple (3).xlsm
    53 KB · Affichages: 4
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Information: il est possible de faire prendre en compte une recherche par mots clés ou une recherche intuitive à une ComboBox prise en charge par mon objet ComboBoxLiées.
 

Pièces jointes

  • CBxL.xlsm
    116.1 KB · Affichages: 17

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG