Saisie semi-automatique - VBA Excel

Bonjour à tous,

J’espère que vous allez bien,

Je suis entrain de mettre en place un petit formulaire pour la gestion des médicaments et j’ai besoin de votre aide s’il vous plait.

J’ai trouvé un code sur internet qui permet de faire une « saisie semi-automatique » et cela marche super bien. Mon soucis c’est que j’aimerai que lorsque que choisi un produit en faisant une « saisie semi-automatique », le prix du médicament s’affiche directement dans la ComboBox « Prix ».

Dans mon fichier joint, il y a la feuille « Feuil1 » où l’on lance e formulaire, ainsi que la feuille « Liste Clients » qui donne la liste des médicaments et leur prix

Toutes mes tentatives ont été vaine jusqu’à présent, raison pour laquelle j’en appelle à votre aide.

NB : « AFEH » et « SCRAPPER» m’ont déjà aidé dans le passé.
Pourriez-vous me donner une piste s’il vous plait ?
Dans l’attente,

Bonjour,

Remplacez la procédure suivante "Private Sub ComboBoxTest_Change", par celle-ci:

Private Sub ComboBoxTest_Change()
    Dim Nom_Med As String
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim Trouve_Med As Range

    Call SaisieFiltréeComboBoxChange(Me.ComboBoxTest)
    Nom_Med = ComboBoxTest.Text
    Set ws = ThisWorkbook.Sheets("Liste Clients")
    Set tbl = ws.ListObjects("TableauClients")
    Prix = tbl.ListColumns("NOM MEDICAMENT").DataBodyRange.Find(What:=Nom_Med, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Value
End Sub

Cdlt

Bonjour,

Votre code me semble étonamment long et complexe pour ce que vous souhaitez faire... Enfin, il est fonctionnel :)

Ci-après votre fichier avec votre problème résolu.

Je vous ai ajouté, dans un nouveau module, une fonction "GetPrice(itemName)" qui vous renvoie le prix du nom de l'item donné en argument, en le recherchant dans votre feuille "Liste Clients".

Cette fonction est ensuite appellée via la valeur se trouvant actuellement dans le Combobox.

Public Function GetPrice(itemName As String) As String
  Dim priceRng As Range
  With ThisWorkbook.Worksheets("Liste Clients")
    Set priceRng = .Cells.Find(What:=itemName)
  End With  
  If Not priceRng Is Nothing Then
      GetPrice = priceRng.Offset(0, 1).Value2
    Else
      GetPrice = vbNullString
    End If

End Function

Appelée via

Private Sub ComboBoxTest_Change()
    Call SaisieFiltréeComboBoxChange(Me.ComboBoxTest)
    Prix.Value = GetPrice(ComboBoxTest.Value)
End Sub

EDIT : Arturo toujours plus rapide les deux codes proposés utilisent le meme principe puisque je me suis inspiré d'une de ses réponses pour vous proposer "le mien".

Bonjour Past007,

Tout ce que tu utilises me paraît bien trop compliqué par rapport à l’usage que tu décris vouloir en faire. Je te propose une solution plus simple…

Bonjour Past007,

Une autre contribution avec un code beaucoup moins complexe et donc plus facile, me semble-t-il, à comprendre et à maintenir. Sauf erreur tu as les mêmes facilités de recherche partielle.

Cdlt,

Cylfo

Bonjour à tous,

Merci à tous pour vos nombreuses réponses.

Je test toute vos solutions et je vous reviens dans les plus brefs délais.

Cordialement

Rechercher des sujets similaires à "saisie semi automatique vba"