j'utilise une liste déroulante automatique, avec userForm, avec double clic pour activer celle ci sur une zone définie.
a chaque mise en action de celle ci, une fois sur deux en generale , le clavier numérique ce désactive et ce réactive seule aussi
Après recherche je pense que le problème vient du SendKeys, j'ai essayé plusieurs solutions mais sans succes
voici les code utilisé :
sur la feuille :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Range("t18:t247"), Target) Is Nothing And Target.Count = 1 Then
UserForm1.Top = Target.Top + 110 - Cells(ActiveWindow.ScrollRow, 1).Top
UserForm1.Left = Target.Left + Target.Width + 20
UserForm1.Show
End If
Cancel = True
End Sub
End Sub
userform :
Code:
Private Sub UserForm_Initialize()
Me.ComboBox1.List = Sheets("LUNDI").Range("S349:S373").Value
If Val(Application.Version) > 10 Then SendKeys "{F4}"
End Sub
Private Sub ComboBox1_click()
ActiveCell.Value = Me.ComboBox1
Unload Me
End Sub
Si la Version d'office est supérieure à 10 on ferme le UserForm ?
Pourquoi alors ne pas simplement utiliser : "Unload Me", ou encore plus court "End" ?
La "vraie" question est : "que veux-tu faire avec celà" :
Si la Version d'office est supérieure à 10 on ferme le UserForm ?
Pourquoi alors ne pas simplement utiliser : "Unload Me", ou encore plus court "End" ?
je n'avais pas compris cette ligne de cette manière
effectivement je n'ai pas besoin de cette valeur de fermeture !
quelles sont les différentes façon d'ecriture avec unload me et end pour éviter le sendkeys ?
Tu n'y es pas Thierry, "{F4}" sert à dérouler la liste de la ComboBox.
Il est bien connu que Application.SendKeys désactive la pavé numérique.
Donc suppriprimer cette instruction et utiliser ComboBox1.DropDown mais en différé grâce à Application.OnTime.
Mettez tout ce code dans le code de la feuille :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Range("t18:t247"), Target) Is Nothing And Target.Count = 1 Then
UserForm1.Top = Target.Top + 110 - Cells(ActiveWindow.ScrollRow, 1).Top
UserForm1.Left = Target.Left + Target.Width + 20
If Val(Application.Version) > 10 Then Application.OnTime 1, Me.CodeName & ".Deroule"
UserForm1.Show
Cancel = True
End If
End Sub
Sub Deroule()
UserForm1.ComboBox1.DropDown
End Sub
Ben ALT [F4] est un raccourci clavier qui ferme la Fenêtre Active, donc c'est ce que j'en ai déduit...
Plutôt que de refermer à l'initialize, tant qu'à faire, il vaut mieux intervenir sur le bouton qui va lancer le UserForm :
VB:
Sub Button1_Click()
If Val(Application.Version) > 10 Then
MsgBox "Votre version " & Application.Version & " n'est pas compatible !!!"
Else
UserForm1.Show
End If
End Sub
Bonne journée
@+Thierry
EDIT Ah bonjour Job75, ah bon c'est pour faire dérouler la ComboBox... Bah LoL ...
Et sinon oui dacodac, SendKey très cracra !!!
Il faut savoir que SendKeys ne pose plus de problème si on l'utilise avec wscript.shell, testez :
VB:
Private Sub UserForm_Initialize()
Me.ComboBox1.List = Sheets("LUNDI").Range("S349:S373").Value
If Val(Application.Version) > 10 Then CreateObject("wscript.shell").SendKeys "{F4}"
End Sub
Tu n'y es pas Thierry, "{F4}" sert à dérouler la liste de la ComboBox.
Il est bien connu que Application.SendKeys désactive la pavé numérique.
Donc suppriprimer cette instruction et utiliser ComboBox1.DropDown mais en différé grâce à Application.OnTime.
Mettez tout ce code dans le code de la feuille :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Range("t18:t247"), Target) Is Nothing And Target.Count = 1 Then
UserForm1.Top = Target.Top + 110 - Cells(ActiveWindow.ScrollRow, 1).Top
UserForm1.Left = Target.Left + Target.Width + 20
If Val(Application.Version) > 10 Then Application.OnTime 1, Me.CodeName & ".Deroule"
UserForm1.Show
Cancel = True
End If
End Sub
Sub Deroule()
UserForm1.ComboBox1.DropDown
End Sub
pour placer un userform au niveau d'une cellule il y plusieurs choses a prendre en compte la position de l'application les scrolls vertical et horizontal les ligne éventuellement figées qui faussent les calculs le fractionnement de fenêtre qui...
re
AU MINIMA !!!!!!
si on n'a pas de figé ou freezepane à prendre en considération
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim P_ToPx#, Z#, L#, T#, Ec#, OpS&, AppV&
OpS = Round(Val(Mid(Application.OperatingSystem, InStrRev(Application.OperatingSystem, " "))), 0)
AppV = Int(Val(Application.Version))
Ec = 4 And OpS = 6 And AppV < 16 'ecart cadre grosse bordures 2007 et/ou Windows 7
With ActiveWindow.ActivePane
P_ToPx = (.PointsToScreenPixelsY(72) - .PointsToScreenPixelsY(0)) / 72
Z = ActiveWindow.Zoom / 100
L = (.PointsToScreenPixelsX(Target.Left)) / P_ToPx * Z + Ec
T = (.PointsToScreenPixelsY(Target.Top)) / P_ToPx * Z + Ec
End With
With UserForm1
.StartUpPosition = 0
.Left = L
.Top = T
If Val(Application.Version) > 10 Then Application.OnTime 1, Me.CodeName & ".Deroule"
.Show
End With
End Sub
Sub Deroule()
UserForm1.ComboBox1.DropDown
End Sub
bon pour la condition si office 2010 développer la combo, il faudra m'expliquer le rapport