Microsoft 365 Liste déroulante recherche rapide

rubis54

XLDnaute Occasionnel
Bonjour à tous,
j'aurai besoin de votre aide pour ma recherche rapide.

Alors dans mon stock il y a une combobox qui me sert de recherche rapide. Alors lorsque je tape les deux premières lettres il m'affiche tous les articles mélangés qui débutent ou qui contiennent ces lettres.
J'aurai bien aimé qu'il ne m'affiche que les articles qui commencent par ces lettres.
Alors est ce que cela est possible ? je vous laisse le code, si cela suffit pour corrigé.

Private Sub ComboBox1_Change()
Dim idx As Variant
If Me.ComboBox1 <> "" Then
Valeurs = Application.Transpose(Range("Tableau2[Désignation]"))
idx = Application.Match(Me.ComboBox1, Valeurs, 0)
If IsError(idx) Then
Me.ComboBox1.List = Filter(Valeurs, Me.ComboBox1.Text, True, vbTextCompare)
Me.ComboBox1.DropDown
Else
Application.Goto Range("Tableau2").Rows(idx), True
End If
End If

End Sub


Merci d'avance à vous pour l'aide et vos réponses.

Cdt Rubis
 
Solution
1633970209225.png


Supprimer dans la feuille Stock :
  • Private Sub CommandButton1_Click()
  • Private Sub ComboBox1_Change

fanch55

XLDnaute Barbatruc
Bonsoir,
Normal, la fonction Filter recherche le mot dans la chaine où qu'il soit et ne laisse que 2 options : afficher ce qui a été trouvé ou l'inverse .

Essayez ce code ( il est à noter que vous auriez pu filtrer directement le tableau .... ) :
VB:
Private Sub ComboBox1_Change()
Dim Idx As Variant
    Me.ComboBox1.TopLeftCell.Activate   ' 2 activates distincts car sinon l'affichage
    Me.ComboBox1.Activate               ' du Dropdown peut être n'importe quoi
    
    Idx = 0
    [Tableau2].AutoFilter Field:=2, Criteria1:="=" & Me.ComboBox1 & "*"
    If [Tableau2].ListObject.DataBodyRange.Height > 0 _
    Then Idx = [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Count
    
    Select Case Idx
        Case 0: Me.ComboBox1.List = [Tableau2[Désignation]].Cells.Value
        Case 1: ActiveWindow.ScrollRow = [Tableau2].SpecialCells(xlCellTypeVisible).Rows(1).Row
                [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Rows(1).Select
                Me.ComboBox1.List = [Tableau2[Désignation]].Cells.Value
        Case Else:
            ' Pas de transpose car lignes probablement non contigues
            Me.ComboBox1.Clear
            For Each C In [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Cells
                Me.ComboBox1.AddItem C
            Next
            Me.ComboBox1.DropDown
    End Select
    [Tableau2].AutoFilter Field:=2

End Sub
 

rubis54

XLDnaute Occasionnel
Bonsoir,
Normal, la fonction Filter recherche le mot dans la chaine où qu'il soit et ne laisse que 2 options : afficher ce qui a été trouvé ou l'inverse .

Essayez ce code ( il est à noter que vous auriez pu filtrer directement le tableau .... ) :
VB:
Private Sub ComboBox1_Change()
Dim Idx As Variant
    Me.ComboBox1.TopLeftCell.Activate   ' 2 activates distincts car sinon l'affichage
    Me.ComboBox1.Activate               ' du Dropdown peut être n'importe quoi
  
    Idx = 0
    [Tableau2].AutoFilter Field:=2, Criteria1:="=" & Me.ComboBox1 & "*"
    If [Tableau2].ListObject.DataBodyRange.Height > 0 _
    Then Idx = [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Count
  
    Select Case Idx
        Case 0: Me.ComboBox1.List = [Tableau2[Désignation]].Cells.Value
        Case 1: ActiveWindow.ScrollRow = [Tableau2].SpecialCells(xlCellTypeVisible).Rows(1).Row
                [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Rows(1).Select
                Me.ComboBox1.List = [Tableau2[Désignation]].Cells.Value
        Case Else:
            ' Pas de transpose car lignes probablement non contigues
            Me.ComboBox1.Clear
            For Each C In [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Cells
                Me.ComboBox1.AddItem C
            Next
            Me.ComboBox1.DropDown
    End Select
    [Tableau2].AutoFilter Field:=2

End Sub
 

rubis54

XLDnaute Occasionnel
Bonsoir,
Normal, la fonction Filter recherche le mot dans la chaine où qu'il soit et ne laisse que 2 options : afficher ce qui a été trouvé ou l'inverse .

Essayez ce code ( il est à noter que vous auriez pu filtrer directement le tableau .... ) :
VB:
Private Sub ComboBox1_Change()
Dim Idx As Variant
    Me.ComboBox1.TopLeftCell.Activate   ' 2 activates distincts car sinon l'affichage
    Me.ComboBox1.Activate               ' du Dropdown peut être n'importe quoi
   
    Idx = 0
    [Tableau2].AutoFilter Field:=2, Criteria1:="=" & Me.ComboBox1 & "*"
    If [Tableau2].ListObject.DataBodyRange.Height > 0 _
    Then Idx = [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Count
   
    Select Case Idx
        Case 0: Me.ComboBox1.List = [Tableau2[Désignation]].Cells.Value
        Case 1: ActiveWindow.ScrollRow = [Tableau2].SpecialCells(xlCellTypeVisible).Rows(1).Row
                [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Rows(1).Select
                Me.ComboBox1.List = [Tableau2[Désignation]].Cells.Value
        Case Else:
            ' Pas de transpose car lignes probablement non contigues
            Me.ComboBox1.Clear
            For Each C In [Tableau2[Désignation]].SpecialCells(xlCellTypeVisible).Cells
                Me.ComboBox1.AddItem C
            Next
            Me.ComboBox1.DropDown
    End Select
    [Tableau2].AutoFilter Field:=2

End Sub
Re,
Désolé pour l'envoi sans commentaire !

Merci pour votre aide cela fonctionne très bien.
Par contre que vouliez vous dire par " il est à noter que vous auriez pu filtrer directement le tableau ..."

Cdt Rubis
 

rubis54

XLDnaute Occasionnel
Pas de pb, je peux regarder ☺️
Re Fanch55,

Voila le fichier en pièce jointe.
Par contre il ne faudra pas changer les colonnes car cette feuille est reliée à des autres modules comme la feuille des sorties , la feuille des commandes et celle des entrées stock.
Je me rappelle que le code ci-dessous qui se trouve dans la feuille STOCK sert à la mise à jour lors des sorties ou entrées de stock.
Tout au long des derniers essais cela fonctionnait pas mal. Maintenant je ne sais pas si tous les codes sont OK.
Donc si vous pourriez adapter votre recherche rapide sur mon fichier, ce serait le TOP.

Mais si vous pensez que il est bien comme il est, alors dites le moi.

Merci d'avance.
A+
 

Pièces jointes

  • STOCK.xlsm
    153.7 KB · Affichages: 5

fanch55

XLDnaute Barbatruc
Classeur modifié,
j'ai laissé votre combobox en parallèle, vous pouvez la supprimer si vous le voulez sans conséquences .

A noter: si vous voulez chercher un terme à l'intérieur de la colonne désignation,
faites le en commençant par le caractère * (astérisque).
Par exemple *frais affiche tous les produits ayant le mot frais dans leur désignation .
 

Pièces jointes

  • Copie de STOCK.xlsm
    159 KB · Affichages: 5

rubis54

XLDnaute Occasionnel
Classeur modifié,
j'ai laissé votre combobox en parallèle, vous pouvez la supprimer si vous le voulez sans conséquences .

A noter: si vous voulez chercher un terme à l'intérieur de la colonne désignation,
faites le en commençant par le caractère * (astérisque).
Par exemple *frais affiche tous les produits ayant le mot frais dans leur désignation .
Re Fanch55,

fonctionne très bien à part les recherchev liées à la feuille STOCK =SIERREUR(RECHERCHEV(F6;TableauStock;2;0);"") il ne m'affiche plus les résultats dans sur la feuille suivante, dans les cellules dans lesquelles je place les formules recherchev.
Pourtant le nom du tableau(TableauStock) n'a pas changé donc je ne comprends pas !
 

rubis54

XLDnaute Occasionnel
N'ayant pas les autres feuilles dans le classeur de test, je ne peux pas vous aider davantage ... 😩
Voila le classeur Fanch55,

alors sur la feuille SORTIE DU JOUR on fait pareil; en colonne B on tape les premières lettres on valide avec entrée et les articles s'affichent en colonne D.
Ensuite on choisi l'article on double clique sur lui et il s'affiche dans le formulaire à droite.
Ensuite avec la recherchev dans la colonne unité et PUHT il inscrit les données d de l'article du stock. On a plus qu'a saisir la qté et ainsi de suite.
Sauf que maintenant il ne me fait plus la recherchev alors que la formule à l'air correcte !

Merci d'avance à vous
 

Pièces jointes

  • Copie de STOCK.xlsm
    174.4 KB · Affichages: 5

rubis54

XLDnaute Occasionnel
Voila le classeur Fanch55,

alors sur la feuille SORTIE DU JOUR on fait pareil; en colonne B on tape les premières lettres on valide avec entrée et les articles s'affichent en colonne D.
Ensuite on choisi l'article on double clique sur lui et il s'affiche dans le formulaire à droite.
Ensuite avec la recherchev dans la colonne unité et PUHT il inscrit les données d de l'article du stock. On a plus qu'a saisir la qté et ainsi de suite.
Sauf que maintenant il ne me fait plus la recherchev alors que la formule à l'air correcte !

Merci d'avance à vous
Re Fanch,

j'ai trouvé l'erreur !
la formule recherchev était fausse sur le nouveau classeur.
donc il fallait que je transforme TableauStock2;2;0 en STOCK!Tableau2;2;0
et tout fonctionne.
C'est impeccable. MERCI Fanch55 .👍👍👍

Cdt Rubis
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren