Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Saisir dans une cellule après avoir activé un UserForm en vbModeless

Dudu2

XLDnaute Barbatruc
Bonjour,

Ne me demandez pas pourquoi je veux faire une chose pareil qui n'a à priori pas de sens... sauf pour utiliser l'Add-In Scan It to Office et capter les données dans un UserForm, car ce dernier n'envoie les données que sur une cellule active. Mais peu importe.

Voilà, j'aimerais, après avoir lancé un UserForm en vbModeless, pouvoir directement saisir dans une cellule tout de suite et sans aucune action utilisateur (clic) préalable.

Alors j'y arrive en générant par VBA un clic souris dans la cellule en question.
Mais n'y a-t-il pas une solution API avec les Handles des fenêtres qui serait moins extravagante que le clic souris VBA ?
J'en appelle aux spécialistes de l'API. Merci par avance !
 

Pièces jointes

  • Classeur1.xlsm
    28.4 KB · Affichages: 3
Solution
sinon si tu est amener a avoir plusieurs Forms afficher ou naviguer de fentre en fenetre meme hors application alors avec les api au black pas cher net d'impot pas declaré
dans ton userform
VB:
'**********************************************************************************************
'      fixer le UserForm au premier plan
'patricktoulon
'**********************************************************************************************

'EXEMPLE
Private Sub UserForm_Activate()
    Premier_Plan
UserForm1.Show 0
End Sub

Sub Premier_Plan()
    Dim hwnd&
     hwnd = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")
    ExecuteExcel4Macro ("CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & hwnd & ", " & -1 & ", " & 0& &...

Dudu2

XLDnaute Barbatruc
L'Add-In ne sait envoyer des données qu'en cellule (active je suppose).
De plus, il ne génère pas de ENTER ou TAB après avoir placé ses données en cellule.
Donc je suis obligé d'envoyer des SendKeys ENTER régulièrement jusqu'à obtenir une valeur en cellule.

Si je reste sur le UserForm, les SendKeys vont s'appliquer à la TextBox.
Il faut donc que ce soit la feuille qui soit réellement active pour que les SendKeys s'appliquent à la cellule active qui aura éventuellement reçu des données de l'Add-In. Et c'est cette opération que je réalise avec un clic souris VBA et que je préfèrerais réaliser avec de l'API sur les Handles.
 

patricktoulon

XLDnaute Barbatruc
re
ben avec les api tu met ton userform au premier plan tout le temps de son utilisation (setwindowsPos) puis avant tes sendkeys tu fait un sheet.activate et tu lance tes sendkey ou actuve une cellule particuliere en la selectionnant
le sheet sera actif tout en gardant ton userform au premier plan
voila voila
 

patricktoulon

XLDnaute Barbatruc
sinon si tu est amener a avoir plusieurs Forms afficher ou naviguer de fentre en fenetre meme hors application alors avec les api au black pas cher net d'impot pas declaré
dans ton userform
VB:
'**********************************************************************************************
'      fixer le UserForm au premier plan
'patricktoulon
'**********************************************************************************************

'EXEMPLE
Private Sub UserForm_Activate()
    Premier_Plan
UserForm1.Show 0
End Sub

Sub Premier_Plan()
    Dim hwnd&
     hwnd = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")
    ExecuteExcel4Macro ("CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & hwnd & ", " & -1 & ", " & 0& & ", " & 0& & ", " & 0& & ", " & 0& & ", " & (&H1 Or &H2) & ")")
End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…