Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Positionnement auto dans listview FORMULAIRE

6 réponses
Avatar
Françoise
Bonjour à tous,

SOUS EXCEL 2003
question du jour : j'ai un formulaire listant dans une LISTVIEW :
ref ARTicle, Designation, Prix HT (environ 500 refs)
je veux créer une TextBox qui permettra à l'utilisateur de taper une ref
et je voudrais que le curseur se déplace au fur et à mesure vers les refs
concernés

exemple :
Ma liste
ABCDE
ABDEF
ABEFG

dans la TextBoxAppelRef si je tape AB

Le curseur se positionnera sur la première ref qui commence par AB, soit ABCDE

c'est un élément courant dans les formulaires, mais je ne sais comment
l'écrire en VBA
=======
ce que j'ai fait :

If TextBoxAppelArticle <> "" Then
Application.Goto Reference:=TextBoxAppelArticle
End If

======
Quelqu'un a t il déjà implémenté cela dans un USERFORM ,
d'avance merci

6 réponses

Avatar
Daniel.C
Bonjour.
Sauf si quelque chose m'échappe (c'est probable), le déplacement du
curseur n'est visible que si le listview a le focus, ce qui revient à
rendre le focus après la saisie de chaque caractère dans le textbox.
Cordialement.
Daniel

Bonjour à tous,

SOUS EXCEL 2003
question du jour : j'ai un formulaire listant dans une LISTVIEW :
ref ARTicle, Designation, Prix HT (environ 500 refs)
je veux créer une TextBox qui permettra à l'utilisateur de taper une ref
et je voudrais que le curseur se déplace au fur et à mesure vers les refs
concernés

exemple :
Ma liste
ABCDE
ABDEF
ABEFG

dans la TextBoxAppelRef si je tape AB

Le curseur se positionnera sur la première ref qui commence par AB, soit
ABCDE

c'est un élément courant dans les formulaires, mais je ne sais comment
l'écrire en VBA
====== > ce que j'ai fait :

If TextBoxAppelArticle <> "" Then
Application.Goto Reference:=TextBoxAppelArticle
End If

===== > Quelqu'un a t il déjà implémenté cela dans un USERFORM ,
d'avance merci


Avatar
Corto
Bonjour Françoise,
Tu peux t'inspirer de ce classeur : http://cjoint.com/?dun0RWRua1
Le truc c'est d'utiliser des ComboBox avec les mêmes données qu e la
Listbox et de mettre la propriété ShowDropButtonWhen à 0 p our les
"déguiser" en simples TextBox

Corto

Françoise a écrit :
Bonjour à tous,

SOUS EXCEL 2003
question du jour : j'ai un formulaire listant dans une LISTVIEW :
ref ARTicle, Designation, Prix HT (environ 500 refs)
je veux créer une TextBox qui permettra à l'utilisateur de ta per une ref
et je voudrais que le curseur se déplace au fur et à mesure v ers les refs
concernés

exemple :
Ma liste
ABCDE
ABDEF
ABEFG

dans la TextBoxAppelRef si je tape AB

Le curseur se positionnera sur la première ref qui commence par AB , soit ABCDE

c'est un élément courant dans les formulaires, mais je ne sai s comment
l'écrire en VBA
=======
ce que j'ai fait :

If TextBoxAppelArticle <> "" Then
Application.Goto Reference:=TextBoxAppelArticle
End If

======
Quelqu'un a t il déjà implémenté cela dans un USERF ORM ,
d'avance merci



Avatar
Françoise
Bonjour Corto et merci pour ta réponse et ton exemple, c'est exactement ce
que je cherche à faire MAIS avec une LISTVIEW et donc j'ai un peu de mal à
suivre comment modifier pour obtenir le résultat

j'ai crée une ComboBox pour la saisie des refs articles, mais comment dire
qu'il faut faire appel à la colonne 1 de la LISTVIEW pour faire la recherche
et est ce que c'est possible ?

Le sais tu ?
========== voici le code de mon formulaire :

Private Sub UserForm_Initialize()


'Suppression des titres de colonnes
ListView1.ColumnHeaders.Clear

'Alimentation des titres de colonne :
'Titre de la colonne : "Référence",
'Largeur de la colonne : ListView1.Width * 0.3,
'Alignement de la colonne : lvwColumnLeft
ListView1.ColumnHeaders.Add , , "Référence", ListView1.Width * 0.2,
lvwColumnLeft
ListView1.ColumnHeaders.Add , , "Désignation", ListView1.Width * 0.4,
lvwColumnLeft
ListView1.ColumnHeaders.Add , , "Prix public", ListView1.Width * 0.2,
lvwColumnRight
ListView1.ColumnHeaders.Add , , "Valeur Stock Totale", ListView1.Width *
0.2, lvwColumnRight
Dim iLigArticle As Integer
iLigArticle = 2

'Suppression des éléments de la liste
ListView1.ListItems.Clear

While Workbooks("STOCK.xls").Sheets("STOCK").Cells(iLigArticle, 1) <> ""
'Alimentation des éléments de la liste
ListView1.ListItems.Add iLigArticle - 1, ,
Sheets("STOCK").Cells(iLigArticle, 1)
ListView1.ListItems(iLigArticle - 1).SubItems(1) =
Sheets("STOCK").Cells(iLigArticle, 6)
ListView1.ListItems(iLigArticle - 1).SubItems(2) =
Format(Sheets("STOCK").Cells(iLigArticle, 8), "## ##0.00 €")
ListView1.ListItems(iLigArticle - 1).SubItems(3) =
Format(Sheets("STOCK").Cells(iLigArticle, 18), "## ##0.00 €")
iLigArticle = iLigArticle + 1
Wend

TextBoxValeurTotaleStock = Format(Sheets("STOCK").Range("M2").Value, "##
##0.00 €")




End Sub
Private Sub ListView1_Click()
'dès que l'on clique sur l'article, on affiche dans le formulaire
usfDetailArticle les entrées et sorties de stock de l'article

NumArticle = ListView1.SelectedItem

Dim Sh As Worksheet
Set Sh = Worksheets("SORTIES")
Dim Article As String

Article = NumArticle

On Error Resume Next
With Sh
'définir la zone de critère
'choisir l'étiquette de la colonne A1 -> champ où exploiter le filtre
.Range("K1") = .Range("A1")
.Range("K2") = Article 'la valeur du critère du filtre
Sh.Range("P1").CurrentRegion.Clear

'Définir la plage de cellules pour le filtre...
With .Range("A1:F" & .Range("A65536").End(xlUp).Row)
'Application du filtre
.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sh.Range("K1:K2"), _
CopyToRange:=Sh.Range("P1"), Unique:úlse
'Copie vers la cellule où débutera la plage résultat
End With
.ShowAllData
End With

If Sh.Range("P2").Value = "" Then
MsgBox ("aucune sortie pour ce produit")

Else
NumArticle = Sh.Range("P2").Value
With Sheets("STOCK").Range("A:A")
Set c = .Find(NumArticle, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then Lig = c.Row
End With
End If
UsfDetailArticle.Show
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.MatchFound Then
ListView1.Top = ComboBox1.ListIndex
End If
End Sub

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ComboBox1.Text = ""
End Sub

Private Sub ListView1_Change()
Set XDST = [A2]
For XCPT = 0 To ListView1.ListCount - 1
If ListView1.Selected(XCPT) Then
XDST.Offset(0, 0) = ListView1.List(XCPT, 0)
XDST.Offset(0, 1) = ListView1.List(XCPT, 1)
XDST.Offset(0, 2) = ListView1.List(XCPT, 2)
XDST.Offset(0, 3) = ListView1.List(XCPT, 3)
Set XDST = XDST.Offset(1, 0)
End If
Next XCPT
Range(XDST, XDST.End(xlDown)).EntireRow.ClearContents
End Sub
==================== As tu une idée là dessus ?

"Corto" a écrit :

Bonjour Françoise,
Tu peux t'inspirer de ce classeur : http://cjoint.com/?dun0RWRua1
Le truc c'est d'utiliser des ComboBox avec les mêmes données que la
Listbox et de mettre la propriété ShowDropButtonWhen à 0 pour les
"déguiser" en simples TextBox

Corto

Françoise a écrit :
> Bonjour à tous,
>
> SOUS EXCEL 2003
> question du jour : j'ai un formulaire listant dans une LISTVIEW :
> ref ARTicle, Designation, Prix HT (environ 500 refs)
> je veux créer une TextBox qui permettra à l'utilisateur de taper une ref
> et je voudrais que le curseur se déplace au fur et à mesure vers les refs
> concernés
>
> exemple :
> Ma liste
> ABCDE
> ABDEF
> ABEFG
>
> dans la TextBoxAppelRef si je tape AB
>
> Le curseur se positionnera sur la première ref qui commence par AB, soit ABCDE
>
> c'est un élément courant dans les formulaires, mais je ne sais comment
> l'écrire en VBA
> ====== > > ce que j'ai fait :
>
> If TextBoxAppelArticle <> "" Then
> Application.Goto Reference:=TextBoxAppelArticle
> End If
>
> ===== > > Quelqu'un a t il déjà implémenté cela dans un USERFORM ,
> d'avance merci
>



Avatar
Françoise
bon, dur, dur.....
j'ai bien compris le routage vers la colonne, mais lorsque j'insère le code
après
Private Sub UserForm_Initialize()
j'obtiens l'erreur "impossible de lire la propriété RowSource membre
introuvable

j'ai mis :
=== Private Sub UserForm_Initialize()
ComboBox1.RowSource =
Range(ListView1.RowSource).Columns(1).Address(External:=True)
'On donne au Combo 1 l'adresse de la première colonne du listbox
=== puis la suite de la macro déjà donné dans mail ci-dessus

j'ai changé ListBox1 par la ListView1 de mon formulaire)

Qu'est ce que je fais de mal ?????


"Corto" a écrit :

Bonjour Françoise,
Regarde dans la macro UserForm_Initialize, c'est là que ça se passe.
Private Sub UserForm_Initialize()
ComboBox1.RowSource = Range(ListBox1.RowSource).Columns(1). _
Address(External:=True)
/*On donne au Combo 1 l'adresse de la première colonne du listbox*/
ComboBox2.RowSource = Range(ListBox1.RowSource).Columns(3). _
Address(External:=True)
/*On donne au Combo 2 l'adresse de la troisième colonne du listbox*/
End Sub

Corto

Françoise a écrit :
> Bonjour Corto et merci pour ta réponse et ton exemple, c'est exactement ce
> que je cherche à faire MAIS avec une LISTVIEW et donc j'ai un peu de mal à
> suivre comment modifier pour obtenir le résultat
>
> j'ai crée une ComboBox pour la saisie des refs articles, mais comment dire
> qu'il faut faire appel à la colonne 1 de la LISTVIEW pour faire la recherche
> et est ce que c'est possible ?
>
> Le sais tu ?
> ========== > > voici le code de mon formulaire :
>
> Private Sub UserForm_Initialize()
>
>
> 'Suppression des titres de colonnes
> ListView1.ColumnHeaders.Clear
>
> 'Alimentation des titres de colonne :
> 'Titre de la colonne : "Référence",
> 'Largeur de la colonne : ListView1.Width * 0.3,
> 'Alignement de la colonne : lvwColumnLeft
> ListView1.ColumnHeaders.Add , , "Référence", ListView1.Width * 0.2,
> lvwColumnLeft
> ListView1.ColumnHeaders.Add , , "Désignation", ListView1.Width * 0.4,
> lvwColumnLeft
> ListView1.ColumnHeaders.Add , , "Prix public", ListView1.Width * 0.2,
> lvwColumnRight
> ListView1.ColumnHeaders.Add , , "Valeur Stock Totale", ListView1.Width *
> 0.2, lvwColumnRight
> Dim iLigArticle As Integer
> iLigArticle = 2
>
> 'Suppression des éléments de la liste
> ListView1.ListItems.Clear
>
> While Workbooks("STOCK.xls").Sheets("STOCK").Cells(iLigArticle, 1) <> ""
> 'Alimentation des éléments de la liste
> ListView1.ListItems.Add iLigArticle - 1, ,
> Sheets("STOCK").Cells(iLigArticle, 1)
> ListView1.ListItems(iLigArticle - 1).SubItems(1) =
> Sheets("STOCK").Cells(iLigArticle, 6)
> ListView1.ListItems(iLigArticle - 1).SubItems(2) =
> Format(Sheets("STOCK").Cells(iLigArticle, 8), "## ##0.00 €")
> ListView1.ListItems(iLigArticle - 1).SubItems(3) =
> Format(Sheets("STOCK").Cells(iLigArticle, 18), "## ##0.00 €")
> iLigArticle = iLigArticle + 1
> Wend
>
> TextBoxValeurTotaleStock = Format(Sheets("STOCK").Range("M2").Value, "##
> ##0.00 €")
>
>
>
>
> End Sub
> Private Sub ListView1_Click()
> 'dès que l'on clique sur l'article, on affiche dans le formulaire
> usfDetailArticle les entrées et sorties de stock de l'article
>
> NumArticle = ListView1.SelectedItem
>
> Dim Sh As Worksheet
> Set Sh = Worksheets("SORTIES")
> Dim Article As String
>
> Article = NumArticle
>
> On Error Resume Next
> With Sh
> 'définir la zone de critère
> 'choisir l'étiquette de la colonne A1 -> champ où exploiter le filtre
> ..Range("K1") = .Range("A1")
> ..Range("K2") = Article 'la valeur du critère du filtre
> Sh.Range("P1").CurrentRegion.Clear
>
> 'Définir la plage de cellules pour le filtre...
> With .Range("A1:F" & .Range("A65536").End(xlUp).Row)
> 'Application du filtre
> ..AdvancedFilter Action:=xlFilterCopy, _
> CriteriaRange:=Sh.Range("K1:K2"), _
> CopyToRange:=Sh.Range("P1"), Unique:úlse
> 'Copie vers la cellule où débutera la plage résultat
> End With
> ..ShowAllData
> End With
>
> If Sh.Range("P2").Value = "" Then
> MsgBox ("aucune sortie pour ce produit")
>
> Else
> NumArticle = Sh.Range("P2").Value
> With Sheets("STOCK").Range("A:A")
> Set c = .Find(NumArticle, LookIn:=xlValues, LookAt:=xlWhole)
> If Not c Is Nothing Then Lig = c.Row
> End With
> End If
> UsfDetailArticle.Show
> End Sub
> Private Sub ComboBox1_Change()
> If ComboBox1.MatchFound Then
> ListView1.Top = ComboBox1.ListIndex
> End If
> End Sub
>
> Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
> ComboBox1.Text = ""
> End Sub
>
> Private Sub ListView1_Change()
> Set XDST = [A2]
> For XCPT = 0 To ListView1.ListCount - 1
> If ListView1.Selected(XCPT) Then
> XDST.Offset(0, 0) = ListView1.List(XCPT, 0)
> XDST.Offset(0, 1) = ListView1.List(XCPT, 1)
> XDST.Offset(0, 2) = ListView1.List(XCPT, 2)
> XDST.Offset(0, 3) = ListView1.List(XCPT, 3)
> Set XDST = XDST.Offset(1, 0)
> End If
> Next XCPT
> Range(XDST, XDST.End(xlDown)).EntireRow.ClearContents
> End Sub
> ==================== > > As tu une idée là dessus ?
>
> "Corto" a écrit :
>
>
>> Bonjour Françoise,
>> Tu peux t'inspirer de ce classeur : http://cjoint.com/?dun0RWRua1
>> Le truc c'est d'utiliser des ComboBox avec les mêmes données que la
>> Listbox et de mettre la propriété ShowDropButtonWhen à 0 pour les
>> "déguiser" en simples TextBox
>>
>> Corto
>>
>> Françoise a écrit :
>>
>>> Bonjour à tous,
>>>
>>> SOUS EXCEL 2003
>>> question du jour : j'ai un formulaire listant dans une LISTVIEW :
>>> ref ARTicle, Designation, Prix HT (environ 500 refs)
>>> je veux créer une TextBox qui permettra à l'utilisateur de taper une ref
>>> et je voudrais que le curseur se déplace au fur et à mesure vers les refs
>>> concernés
>>>
>>> exemple :
>>> Ma liste
>>> ABCDE
>>> ABDEF
>>> ABEFG
>>>
>>> dans la TextBoxAppelRef si je tape AB
>>>
>>> Le curseur se positionnera sur la première ref qui commence par AB, soit ABCDE
>>>
>>> c'est un élément courant dans les formulaires, mais je ne sais comment
>>> l'écrire en VBA
>>> ====== > >>> ce que j'ai fait :
>>>
>>> If TextBoxAppelArticle <> "" Then
>>> Application.Goto Reference:=TextBoxAppelArticle
>>> End If
>>>
>>> ===== > >>> Quelqu'un a t il déjà implémenté cela dans un USERFORM ,
>>> d'avance merci
>>>
>>>



Avatar
Corto
Bonjour Françoise,
Désolé mais je ne connaissais pas le contrôle ListView et depuis le
départ je pensais que tu parlais en fait d'un ListBox.
La solution que je te proposais ne fonctionnera pas avec un ListView car
il n'est pas associé à une plage Excel.
En résumé, j'ai perdu une belle occasion de me taire :-X :-! et encore
désolé de t'avoir fait perdre ton temps. :-[

Corto

Françoise a écrit :
bon, dur, dur.....
j'ai bien compris le routage vers la colonne, mais lorsque j'insèr e le code
après
Private Sub UserForm_Initialize()
j'obtiens l'erreur "impossible de lire la propriété RowSource membre
introuvable

j'ai mis :
====
Private Sub UserForm_Initialize()
ComboBox1.RowSource =
Range(ListView1.RowSource).Columns(1).Address(External:=True)
'On donne au Combo 1 l'adresse de la première colonne du listbox
====
puis la suite de la macro déjà donné dans mail ci-dessus

j'ai changé ListBox1 par la ListView1 de mon formulaire)

Qu'est ce que je fais de mal ?????


"Corto" a écrit :


Bonjour Françoise,
Regarde dans la macro UserForm_Initialize, c'est là que ça s e passe.
Private Sub UserForm_Initialize()
ComboBox1.RowSource = Range(ListBox1.RowSource).Columns(1). _
Address(External:=True)
/*On donne au Combo 1 l'adresse de la première colonne du listbox */
ComboBox2.RowSource = Range(ListBox1.RowSource).Columns(3). _
Address(External:=True)
/*On donne au Combo 2 l'adresse de la troisième colonne du listbo x*/
End Sub

Corto

Françoise a écrit :

Bonjour Corto et merci pour ta réponse et ton exemple, c'est exa ctement ce
que je cherche à faire MAIS avec une LISTVIEW et donc j'ai un pe u de mal à
suivre comment modifier pour obtenir le résultat

j'ai crée une ComboBox pour la saisie des refs articles, mais co mment dire
qu'il faut faire appel à la colonne 1 de la LISTVIEW pour faire la recherche
et est ce que c'est possible ?

Le sais tu ?
===========
voici le code de mon formulaire :

Private Sub UserForm_Initialize()


'Suppression des titres de colonnes
ListView1.ColumnHeaders.Clear

'Alimentation des titres de colonne :
'Titre de la colonne : "Référence",
'Largeur de la colonne : ListView1.Width * 0.3,
'Alignement de la colonne : lvwColumnLeft
ListView1.ColumnHeaders.Add , , "Référence", ListView1.Widt h * 0.2,
lvwColumnLeft
ListView1.ColumnHeaders.Add , , "Désignation", ListView1.Width * 0.4,
lvwColumnLeft
ListView1.ColumnHeaders.Add , , "Prix public", ListView1.Width * 0.2,
lvwColumnRight
ListView1.ColumnHeaders.Add , , "Valeur Stock Totale", ListView1.Widt h *
0.2, lvwColumnRight
Dim iLigArticle As Integer
iLigArticle = 2

'Suppression des éléments de la liste
ListView1.ListItems.Clear

While Workbooks("STOCK.xls").Sheets("STOCK").Cells(iLigArticle, 1) <> ""
'Alimentation des éléments de la liste
ListView1.ListItems.Add iLigArticle - 1, ,
Sheets("STOCK").Cells(iLigArticle, 1)
ListView1.ListItems(iLigArticle - 1).SubItems(1) =
Sheets("STOCK").Cells(iLigArticle, 6)
ListView1.ListItems(iLigArticle - 1).SubItems(2) =
Format(Sheets("STOCK").Cells(iLigArticle, 8), "## ##0.00 €")
ListView1.ListItems(iLigArticle - 1).SubItems(3) =
Format(Sheets("STOCK").Cells(iLigArticle, 18), "## ##0.00 €")
iLigArticle = iLigArticle + 1
Wend

TextBoxValeurTotaleStock = Format(Sheets("STOCK").Range("M2").Value , "##
##0.00 €")




End Sub
Private Sub ListView1_Click()
'dès que l'on clique sur l'article, on affiche dans le formulair e
usfDetailArticle les entrées et sorties de stock de l'article

NumArticle = ListView1.SelectedItem

Dim Sh As Worksheet
Set Sh = Worksheets("SORTIES")
Dim Article As String

Article = NumArticle

On Error Resume Next
With Sh
'définir la zone de critère
'choisir l'étiquette de la colonne A1 -> champ où exploiter le filtre
..Range("K1") = .Range("A1")
..Range("K2") = Article 'la valeur du critère du filtre
Sh.Range("P1").CurrentRegion.Clear

'Définir la plage de cellules pour le filtre...
With .Range("A1:F" & .Range("A65536").End(xlUp).Row)
'Application du filtre
..AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sh.Range("K1:K2"), _
CopyToRange:=Sh.Range("P1"), Unique:úlse
'Copie vers la cellule où débutera la plage résultat
End With
..ShowAllData
End With

If Sh.Range("P2").Value = "" Then
MsgBox ("aucune sortie pour ce produit")

Else
NumArticle = Sh.Range("P2").Value
With Sheets("STOCK").Range("A:A")
Set c = .Find(NumArticle, LookIn:=xlValues, LookAt:=xlWhole )
If Not c Is Nothing Then Lig = c.Row
End With
End If
UsfDetailArticle.Show
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.MatchFound Then
ListView1.Top = ComboBox1.ListIndex
End If
End Sub

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ComboBox1.Text = ""
End Sub

Private Sub ListView1_Change()
Set XDST = [A2]
For XCPT = 0 To ListView1.ListCount - 1
If ListView1.Selected(XCPT) Then
XDST.Offset(0, 0) = ListView1.List(XCPT, 0)
XDST.Offset(0, 1) = ListView1.List(XCPT, 1)
XDST.Offset(0, 2) = ListView1.List(XCPT, 2)
XDST.Offset(0, 3) = ListView1.List(XCPT, 3)
Set XDST = XDST.Offset(1, 0)
End If
Next XCPT
Range(XDST, XDST.End(xlDown)).EntireRow.ClearContents
End Sub
=====================
As tu une idée là dessus ?

"Corto" a écrit :



Bonjour Françoise,
Tu peux t'inspirer de ce classeur : http://cjoint.com/?dun0RWRua1
Le truc c'est d'utiliser des ComboBox avec les mêmes donné es que la
Listbox et de mettre la propriété ShowDropButtonWhen à 0 pour les
"déguiser" en simples TextBox

Corto

Françoise a écrit :


Bonjour à tous,

SOUS EXCEL 2003
question du jour : j'ai un formulaire listant dans une LISTVIEW :
ref ARTicle, Designation, Prix HT (environ 500 refs)
je veux créer une TextBox qui permettra à l'utilisateur d e taper une ref
et je voudrais que le curseur se déplace au fur et à mesu re vers les refs
concernés

exemple :
Ma liste
ABCDE
ABDEF
ABEFG

dans la TextBoxAppelRef si je tape AB

Le curseur se positionnera sur la première ref qui commence pa r AB, soit ABCDE

c'est un élément courant dans les formulaires, mais je ne sais comment
l'écrire en VBA
=======
ce que j'ai fait :

If TextBoxAppelArticle <> "" Then
Application.Goto Reference:=TextBoxAppelArticle
End If

======
Quelqu'un a t il déjà implémenté cela dans un U SERFORM ,
d'avance merci













Avatar
Françoise
Bonjour Corto,

je n'ai pu te répondre hier car j'avais un problème d'accès aux réponses
dans les newsgroup "service momentanément indispo !"
mais aujourd'hui cela fonctionne, et je tenais à te remercier pour ton aide,
je continue de regarder si on peut trouver un moyen avec ListView, sinon je
trouverais un autre système
merci encore pour ton aide et l'exemple que tu m'as transmis avec les
listbox est très intéressant et je vais m'en servir c'est certain, donc tu ne
m'as pas fait perdre du temps, et puis c'est comme cela que l'on apprend,
n'est ce pas ?
A bientôt


"Corto" a écrit :

Bonjour Françoise,
Désolé mais je ne connaissais pas le contrôle ListView et depuis le
départ je pensais que tu parlais en fait d'un ListBox.
La solution que je te proposais ne fonctionnera pas avec un ListView car
il n'est pas associé à une plage Excel.
En résumé, j'ai perdu une belle occasion de me taire :-X :-! et encore
désolé de t'avoir fait perdre ton temps. :-[

Corto

Françoise a écrit :
> bon, dur, dur.....
> j'ai bien compris le routage vers la colonne, mais lorsque j'insère le code
> après
> Private Sub UserForm_Initialize()
> j'obtiens l'erreur "impossible de lire la propriété RowSource membre
> introuvable
>
> j'ai mis :
> === > > Private Sub UserForm_Initialize()
> ComboBox1.RowSource =
> Range(ListView1.RowSource).Columns(1).Address(External:=True)
> 'On donne au Combo 1 l'adresse de la première colonne du listbox
> === > > puis la suite de la macro déjà donné dans mail ci-dessus
>
> j'ai changé ListBox1 par la ListView1 de mon formulaire)
>
> Qu'est ce que je fais de mal ?????
>
>
> "Corto" a écrit :
>
>
>> Bonjour Françoise,
>> Regarde dans la macro UserForm_Initialize, c'est là que ça se passe.
>> Private Sub UserForm_Initialize()
>> ComboBox1.RowSource = Range(ListBox1.RowSource).Columns(1). _
>> Address(External:=True)
>> /*On donne au Combo 1 l'adresse de la première colonne du listbox*/
>> ComboBox2.RowSource = Range(ListBox1.RowSource).Columns(3). _
>> Address(External:=True)
>> /*On donne au Combo 2 l'adresse de la troisième colonne du listbox*/
>> End Sub
>>
>> Corto
>>
>> Françoise a écrit :
>>
>>> Bonjour Corto et merci pour ta réponse et ton exemple, c'est exactement ce
>>> que je cherche à faire MAIS avec une LISTVIEW et donc j'ai un peu de mal à
>>> suivre comment modifier pour obtenir le résultat
>>>
>>> j'ai crée une ComboBox pour la saisie des refs articles, mais comment dire
>>> qu'il faut faire appel à la colonne 1 de la LISTVIEW pour faire la recherche
>>> et est ce que c'est possible ?
>>>
>>> Le sais tu ?
>>> ========== > >>> voici le code de mon formulaire :
>>>
>>> Private Sub UserForm_Initialize()
>>>
>>>
>>> 'Suppression des titres de colonnes
>>> ListView1.ColumnHeaders.Clear
>>>
>>> 'Alimentation des titres de colonne :
>>> 'Titre de la colonne : "Référence",
>>> 'Largeur de la colonne : ListView1.Width * 0.3,
>>> 'Alignement de la colonne : lvwColumnLeft
>>> ListView1.ColumnHeaders.Add , , "Référence", ListView1.Width * 0.2,
>>> lvwColumnLeft
>>> ListView1.ColumnHeaders.Add , , "Désignation", ListView1.Width * 0.4,
>>> lvwColumnLeft
>>> ListView1.ColumnHeaders.Add , , "Prix public", ListView1.Width * 0.2,
>>> lvwColumnRight
>>> ListView1.ColumnHeaders.Add , , "Valeur Stock Totale", ListView1.Width *
>>> 0.2, lvwColumnRight
>>> Dim iLigArticle As Integer
>>> iLigArticle = 2
>>>
>>> 'Suppression des éléments de la liste
>>> ListView1.ListItems.Clear
>>>
>>> While Workbooks("STOCK.xls").Sheets("STOCK").Cells(iLigArticle, 1) <> ""
>>> 'Alimentation des éléments de la liste
>>> ListView1.ListItems.Add iLigArticle - 1, ,
>>> Sheets("STOCK").Cells(iLigArticle, 1)
>>> ListView1.ListItems(iLigArticle - 1).SubItems(1) =
>>> Sheets("STOCK").Cells(iLigArticle, 6)
>>> ListView1.ListItems(iLigArticle - 1).SubItems(2) =
>>> Format(Sheets("STOCK").Cells(iLigArticle, 8), "## ##0.00 €")
>>> ListView1.ListItems(iLigArticle - 1).SubItems(3) =
>>> Format(Sheets("STOCK").Cells(iLigArticle, 18), "## ##0.00 €")
>>> iLigArticle = iLigArticle + 1
>>> Wend
>>>
>>> TextBoxValeurTotaleStock = Format(Sheets("STOCK").Range("M2").Value, "##
>>> ##0.00 €")
>>>
>>>
>>>
>>>
>>> End Sub
>>> Private Sub ListView1_Click()
>>> 'dès que l'on clique sur l'article, on affiche dans le formulaire
>>> usfDetailArticle les entrées et sorties de stock de l'article
>>>
>>> NumArticle = ListView1.SelectedItem
>>>
>>> Dim Sh As Worksheet
>>> Set Sh = Worksheets("SORTIES")
>>> Dim Article As String
>>>
>>> Article = NumArticle
>>>
>>> On Error Resume Next
>>> With Sh
>>> 'définir la zone de critère
>>> 'choisir l'étiquette de la colonne A1 -> champ où exploiter le filtre
>>> ..Range("K1") = .Range("A1")
>>> ..Range("K2") = Article 'la valeur du critère du filtre
>>> Sh.Range("P1").CurrentRegion.Clear
>>>
>>> 'Définir la plage de cellules pour le filtre...
>>> With .Range("A1:F" & .Range("A65536").End(xlUp).Row)
>>> 'Application du filtre
>>> ..AdvancedFilter Action:=xlFilterCopy, _
>>> CriteriaRange:=Sh.Range("K1:K2"), _
>>> CopyToRange:=Sh.Range("P1"), Unique:úlse
>>> 'Copie vers la cellule où débutera la plage résultat
>>> End With
>>> ..ShowAllData
>>> End With
>>>
>>> If Sh.Range("P2").Value = "" Then
>>> MsgBox ("aucune sortie pour ce produit")
>>>
>>> Else
>>> NumArticle = Sh.Range("P2").Value
>>> With Sheets("STOCK").Range("A:A")
>>> Set c = .Find(NumArticle, LookIn:=xlValues, LookAt:=xlWhole)
>>> If Not c Is Nothing Then Lig = c.Row
>>> End With
>>> End If
>>> UsfDetailArticle.Show
>>> End Sub
>>> Private Sub ComboBox1_Change()
>>> If ComboBox1.MatchFound Then
>>> ListView1.Top = ComboBox1.ListIndex
>>> End If
>>> End Sub
>>>
>>> Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>>> ComboBox1.Text = ""
>>> End Sub
>>>
>>> Private Sub ListView1_Change()
>>> Set XDST = [A2]
>>> For XCPT = 0 To ListView1.ListCount - 1
>>> If ListView1.Selected(XCPT) Then
>>> XDST.Offset(0, 0) = ListView1.List(XCPT, 0)
>>> XDST.Offset(0, 1) = ListView1.List(XCPT, 1)
>>> XDST.Offset(0, 2) = ListView1.List(XCPT, 2)
>>> XDST.Offset(0, 3) = ListView1.List(XCPT, 3)
>>> Set XDST = XDST.Offset(1, 0)
>>> End If
>>> Next XCPT
>>> Range(XDST, XDST.End(xlDown)).EntireRow.ClearContents
>>> End Sub
>>> ==================== > >>> As tu une idée là dessus ?
>>>
>>> "Corto" a écrit :
>>>
>>>
>>>
>>>> Bonjour Françoise,
>>>> Tu peux t'inspirer de ce classeur : http://cjoint.com/?dun0RWRua1
>>>> Le truc c'est d'utiliser des ComboBox avec les mêmes données que la
>>>> Listbox et de mettre la propriété ShowDropButtonWhen à 0 pour les
>>>> "déguiser" en simples TextBox
>>>>
>>>> Corto
>>>>
>>>> Françoise a écrit :
>>>>
>>>>
>>>>> Bonjour à tous,
>>>>>
>>>>> SOUS EXCEL 2003
>>>>> question du jour : j'ai un formulaire listant dans une LISTVIEW :
>>>>> ref ARTicle, Designation, Prix HT (environ 500 refs)
>>>>> je veux créer une TextBox qui permettra à l'utilisateur de taper une ref
>>>>> et je voudrais que le curseur se déplace au fur et à mesure vers les refs
>>>>> concernés
>>>>>
>>>>> exemple :
>>>>> Ma liste
>>>>> ABCDE
>>>>> ABDEF
>>>>> ABEFG
>>>>>
>>>>> dans la TextBoxAppelRef si je tape AB
>>>>>
>>>>> Le curseur se positionnera sur la première ref qui commence par AB, soit ABCDE
>>>>>
>>>>> c'est un élément courant dans les formulaires, mais je ne sais comment
>>>>> l'écrire en VBA
>>>>> ====== > >>>>> ce que j'ai fait :
>>>>>
>>>>> If TextBoxAppelArticle <> "" Then
>>>>> Application.Goto Reference:=TextBoxAppelArticle
>>>>> End If
>>>>>
>>>>> ===== > >>>>> Quelqu'un a t il déjà implémenté cela dans un USERFORM ,
>>>>> d'avance merci
>>>>>
>>>>>
>>>>>