Besoin d'un coup de main VBA - Saisie textbox, affichage dans une listbox

celoburn

XLDnaute Nouveau
Bonjour tout le monde,

Alors voilà, je suis nouveau, je suis novice en VBA, je comprend un peu le fonctionnement mais ça reste très limité.... généralement je prend des bouts de codes par ci par là et je parviens (non sans difficultés) à les utiliser comme je veux.

Ce que je veux faire :

A partir d'une feuille, l'utilisateur du fichier clique sur un bouton qui lui ouvre un UserForm avec dedans une textbox et une listbox. Il tape le début du nom d'un fournisseur et la sélection des fournisseurs possibles s'affiche dans la listbox en dessous. L'utilisateur clic dessus et le nom du fournisseur est reporté sur la feuille Excel Active en A1 (par exemple)...puis il recommence avec un autre, et celui ci se met en A2...etc

Pour l'instant :

Le code qui sélectionne les fournisseurs au fur et à mesure de la frappe et les affiche dans la listbox fonctionne, c'est l'action qui est faite lors du clic de l'utilisateur sur le fournisseur qu'il faut adapter. D'origine le fait de cliquer sur le fournisseur ramène juste sur la cellule ou est entré son nom.

Code utilisé :

VB:
--------------------
Sub ListBox1_Click()
On Error Resume Next
With ListBox1
        Cells(.List(.ListIndex, 1), 1).Select
    End With
    Unload Me
End Sub

------------------------------
Sub TextBox1_Change()
Dim Plage As Range, Cell As Range
Dim Recherche As String, Adresse As String
Dim Ligne As Integer
Dim C As Object
ListBox1.Clear
Recherche = TextBox1.Value
Range("a1").Select
Ligne = Sheets("source").Range("A" & "65536").End(xlUp).Row
Set Plage = Sheets("source").Range("A" & "2:" & "A" & Ligne)
With Plage
Set C = .Find(Recherche)
If Not C Is Nothing Then
    Adresse = C.Address
    Do
         If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
            With ListBox1
                .AddItem C '
                .List(.ListCount - 1, 1) = C.Row  'Ajout mDF
            End With
         End If
        Set C = .FindNext(C)
    Loop While Not C Is Nothing And C.Address <> Adresse
End If
End With
End Sub

Voilà, j'espère que je me suis exprimé assez clairement vous pourrez m'aider à adapter ce code pour en faire ce que je veux. C'est un vrai cadeau de noel ^^ ! :D
 

Pièces jointes

  • Modèle de saisie Evreux.xlsm
    34 KB · Affichages: 177
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Besoin d'un coup de main VBA - Saisie textbox, affichage dans une listbox

Bonsoir et bienvenue sur XLD

Essaie ceci
Code:
Sub ListBox1_Click()
On Error Resume Next
'With ListBox1
        'Cells(.List(.ListIndex, 1), 1).Select
    'End With
ActiveSheet.[A65536].End(xlUp)(2) = ListBox1.Value
Unload Me
End Sub
PS1: pour tes variables, personnellement je ferai ainsi
Code:
Dim Plage As Range, Cell As Range
Dim Recherche$, Adresse$, Ligne&, C As Object
Pourquoi me diras-tu ? Parce que , te répondrai-je ;)

PS2: Ton post est l'occasion de saluer MyDearFriend (qui se fait trop rare sur XLD)
 
Dernière édition:

celoburn

XLDnaute Nouveau
Re : Besoin d'un coup de main VBA - Saisie textbox, affichage dans une listbox

C'est Noël !! :) Milles merci Staple1600, ça fonctionne parfaitement !

Pour le PS1 (que j'utilise maintenant), c'est juste une façon de déclarer plus rapidement les variables ou ça apporte autre chose ?
Avant la variable Ligne était déclarée comme ceci

VB:
Dim Ligne As Integer

et maintenant comme cela :

VB:
Dim Ligne&
On passe donc d'un type Integer à un Type Long

c'est juste la plage de valeur que ça change ou ça apporte autre chose également ?

Merci pour ta réponse en milieu de nuit, j'espère que le réveil n'est pas trop dur ^^
 

celoburn

XLDnaute Nouveau
Re : Besoin d'un coup de main VBA - Saisie textbox, affichage dans une listbox

Merci Jean-Marcel pour ta réponse....bon c'est sur sur que je ne vais pas avoir autant de ligne, mais qui peut le plus peut le moins donc je la laise en 'Long'

Autre question, je sais que ce sont des choses basiques mais bon ça me permet d'apprendre en même temps, j'ai cherché..Mais pas trouvé

VB:
Private Sub AddFrsButton_Click()
Sheets("source").[A65536].End(xlUp)(2) = TextBox1.Value
Dim Plage As Range, Cell As Range
Dim Recherche$, Adresse$, Ligne&, C As Object
ListBox1.Clear
Recherche = TextBox1.Value
Range("a1").Select
Ligne = Sheets("source").Range("A" & "65536").End(xlUp).Row
Set Plage = Sheets("source").Range("A" & "2:" & "A" & Ligne)
With Plage
Set C = .Find(Recherche)
If Not C Is Nothing Then
    Adresse = C.Address
    Do
         If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
            With ListBox1
                .AddItem C '
                .List(.ListCount - 1, 1) = C.Row  'Ajout mDF
            End With
         End If
        Set C = .FindNext(C)
    Loop While Not C Is Nothing And C.Address <> Adresse
End If
End With

End Sub


Private Sub OkButton_Click()
ActiveSheet.[A65536].End(xlUp)(2) = ListBox1.Value 'Impute le fournisseur dans la feuille active

End Sub

Sub TextBox1_Change()
Dim Plage As Range, Cell As Range
Dim Recherche$, Adresse$, Ligne&, C As Object
ListBox1.Clear
Recherche = TextBox1.Value
Range("a1").Select
Ligne = Sheets("source").Range("A" & "65536").End(xlUp).Row
Set Plage = Sheets("source").Range("A" & "2:" & "A" & Ligne)
With Plage
Set C = .Find(Recherche)
If Not C Is Nothing Then
    Adresse = C.Address
    Do
         If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
            With ListBox1
                .AddItem C '
                .List(.ListCount - 1, 1) = C.Row  'Ajout mDF
            End With
         End If
        Set C = .FindNext(C)
    Loop While Not C Is Nothing And C.Address <> Adresse
End If
End With
End Sub

Après la première ligne Le code de AddFrsButton reprend celui de TextBox1, j'ai repris le code de TextBox1 pour que le programme prenne en compte dans la listbox le fournisseur nouvellement ajouté. mais bon c'est moche le code redondant ! (et puis jpeut apprendre un truc alors :)
J'ai essayé de trouver une solution avec "Call Macro()" mais je ne dois pas avoir la bonne syntaxe...

Merci
 

celoburn

XLDnaute Nouveau
Re : Besoin d'un coup de main VBA - Saisie textbox, affichage dans une listbox

Je te remercie pour tes réponses, tu verra dans la pièce jointe que j'ai intégré ton code, Je pense le comprendre à part le Me. devant je ne vois pas a quoi il sert (je reprécise que je débute..si qqn a des bon cours en ligne d'ailleurs..je prends :))

Code:
Private Sub TextBox1_AfterUpdate()
    If Me.ListBox1.ListCount = 0 Then
    Me.ListBox1.AddItem (TextBox1)
    End If
End Sub
ça se comporte exactement comme je voulais donc t'avais presque bien saisi malgrès mes imprécisions....mon post ne contenait pas de pièce jointe...je vais corriger ça dans celui-ci :).....ce que je voulais c'était dans
Private Sub AddFrsButton_Click() faire appel au code contenu dans Sub TextBox1_Change() (puisque j'utilisait le même pour mettre à jour la liste)


Pour le fichier avec la combobox, merci mais je trouve la solution actuelle plus lisible(coté utilisateur)....et puis ça marche alors tout va bien :cool:



Bon appétit !
 

Pièces jointes

  • Proj en cours.xlsm
    38.7 KB · Affichages: 239
Dernière édition:

Discussions similaires

Réponses
1
Affichages
137

Statistiques des forums

Discussions
298 027
Messages
1 965 282
Membres
200 894
dernier inscrit
Sneaks