Ecriture intuitive en VBA

Bonjour à tous,

N'ayant pas, ou guère progressé en VB, je me tourne et vous sollicite une nouvelle fois afin d'aider une amie qui se sert toujours du papier et du crayon pour gérer ses stocks ; la galère non ?

Ci-joint, un fichier de 2 onglets (mais qui en comportera plusieurs d'ici peu j'espère !)

Le premier onglet "EPICERIE" qui référencie environ 1000 articles et le second "Cmde épicerie".

L'idée était qu'elle puisse rechercher une référence sans avoir à parcourir toute la liste. Ceci étant fait sur les 4 premières lignes (avec recherche en C4, j'ai créé une liste déroulante semi-automatique pour toujours éviter d'avoir à balayer les 1000 références dans la liste déroulante. On tape la ou les premières lettres en C4 et ouvrons ensuite la liste déroulante.

Cette façon de procéder me semblant toujours un peu galère je souhaiterai si possible faire une liste intuitive façon Google search, c'est à dire dès que l'on tape la première lettre la liste s'ouvre puis s'adapte au fur et à mesure de l'écriture et affiche la désignation entière lorsqu'il ne reste plus qu'une solution.

Pas bien facile à expliquer, mais j'ai trouvé un exemple sur le net qui fait exactement ce que je souhaite, mais dont je n'arrive pas à transposer sur mon fichier sur la cellule C4 de l'onglet "EPICERIE", mais aussi sur les cellules C4 à C53 de l'onglet "Cmde épicerie" utilisant la même liste. La liste de référence doit être dans tous les cas celle de l'onglet "EPICERIE" ; Je le fourni dans un second message.

Je vous remercie par avance pour votre aide.

@ toute.....


Re,

Comme convenu le fichier exemple ci-joint

En tapant sur une cellule de la colonne H la liste s'ouvre, puis elle s'adapte au fur et à mesure jusqu'à a afficher le Pays lorsqu'il ne lui reste plus qu'une solution.

En tapant "Z" il affiche directement "Zambi" car il n'en a qu'un commencant par "Z"

Extra non ?

Du moins pour moi

Est ce possible de transposer exactement ce procédé sur mon fichier s'il vous plait ?

Bonjour,

Met la formule suivante dans la validation de données de la cellule C4 :

=DECALER(L_EPICERIE;EQUIV(C4&"*";L_EPICERIE;0)-1;;NB.SI(L_EPICERIE;C4&"*"))

Bonjour Raja,

Merci beaucoup, mais comme expliqué cette manip existe déjà sur mon fichier (liste semi-automatique)

Je me tourne vers le VB pour éviter d'avoir une trop longue liste à chaque fois.

@ toute...

Bonjour,

Avec un textbox qui filtre ta liste au fur et à mesure de la saisie avec Contient.

eric

Bonjour Eriiic,

Oui super tu es génial c'est encore mieux que le fichier exemple "Saisie_Intuitive.xls" pour l'onglet "EPICERIE", mais cela risque d'être contraignant sur l'onglet "Cmde épicerie" pour établir une liste de commande.

Il faudrait que je duplique cette fenêtre dans la cinquantaine de cellules ?

Bien à toi

Je ne sais pas trop comment tu comptes utiliser ton fichier.

Moi je verrais bien une feuille de stock avec tes ref, le stock (c'est Qté ?), un seuil d'alerte pour le ré-appro et une colonne avec "x" si ce seuil est atteint pour pouvoir filtrer dessus.

Et une macro sur double-clic d'un produit l'ajoute à la commande. Un exemple ci-joint.

Tu pourrais ajouter des contrôles comme prix absent etc

eric

Oui c'est super, tu as vu juste.

Je te remercie sincèrement pour ta précieuse aide.

Bien à toi.

David

Je t'embête encore mais viens de m'apercevoir qu'après le double clic et l'ouverture de l'inputbox si on fait "annuler" cela comptabilise tout de même l'article !

Est il possible dans ce cas de fermer l'inputbox et de ne rien comptabiliser s'il te plait ?

Merci par avance.

Ah oui, un oubli.

Il suffit de tester Qte :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim qte As Single, lig As Long
    If Target.Column = 3 And Target.Row > 3 And Target <> "" Then
        Cancel = True
        qte = Application.InputBox(Target & ", PU Net = " & Format(Target.Offset(, 5), "#.00"), "Qté commandée", , , , , , 1)
        If qte > 0 Then
            With Sheets("Cmde épicerie")
                lig = .Cells(Rows.Count, 3).End(xlUp).Row + 1
                If lig > 53 Then
                    MsgBox "Bon de commande complet"
                Else
                    .Cells(lig, 3).Value = Target
                    .Cells(lig, 4).Value = Target.Offset(, 1)
                    .Cells(lig, 5).Value = Target.Offset(, 2)
                    .Cells(lig, 6).Value = qte
                    '.Cells(lig, 8).Value = Target.Offset(, 10)
                End If
            End With
            If lig = 53 Then MsgBox "Bon de commande complet"
        End If
    End If
End Sub

C'était si simple

Un grand merci Eriiic

Bien à toi

Rechercher des sujets similaires à "ecriture intuitive vba"