bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre li ste
contenant pleins d'autres elements (dont l'element selectionné fait p arti)
puis je re-selectionne l'element => pourquoi je n'arrive pas à rese lectonner
mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre li ste
contenant pleins d'autres elements (dont l'element selectionné fait p arti)
puis je re-selectionne l'element => pourquoi je n'arrive pas à rese lectonner
mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre li ste
contenant pleins d'autres elements (dont l'element selectionné fait p arti)
puis je re-selectionne l'element => pourquoi je n'arrive pas à rese lectonner
mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre liste
contenant pleins d'autres elements (dont l'element selectionné fait parti)
puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre liste
contenant pleins d'autres elements (dont l'element selectionné fait parti)
puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre liste
contenant pleins d'autres elements (dont l'element selectionné fait parti)
puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: O3LxbbYAGHA.1028@TK2MSFTNGP11.phx.gbl...
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correct ement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une mod if de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat atten du, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Doubl e cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne v aut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" <toto@bla.com> a écrit dans le message de news:
uUwFltYAGHA.356@TK2MSFTNGP12.phx.gbl...
ça marche mieux mais de temps en temps ça ne fonctionne pas correct ement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: O3LxbbYAGHA.1028@TK2MSFTNGP11.phx.gbl...
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une mod if de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat atten du, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Doubl e cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne v aut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correct ement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une mod if de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat atten du, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Doubl e cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne v aut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" <toto@bla.com> a écrit dans le message de news:
uUwFltYAGHA.356@TK2MSFTNGP12.phx.gbl...
ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: O3LxbbYAGHA.1028@TK2MSFTNGP11.phx.gbl...
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element T oto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de news:
u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandBu tton sur
le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correc tement
=> le systeme de mettre un temps de latence ne doit pas être trè s fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message d e
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une mo dif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat atte ndu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Doub le cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element T oto
dans la deuxieme Colonne ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de news:
u$RjY6YAGHA.2704@TK2MSFTNGP15.phx.gbl...
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandBu tton sur
le UserForm pour déclencher la MAJ de la liste.
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" <toto@bla.com> a écrit dans le message de news:
uUwFltYAGHA.356@TK2MSFTNGP12.phx.gbl...
ça marche mieux mais de temps en temps ça ne fonctionne pas correc tement
=> le systeme de mettre un temps de latence ne doit pas être trè s fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message d e
news: O3LxbbYAGHA.1028@TK2MSFTNGP11.phx.gbl...
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une mo dif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat atte ndu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Doub le cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element T oto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de news:
u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandBu tton sur
le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correc tement
=> le systeme de mettre un temps de latence ne doit pas être trè s fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message d e
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une mo dif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat atte ndu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Doub le cliic
d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut pas
rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné fait
parti) puis je re-selectionne l'element => pourquoi je n'arrive pas à
reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element Toto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de
news: u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandButton
sur le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arrive pas
à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element Toto
dans la deuxieme Colonne ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: u$RjY6YAGHA.2704@TK2MSFTNGP15.phx.gbl...
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandButton
sur le UserForm pour déclencher la MAJ de la liste.
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" <toto@bla.com> a écrit dans le message de news:
uUwFltYAGHA.356@TK2MSFTNGP12.phx.gbl...
ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: O3LxbbYAGHA.1028@TK2MSFTNGP11.phx.gbl...
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arrive pas
à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element Toto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de
news: u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandButton
sur le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arrive pas
à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
non, c'est une varaible de type tableau => Dim Tableau(10,2) as strin g
"Michel Gaboly" a écrit dans le message de news:
Cela dépend de ta source de donées : n'y a-t-il une plage sur une f euille
quelconque correspondant à cette 2ème colonne ?par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element T oto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de
news: u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandBu tton
sur le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas corre ctement
=> le systeme de mettre un temps de latence ne doit pas être trè s fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une m odif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat att endu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Dou ble
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constater a
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV( ) à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arri ve pas
à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
non, c'est une varaible de type tableau => Dim Tableau(10,2) as strin g
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de news:
ePtliRZAGHA.1028@TK2MSFTNGP11.phx.gbl...
Cela dépend de ta source de donées : n'y a-t-il une plage sur une f euille
quelconque correspondant à cette 2ème colonne ?
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element T oto
dans la deuxieme Colonne ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: u$RjY6YAGHA.2704@TK2MSFTNGP15.phx.gbl...
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandBu tton
sur le UserForm pour déclencher la MAJ de la liste.
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" <toto@bla.com> a écrit dans le message de news:
uUwFltYAGHA.356@TK2MSFTNGP12.phx.gbl...
ça marche mieux mais de temps en temps ça ne fonctionne pas corre ctement
=> le systeme de mettre un temps de latence ne doit pas être trè s fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: O3LxbbYAGHA.1028@TK2MSFTNGP11.phx.gbl...
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une m odif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat att endu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Dou ble
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constater a
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV( ) à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arri ve pas
à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
non, c'est une varaible de type tableau => Dim Tableau(10,2) as strin g
"Michel Gaboly" a écrit dans le message de news:
Cela dépend de ta source de donées : n'y a-t-il une plage sur une f euille
quelconque correspondant à cette 2ème colonne ?par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element T oto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de
news: u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandBu tton
sur le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas corre ctement
=> le systeme de mettre un temps de latence ne doit pas être trè s fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une m odif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat att endu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Dou ble
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constater a
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV( ) à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arri ve pas
à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
non, c'est une varaible de type tableau => Dim Tableau(10,2) as string
"Michel Gaboly" a écrit dans le message de
news:
Cela dépend de ta source de donées : n'y a-t-il une plage sur une feuille
quelconque correspondant à cette 2ème colonne ?par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element Toto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de
news: u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandButton
sur le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arrive
pas à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
non, c'est une varaible de type tableau => Dim Tableau(10,2) as string
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: ePtliRZAGHA.1028@TK2MSFTNGP11.phx.gbl...
Cela dépend de ta source de donées : n'y a-t-il une plage sur une feuille
quelconque correspondant à cette 2ème colonne ?
par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element Toto
dans la deuxieme Colonne ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: u$RjY6YAGHA.2704@TK2MSFTNGP15.phx.gbl...
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandButton
sur le UserForm pour déclencher la MAJ de la liste.
je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" <toto@bla.com> a écrit dans le message de news:
uUwFltYAGHA.356@TK2MSFTNGP12.phx.gbl...
ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" <michel.gaboly@wanadoo.fr> a écrit dans le message de
news: O3LxbbYAGHA.1028@TK2MSFTNGP11.phx.gbl...
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.
bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arrive
pas à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com
non, c'est une varaible de type tableau => Dim Tableau(10,2) as string
"Michel Gaboly" a écrit dans le message de
news:
Cela dépend de ta source de donées : n'y a-t-il une plage sur une feuille
quelconque correspondant à cette 2ème colonne ?par contre, j'ai pas bien compris l'utilisation de la porcedure match
si j'ai un dim Tableau(10,2) comment fair epour recherché l'element Toto
dans la deuxieme Colonne ?
"Michel Gaboly" a écrit dans le message de
news: u$
Pas testé, mais si cela marche, très bien. ;-((
En cas de problème, une autre option consiste à mettre un CommandButton
sur le UserForm pour déclencher la MAJ de la liste.je crois que j'ai trouvé, qu'en penses tu
Private DoubleClick As Boolean
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
If DoubleClick Then
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
DoubleClick = False
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DoubleClick = True
End Sub
"Emcy" a écrit dans le message de news:ça marche mieux mais de temps en temps ça ne fonctionne pas correctement
=> le systeme de mettre un temps de latence ne doit pas être très fiable
... tu n'aurais pas une autre solution ?
"Michel Gaboly" a écrit dans le message de
news:
Re,
Parce qu'il y a conflit avec l'événement Click qui provoque une modif de
ListIndex :
Si on exécute ton code en pas à pas, tu obtiens le résultat attendu, et
ensuite
ListIndex est modifié à nouveau comme tu avais fait suivre de Double
cliic d'un clic simple au même endroit.
Voici ton code :
Dim Montableau(100) As String
Dim Montableau2(100) As String
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Next i
For i = 0 To 100
Montableau2(i) = 100 - i
Next i
Me.ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
MaValeur = Me.ListBox1.Value
If Me.ListBox1.List(0) = "0" Then
Me.ListBox1.List = Montableau2
Else
Me.ListBox1.List = Montableau
End If
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.List(i) = MaValeur Then
Me.ListBox1.ListIndex = i
Exit Sub
End If
Next i
End Sub
Si tu ajoutes :
Private Sub ListBox1_Click()
Debug.Print "C" & ListBox1.ListIndex
End Sub
et
Debug.Print "D" & ListBox1.ListIndex avant ton Esit Sub, tu constatera
qu'un événement click intervient après le double
clic.
La modif la + simple est d'ajouer un délai :
Au début du code de l'évenement _DblClick, ajoutes :
Application.Wait (Now + TimeValue("0:00:1"))
et cela marchera (plus de conflit).
Par ailleurs on peut faire beaucoup + simple et + efficace (un EQUIV() à
la place de la boucle) :
Private Sub UserForm_Initialize()
For i = 0 To 100
Montableau(i) = i
Montableau2(i) = 100 - i
Next i
ListBox1.List = Montableau
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MaValeur As String
With ListBox1
MaValeur = .Value
.List = IIf(.List(0) = "0", Montableau2, Montableau)
Application.Wait (Now + TimeValue("0:00:1"))
.ListIndex = Application.Match(MaValeur, .List, 0) - 1
End With
End Sub
Dans le Initialize, aucune raison de faire 2 boucles, 1 suffit.
Dernière chose pour appeler le UserForm,
tu écris
Sub main()
Load UserForm1
UserForm1.Show
End Sub
Tu peux supprimer Load UserForm1
Load sert uniquement à charger en mémoire un UserForm que l'on ne vaut
pas rendre initialement visible, et que l'on
affiche ensuite avec Show.
Show suffit dans lle cas contraire : si le UserForm n'est pas déjà en
mémoire, il le charge.bonjour,
j'ai une lisbox avec plein d'elements à l'interieur;
lorque je double clic dessus, je re-rempli ma listBox avec une autre
liste contenant pleins d'autres elements (dont l'element selectionné
fait parti) puis je re-selectionne l'element => pourquoi je n'arrive
pas à reselectonner mon element ? que faire ?
voici mon classeur d'essai :
http://cjoint.com/?mpoGJvRXBy
--
Cordialement,
Michel Gaboly
www.gaboly.com