Boite de dialogue

Boite de dialogue - VB/VBA/VBS - Programmation

Marsh Posté le 18-06-2007 à 14:50:36    

Bonjour,
 
Sous Word, j'ai fait une boite de dialogue que j'utilise en modal
 
 
Dans cette boite j'ai un bouton qui fait une recherche de mot.
Ce que je voudrais, c'est que quand je clic sur le document, le curseur se déplace automatiquement à gauche du mot.
 
 
Merci

Reply

Marsh Posté le 18-06-2007 à 14:50:36   

Reply

Marsh Posté le 18-06-2007 à 16:44:09    

Dans Word l'utilisation du raccourci CTRL+flèche gauche permet d'aller au début du mot en cours (ou précédent si on est sur un espace).
 
En passant par l'enregistreur de macro, tu devrais pouvoir t'en servir.

Reply

Marsh Posté le 19-06-2007 à 07:50:59    

Bonjour,
 
Merci tegu, mais ce n'est pas tout à fait ça  
En fiat on doit cliquer sur le bouton de la boite de dialogue pour trouver une séquence.
Et la, cette séquence est sélectionnée (bien entendu) mais l'opérateur peut cliquer sur le document pour le rendre actif (la boite de dialogue reste en second plan).
A ce stade si l'opérateur tape une touche la sélection sera remplacée => perte de texte.
 
Ce que je voudrais c'est que, quand on clique sur le document le curseur se place à gauche du texte sélectionné sans aucune autre manipulation.
 
Je sais je demande beaucoup, et peut-être  qu'il n'y a pas de solution (l'espoir fait vivre.....)
 
Il faudrait intercepter la mise en second plan de la boite de dialogue .......
 
Bonne journée

Reply

Marsh Posté le 19-06-2007 à 10:15:36    

« ...une boite de dialogue que j'utilise en modal.  »
Bon, première chose sur laquelle se mettre d'accord : ta boite de dialogue est non modale !
Elle permet d'accéder à une autre fenêtre sans la fermer http://fr.wikipedia.org/wiki/Fen%C3%AAtre_modale
 
Sinon une piste serait une macro dans le normal.dot qui détecterait si la boite de dialogue est ouverte et, quand on active un document word, lancerait la séquence que j'ai indiqué précédemment.
 
Sans garantie aucune. Je ne suis pas sûr que ça puisse marcher.

Reply

Marsh Posté le 19-06-2007 à 10:23:36    

A adapter  
 
Dans TheDocument  


Option Explicit
 
Public Sub Tst()
    UserForm1.Show vbModeless
End Sub


 
Créer une UserForm
ici avec une liste déroulante et un bouton de validation
y associer le code suivant


Option Explicit
 
Private Sub CommandButton1_Click()
    ' a toi de mettre ton code
    ' ici bidon pour test
    Selection.MoveRight Unit:=wdCharacter, Count:=0
    Selection.TypeText Text:=UserForm1.ListBox1.Value
    ActiverWord
End Sub
 
Private Sub UserForm_Initialize()
Dim i As Integer
    ListBox1.Clear
    For i = 1 To 20
        ListBox1.AddItem i
    Next
    ListBox1.ListIndex = 0
    Init_Usf
End Sub
 


Code dans un module


Option Explicit
 
Private Declare Function BringWindowToTop Lib "User32" (ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetFocus Lib "User32" (ByVal hWnd As Long) As Long
 
Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
 
Public Sub ActiverWord()
Dim Res As Long, WordHWnd As Long
Dim strClassName As String
 
    strClassName = "OpusApp"
     
    WordHWnd = FindWindow(lpClassName:=strClassName, lpWindowName:=vbNullString)
    If WordHWnd > 0 Then
        Res = BringWindowToTop(hWnd:=WordHWnd)
        If Res = 0 Then
            Debug.Print "Erreur avec BringWindowToTop:  " & CStr(Err.LastDllError)
        Else
            SetFocus hWnd:=WordHWnd
        End If
    Else
        Debug.Print "Erreur"
    End If
End Sub
 
Public Sub Init_Usf()
Dim hWnd As Long
    hWnd = FindWindow(vbNullString, UserForm1.Caption)
    SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H20000
End Sub


Message édité par kiki29 le 19-06-2007 à 11:43:31
Reply

Marsh Posté le 19-06-2007 à 10:35:22    

Bonjour  
 
Merci de vos réponses, mais un contretemps vient de m'arriver et je vais devoir suspendre pour quelque temps (1 semaine) l'analyse de ce problème.
 
Mais je ne l'oublierai pas pour autant, Je vous tiendrais au courant
 
Merci

Reply

Marsh Posté le 28-06-2007 à 09:32:30    

Bonjour,
Comme promis me revoila
 
Tégu : d'accord sur la définition de modale, mais il faudrait le dire à microsoft parce qu'il faut écrire "frm.show modal" pour la rendre non modale !!!!!!!!!!!!!!!!!!!!!!!!!!
 
 
KIKI29 je viens d'essayer ton code, je ne comprends pas tout, mais j'ai un petit soucis,  ça se plante à la commande FindWindow
 
    strClassName = "OpusApp"      
    WordHWnd = FindWindow(lpClassName:=strClassName, lpWindowName:=vbNullString)
 
IL me semble qu'il doit me manquer un module de classe  "OpusApp"  
 
 
Merci
 
 
 

Reply

Marsh Posté le 28-06-2007 à 09:52:10    

Pour Info : Nom des Classes Windows utilisées dans MS Office
 
Word 97            OpusApp
Word 2000         OpusApp
Word XP            OpusApp
 
pour Excel          XLMAIN etc
 
Je n'ai strictement aucun probleme, à mon avis relis le code ainsi que l'affectation de ce code
TheDocument, Module ou UserForm1


Message édité par kiki29 le 28-06-2007 à 09:55:30
Reply

Marsh Posté le 28-06-2007 à 10:00:39    

Ok, j'ai changé les private function en function et tout est OK
 
Mais a quel moment la macro ActiverWord est exécutée ..
 
Je pense que je ne me suis pas bien fait bien comprendre
 
Ce que je voudrais c'est quand on swap d'une boite de dialogue au document word, on déselectionne automatiquement le texte (on place le curseur à gauche).
La grande difficulté (enfin pour moi) est de détecter le passage de la boite de dialogue au document.
 
 

Reply

Marsh Posté le 28-06-2007 à 10:36:47    

Relis le code

Reply

Marsh Posté le 28-06-2007 à 10:36:47   

Reply

Marsh Posté le 02-07-2007 à 09:51:29    

Pour info : « modal » n'est pas une constante VB.
Dans ton cas sa valeur semble être vide ou égale à zéro (si tu l'as déclarée ou si tu n'utilises pas « Option Explicit »).
Or les constantes officielles pour les boîtes de dialogue sont vbModal et vbModeless. Et comme par hasard vbModeless = 0.
 
D'où ton erreur d'interprétation à mon avis.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed