Microsoft 365 Moteur de recherche dans un Userform

FRANCK LACOSTE

XLDnaute Nouveau
Bonsoir à tous,

j'ai cherché sur le forum mais rien ne se présente comme mon souhait.

j'ai crée un petit fichier excel afin d'avoir un formulaire de saisie pour une feuille de caisse, je complètes les infos nécessaires, un contrôle de montant s'effectue et cela alimente un tableau sur une autre feuille.

L'objectif rendre facile d'utilisation une feuille de caisse Excel à des non initiés.

Une fois bien en place le tableau va bien vivre et fortement se remplir, j'aimerai crée une fonction recherche permettant ainsi grâce a une sélection de critères plus ou moins précis, d'afficher dans un listview au sein de l'userform les résultats contenants, un ou des critères précédemment renseignés.

Parce qu'un exemple vaut mieux qu'un long discours je vous joint mon fichier, dans lequel j'ai déjà crée l'userform et les critères de recherche, c'est la programmation qui me pose problème.

D'autre part, je sais q'un contrôle + F pourrait m'aider, mais j'aime le côté simple d'utilisation, et la possibilité de cumuler plusieurs critères de recherche pour être plus précis.

Merci de votre aide précieuse.
 

Pièces jointes

  • Fdc Eure.xlsm
    116.6 KB · Affichages: 13

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Franck, le Forum

Celà avait l'air simple, mais pas tant que ça...
Voici une ébauche, j'aurais voulu faire mieux, mais si on est en FR avec le Séparateur de Décimal "," on perd la précision de "CDbl", car je suis contraint d'utiliser "Val"... C'est dommage, il y a sûrement un moyen de contourner, mais là j'abandonne, je vais dîner.... ça prend la tête !

Tu as quand même pas mal de boulot là dedans qui pourra t'inspirer... Mis à part les Montants un peu farfelus par moment après les décimales, le reste à l'air de bien fonctionner... Je ne me suis occupé QUE du UserForm2.

Bonne découverte
@+Thierry
 

Pièces jointes

  • XLD_FRANCK_LACOSTE_Fdc Eure.xlsm
    132.2 KB · Affichages: 19

FRANCK LACOSTE

XLDnaute Nouveau
Bonsoir Thierry,

Bon appétit, je suis aller jeter un oeil au code, je ne m'attendais pas ce que ce soit si important !

Merci pour ton travail, effectivement lors d'une recherche avec décimal il y a quelque loupé, enfin pas des loupés, plutôt une non différenciation, c'est un moindre mal, et j'ai utiliser ce système de séparateur, car sur le pavé numérique il y a le point, et sur le userform1 j'ai un contrôle sur le montant TTC et la somme des moyens de paiement renseignés, c'est peut être ce qui complique la chose.

J'aurai, si je peux abuser, aimer avoir dans le listview la visibilité des colonnes A à L pour identifier rapidement le moyen de paiement.

Pour le reste tout cela me semble parfait, encore Merci !
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonsoir Franck,

Oui c'est dommage, si tu es en mode "." la précision est bonne, pourquoi en FR on a voulu la virgule LoL !

Pour rajouter des Champs, c'est simple maintenant tu as le modèle pour 4 Champs, une ListView démarre en Base 0, donc il y a 4 Champs de 0 à 3...

C'est domage que tu n'aies pas spécifié avant, vu "l'emboitage" de tableaux dynamiques séquentiels... Pour toi maintenant c'est un travail de patience...

Au départ dans "L'Initialize" :

VB:
TabListViewHead = Array("No Client", "No Facture", "Montant TTC", "Date")
TabListViewCol = Array(130, 130, 120, 125)
TabListAlign = Array(lvwColumnLeft, lvwColumnLeft, lvwColumnRight, lvwColumnRight)

With ListView1
.Font.Bold = True
.View = 3
.Gridlines = True
.FullRowSelect = True
.LabelEdit = 1
.ColumnHeaders.Clear
    For x = 0 To 3
        .ColumnHeaders.Add x + 1, , TabListViewHead(x), TabListViewCol(x), TabListAlign(x)
    Next
End With


Il faut ajouter les champs par exemple "Carte Bleue", avec la largeur de colonne et left ou right...

VB:
TabListViewHead = Array("No Client", "No Facture", "Montant TTC", "Date", "Carte Bleue")
TabListViewCol = Array(130, 130, 120, 125, 120)
TabListAlign = Array(lvwColumnLeft, lvwColumnLeft, lvwColumnRight, lvwColumnRight, lvwColumnRight)

With ListView1
.Font.Bold = True
.View = 3
.Gridlines = True
.FullRowSelect = True
.LabelEdit = 1
.ColumnHeaders.Clear
    For x = 0 To 4
        .ColumnHeaders.Add x + 1, , TabListViewHead(x), TabListViewCol(x), TabListAlign(x)
    Next
End With


Ensuite dans le CommandButton1 il faut aussi synchroniser :

VB:
        For L = 1 To UBound(TabDataSheet, 1)
            ReDim Preserve TabDataArray(4, i)
               TabDataArray(0, i) = TabDataSheet(L, 4)  ' Client No
               TabDataArray(1, i) = TabDataSheet(L, 3)  ' Facture No
               TabDataArray(2, i) = TabDataSheet(L, 14) ' Montant TTC
               TabDataArray(3, i) = TabDataSheet(L, 1)  ' Date
            i = i + 1
        Next L


Qui deviendra :

VB:
        For L = 1 To UBound(TabDataSheet, 1)
            ReDim Preserve TabDataArray(5, i)
               TabDataArray(0, i) = TabDataSheet(L, 4)  ' Client No
               TabDataArray(1, i) = TabDataSheet(L, 3)  ' Facture No
               TabDataArray(2, i) = TabDataSheet(L, 14) ' Montant TTC
               TabDataArray(3, i) = TabDataSheet(L, 1)  ' Date
               TabDataArray(4, i) = TabDataSheet(L, 5)  ' Carte Bleue
            i = i + 1
        Next L


Et ensuite dans chaque If & ElseIF la construction de Tableau Séquentiel Filtré aussi il faut changer :

VB:
            ReDim Preserve TabDataArrayFiltered(4, ii)
               TabDataArrayFiltered(0, ii) = TabDataArray(0, L)
               TabDataArrayFiltered(1, ii) = TabDataArray(1, L)
               TabDataArrayFiltered(2, ii) = TabDataArray(2, L)
               TabDataArrayFiltered(3, ii) = TabDataArray(3, L)
            ii = ii + 1


Qui deviendra :

VB:
            ReDim Preserve TabDataArrayFiltered(5, ii)
               TabDataArrayFiltered(0, ii) = TabDataArray(0, L)
               TabDataArrayFiltered(1, ii) = TabDataArray(1, L)
               TabDataArrayFiltered(2, ii) = TabDataArray(2, L)
               TabDataArrayFiltered(3, ii) = TabDataArray(3, L)
               TabDataArrayFiltered(4, ii) = TabDataArray(4, L)
            ii = ii + 1

Et pour finir l'envoie dans la ListView se transormera de :

Code:
        For i = 0 To UBound(TabDataArrayFiltered, 2)
            Me.ListView1.ListItems.Add , , (TabDataArrayFiltered(0, i))
               
               
                For x = 1 To UBound(TabDataArrayFiltered, 1)
   
                    With Me.ListView1
                        Select Case x
                        Case 2
                        .ListItems(i + 1).ListSubItems.Add , , Format((TabDataArrayFiltered(x, i)), "#,###,###.#0")
                        Case 3
                        .ListItems(i + 1).ListSubItems.Add , , Format((TabDataArrayFiltered(x, i)), "DD/MM/YYYY")
                        Case Else
                        .ListItems(i + 1).ListSubItems.Add , , (TabDataArrayFiltered(x, i))
                        End Select
                    End With
                 
                Next x
         Next


Pour devenir :

VB:
        For i = 0 To UBound(TabDataArrayFiltered, 2)
            Me.ListView1.ListItems.Add , , (TabDataArrayFiltered(0, i))
               
               
                For x = 1 To UBound(TabDataArrayFiltered, 1)
   
                    With Me.ListView1
                        Select Case x
                        Case 2, 4 ' <<<<<<<<<<< ICI LA COLONNE CARTE BLEUE EN 4, pour avoir un format Montant
                        .ListItems(i + 1).ListSubItems.Add , , Format((TabDataArrayFiltered(x, i)), "#,###,###.#0")
                        Case 3
                        .ListItems(i + 1).ListSubItems.Add , , Format((TabDataArrayFiltered(x, i)), "DD/MM/YYYY")
                        Case Else
                        .ListItems(i + 1).ListSubItems.Add , , (TabDataArrayFiltered(x, i))
                        End Select
                    End With
                 
                Next x
         Next


Ce sera un bon exercice pour apprendre et si tu es très rigoureux tu peux ajouter autant de champs que tu veux en une fois... Du moment que tu respectes à la lettre les dimensions des Tableaux, car il te te fera pas de cadeau !

Bon courage
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 193
Messages
2 086 059
Membres
103 110
dernier inscrit
Privé