Sasir 1eres lettre liste decalee

Bonjour

J'essais de trouver une solution à mon problème depuis 2 jours mais je n'y arrive pas.

Dans l'onglet ci-joint devis fournisseur, pour rechercher un article, si je saisis les 1ères lettres et que je valide la ligne article en faisant ok . tout est parfait ; les valeurs (réf, désignation, unité, poids) sont inscrites dans les bonnes colonnes

Par contre, si je n'ai pas besoin d'utiliser la case "1ères lettres" pour trouver mon article, c'est à dire que si je ne saisis aucune lettres mais que je déroule simplement le menu déroulant pour choisir l'article et que je fais OK, je n'ai plus l'unité et je retrouve la réf fournisseurs inscrite dans la colonne poids.

Si vous pouviez m'aider à résoudre cela.

Merci d'avance

cdlt

Bonjour Marieno35

Tu nous parles d'un menu déroulant... je dois être aveugle, je ne vois pas où ?

A+

Je ne me suis sans doute mal exprimée.

Dans l'onglet DEVIS de mon fichier , cliquez 2 fois dans la colonne 1 = réf, un fenêtre s'ouvre avec 1 menu déroulant contenant les articles.

cdlt

Re,

Ton problème vient du fait que tu n'initialise pas ta Listbox de la même façon que lorsque tu saisi tes 1ère lettres

Voici un code qui fonctionne, peut importe le choix

Option Explicit

Private Sub UserForm_Initialize()
   Me.ListBox1.List = [Articles].Value
 End Sub

Private Sub TextBox1_Change()
  Dim Ind As Long
  ' Effacer la Listbox
  Me.ListBox1.Clear
  ' Remettre le contenu dedans
  Me.ListBox1.List = [Articles].Value
  ' Pour chaque élément de la liste en partant de la fin (suppression)
  For Ind = Me.ListBox1.ListCount - 1 To 0 Step -1
    ' Si le terme n'est pas trouvé dans la désignation
    If InStr(1, UCase(Me.ListBox1.List(Ind, 1)), UCase(Me.TextBox1)) = 0 Then
      ' On supprime l'élément de la liste
      Me.ListBox1.RemoveItem Ind
    End If
  Next Ind
End Sub

Private Sub CommandButton1_Click()
  Dim LigSel As Long
  If ListBox1.ListIndex = -1 Then
      MsgBox "Vous n'avez rien sélectionné.", 16
      Exit Sub
  End If
  ' Définir le numéro de la ligne sélectionnée
  LigSel = Selection.Row
  ' Avec la feuille
  With Sheets("DEVIS")
    ' Sur la ligne sélectionnée, 1ère colonne
    .Cells(LigSel, 1) = Me.ListBox1.Column(0)
    ' Sur la ligne sélectionnée, 2ème colonne
    .Cells(LigSel, 2) = Me.ListBox1.Column(1)
    .Cells(LigSel, 8) = Me.ListBox1.Column(6)
    On Error Resume Next
    .Cells(LigSel, 12) = Me.ListBox1.Column(9) * 1
    On Error GoTo 0
  End With
   Unload Me
 End Sub

A+

Bonsoir

Je te remercie pour ton aide Bruno

J'ai fait un copier coller mais j'ai un message d'erreur :

"erreur9 L'indice n'appartient pas à la sélection "

Je ne vois pas de quoi il s'agit car je n'y connais rien en VBa.

Merci d'avance si vous avez la réponse à ce problème.

cdlt

Bonjour

Je me suis trompée de fichier.

C'est bien ce dernier fichier 6 (4) qu'il faut regarder pour trouver l'erreur.

J'espère que quelqu'un à une idée ; j'ai cherché mais je ne vois pas . ne connaissant pas VBA c'est la cata ;

j'ai toujours le même message.

merci et good week-end

cdlt

Bonjour,

J'ai oublié de t'en parler, désolé

Il faut supprimer le dernier espace du nom de ta feuille DEVIS

A+

Bonjour

Encore merci Bruno

Rien à dire c'est parfait ; je vais essayer tout cela dans mon tarif qui contient 3000 articles en espérant que ce ne sera pas trop lent à l'utilisation.

Je ne voudrais pas avoir l'air d'abuser de ta gentillesse

Mais j'ai une autre question qui me trotte dans la tête ; si ma liste d'articles n'est pas dans le même fichier que ma demande de prix ; existe t-il une solution en vba ou bien Est-ce trop compliqué ?

bonne journée

cdlt

Rebonjour

J'ai donc essayé la solution de Bruno qui fonctionne très bien mais j'ai un tarif qui fait 4000 articles environ et la recherche qui se fait

sur tout les mots qui contiennent les lettres saisies ; c'est un peu compliqué et fastidieux ;

j'ai donc modifié mon exemple ci-joint en créant 1 texbox1 pour la recherche uniquement sur les 1ères lettres en début de ligne article et une 2ème texbox2 permettant si besoin une recherche plus large sur tout les mots de la ligne de l'article

Pour la texbox2, j'ai donc fait un copier coller de la solution de Bruno mais je ne sais pas comment faire pour la textbox1 si je veux faire 1 recherche que sur les 1ères lettres de la ligne.

Enfin, lorsque ma liste article s'affiche dans ma demande de devis, j'ai également le nom du fournisseur ... et le dernier prix d'achat qui s'affiche mais ce dernier met tous les chiffres après la virgule alors 2 suffirait.

Si quelqu'un peut m'aider, je le remercie d'avance.

bonne journée

cdlt

Bonsoir Marieno35

En repartant d'un USF que j'ai développé pour mon boulot,

voici un exemple de ce qu'il est possible de faire avec fichier articles à part

Nota : mettre les 2 fichiers dans le même dossier,

sinon il est possible de définir le chemin d'accès dans le module "MGestion"

A+

Bonjour

Désolée mais le fichier devisBM45 ne s'ouvre pas : message d'erreur = contenu illisible

CDLT

Salut Marieno35

Effectivement, je ne sais pas ce qui c'est passé

J'ai remis le fichier "réparé" dans le post précédent

A+

Bonjour,

Saisie intuitive sur les lettres contenues.

Dim a(), Tarticles()
Private Sub UserForm_Initialize()
  a = Application.Transpose([liste].Value)
  Tarticles = [articles].Value
  Me.ComboBox1.List = a
  Me.ComboBox1.SetFocus
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1 <> "" And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
   Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)
   Me.ComboBox1.DropDown
 End If
End Sub

Private Sub CommandButton1_Click()
    If ComboBox1.ListIndex = -1 Then
        MsgBox "Vous n'avez rien sélectionné.", 16
        Exit Sub
    End If
    For i = 1 To UBound(Tarticles)
      If Tarticles(i, 1) = Me.ComboBox1 Then
       ActiveCell = Tarticles(i, 3)
       ActiveCell.Offset(, 1) = Tarticles(i, 1)
       ActiveCell.Offset(, 7) = Tarticles(i, 6)
      End If
    Next i
   Unload Me
 End Sub

Cf PJ

Ceuzin

BONJOUR A TOUS

DANS MA DEMANDE DE PRIX CI-JOINTE, SUR LA LISTE CLIENT JE PEUX FAIRE DES RECHERCHES SOIT SUR LES 1ERES OU SOIT SUR DIVERSES LETTRES CONTENUES DANS LES MOTS.

LORSQUE JE SAISIE LA CELLULE A12, LA LISTE DES ARTICLES S'OUVRE MAIS IL N'Y A QUE LE NOM DE L'ARTICLE QUI APPARAIT , JE SOUHAITERAIS QU'APPARAISSE AUSSI PAR EXEMPLE LA DATE D'ACHAT ET LE NOM DU FOURNISEUR DE l'ARTICLE - VOIR MON EXEMPLE

SU QUELQU'UN A UNE IDEE MERCI D'AVANCE


J'AVAIS OUBLIE LE FICHIER

BONJOUR A TOUS

DANS MA DEMANDE DE PRIX CI-JOINTE, SUR LA LISTE CLIENT JE PEUX FAIRE DES RECHERCHES SOIT SUR LES 1ERES OU SOIT SUR DIVERSES LETTRES CONTENUES DANS LES MOTS.

LORSQUE JE SAISIE LA CELLULE A12, LA LISTE DES ARTICLES S'OUVRE MAIS IL N'Y A QUE LE NOM DE L'ARTICLE QUI APPARAIT , JE SOUHAITERAIS QU'APPARAISSE AUSSI PAR EXEMPLE LA DATE D'ACHAT ET LE NOM DU FOURNISEUR DE l'ARTICLE - VOIR MON EXEMPLE

SU QUELQU'UN A UNE IDEE MERCI D'AVANCE

Bonsoir

As-tu essayé la proposition que je t'avais faite ici ?

https://forum.excel-pratique.com/excel/sasir-1eres-lettre-liste-decalee-t65676.html#p372891

A+

Bonjour

Je remercie Ceuzin pour son exemple que j'ai réussi à adapter à un extrait de mon fichier.

lorsque je clic dans la cellule A12, de l'onglet DEVIS, le fichier s'ouvre avec le nom de l'article, le N°, la date d'achat, le nom du fournisseur, l'unité" et le prix d'achat. c'est exactement ce que je voulais

Une fois l'article choisit, je fais OK mais il n'y a que le N° et la désignation qui s'inscrit dans le devis ; je n'arrive pas à afficher l'unité et le prix ; il doit y avoir une erreur mais je ne l'ai pas trouvée.

Si quelqu'un pouvait m'aider !!!!!

merci

7essai-liste2.xlsm (86.65 Ko)

Bonjour

Remplaces la macro correspondante par celle-ci

Private Sub CommandButton1_Click()
 If Me.TextBox1 <> "" Then
    ActiveCell.Offset(0, 0) = Me.TextBox1
    ActiveCell.Offset(0, 1) = Me.ComboBox1
    ActiveCell.Offset(0, 7) = Me.TextBox4
    ActiveCell.Offset(0, 9) = Val(Replace(Me.TextBox5, ",", "."))

    Unload Me
 End If
End Sub

Bonjour

Merci cela fonctionne à merveille ;

j'ai donc constaté que la formule ActiveCell.Offset(0, 9) = Val(Replace(Me.TextBox5,",", ".")) permettait de transformer la valeur de la texbox en numérique puisque c'est un prix, en gardant uniquement 2 chiffres après la virgule mais lorsque j'ouvre la liste des articles, les prix sont présentés avec plusieurs chiffres après la virgule et il en est de même de l'affichage du prix dans la texbox ; existe t-il une formule pour éviter celà ? (voir mon exemple)

Merci d'avance pour votre aide

bye

8essai-liste2.xlsm (122.72 Ko)

Bonjour

Une solution

Remplaces tes formules en colonne M de la page "Tarif"

exemple

=H5+I5+ARRONDI(;2)

par

=ARRONDI(H5+I5;2)
Rechercher des sujets similaires à "sasir 1eres lettre liste decalee"