Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1091 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Boite de dialogue

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Boite de dialogue

n°1576308
pyrof
Posté le 18-06-2007 à 14:50:36  profilanswer
 

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

mood
Publicité
Posté le 18-06-2007 à 14:50:36  profilanswer
 

n°1576376
tegu
Posté le 18-06-2007 à 16:44:09  profilanswer
 

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.

n°1576597
pyrof
Posté le 19-06-2007 à 07:50:59  profilanswer
 

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

n°1576643
tegu
Posté le 19-06-2007 à 10:15:36  profilanswer
 

« ...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.

n°1576648
kiki29
Posté le 19-06-2007 à 10:23:36  profilanswer
 

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
n°1576659
pyrof
Posté le 19-06-2007 à 10:35:22  profilanswer
 

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

n°1580212
pyrof
Posté le 28-06-2007 à 09:32:30  profilanswer
 

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
 
 
 

n°1580215
kiki29
Posté le 28-06-2007 à 09:52:10  profilanswer
 

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
n°1580223
pyrof
Posté le 28-06-2007 à 10:00:39  profilanswer
 

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.
 
 

n°1580256
kiki29
Posté le 28-06-2007 à 10:36:47  profilanswer
 

Relis le code

mood
Publicité
Posté le 28-06-2007 à 10:36:47  profilanswer
 

n°1581365
tegu
Posté le 02-07-2007 à 09:51:29  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Boite de dialogue

 

Sujets relatifs
[Résolu] Récuperer des valeurs entrées dans une boite de dialogueBoite de dialogue : insertion d'un calendrier
[VBA] Ouverture fichier avec boite dialoguePage de confirmation de suppression et checkbox
communication entre la view et la boite de dialogueboite de dialogue en VBA
supprimer boite de dialogue lors de la fermeture fichierboite de dialogue parcourir
Faire appel à une boite de dialogueOuvrir la boite de dialogue "Wireless Network Connection properties"
Plus de sujets relatifs à : Boite de dialogue


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR