XL 2019 désactivation pave numérique

jokerfidelio

XLDnaute Occasionnel
Bonjour a tous,

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

Merci de votre aide

cordialement
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @jokerfidelio , le Forum

La "vraie" question est : "que veux-tu faire avec celà" :

If Val(Application.Version) > 10 Then SendKeys "{F4}"

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" ?

Ou bien je n'ai pas compris...

Bonne journée
@+Thierry
 

jokerfidelio

XLDnaute Occasionnel
Bonjour @jokerfidelio , le Forum

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" ?

Ou bien je n'ai pas compris...

Bonne journée
@+Thierry

bonjour et merci de votre reponse

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 ?
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour jokerfidelio, _Thierry,

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
A+
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re @jokerfidelio

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 !!!
 

job75

XLDnaute Barbatruc
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
 

jokerfidelio

XLDnaute Occasionnel
Bonjour jokerfidelio, _Thierry,

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
A+

job75 un grand merci c'est nickel
 

patricktoulon

XLDnaute Barbatruc
bonjour
pour le placement ca ne peut pas fonctionner a moins que le startupposition soit à 0

d'ailleurs chez moi le code tel quel le userform est en dehors de l’écran a droite
il manque la soustraction scrollcolumn et même avec c'est pas bon

question
l'intention est bien de positionner le userform a droite de la cellule active en colonne "T"?
 

patricktoulon

XLDnaute Barbatruc
démonstration
demo4.gif


pour positionner un userform sur une cellule il faut prendre en compte beaucoup plus de chose que ça même si pour le moment ca fonctionne sur ton pc

 

patricktoulon

XLDnaute Barbatruc
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 ;) ;)
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87