XL 2021 VBA - Quelle fenêtre (non Excel) était active juste avant

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour,

Le problème fonctionnel est le suivant:
Une fenêtre Acrobat s'ouvre suite au double-clic sur un Embbeded Object PDF dans une feuille Excel.
La fenêtre Acrobat s'ouvre sur le même moniteur que la fenêtre Excel.
Je voudrais, via une macro, déplacer la fenêtre Acrobat sur un autre moniteur.

Le problème technique est le suivant:
Après l'affichage de la fenêtre Acrobat sur double-clic par Excel, lorsque je reviens sur Excel pour lancer (via le Ruban de @patricktoulon) la macro qui doit déplacer cette fenêtre Acrobat sur un autre moniteur, comment je trouve son Handle sachant que ça pourrait aussi être une fenêtre Word ou Photo ou autre ?
Autrement dit, comment puis-je trouver le Handle de la Window précédemment active avant le retour sur Excel pour lancer la Macro ?
L'ordre GETNEXT ou GETPREV tient-il compte de l'ordre d'activation ?
 
re bonjour @Dudu2
la reponse est non
le fait de changer le focus sur une fenêtre change son index dans le tableau de position dans le tread
et c'est bien la le probleme

la solution serait ques des le lancement de la fentre adobe lui fait un
setwindowpos hnwd,-1,0,0,0,0,&h1 or &h2
qui permet demettre la fenetre a position superieur et premier plan
du coup il est facile de redescendre sur la 0 qui est forcement la precedente
 
Ok merci pour ta confirmation.
Je n'ai pas la main, c'est Excel qui lance Acrobat, et le double-clic sur l'embbeded object je peux pas le voir.
La seule solution qui reste c'est de lister les fenêtres de la barre des tâches et de demander à l'utilisateur laquelle il souhaite placer sur un autre moniteur. Un peu lourd quand même ! Ou peut-être je peux vérifier les fenêtres sur le même moniteur (MonitorFromWindow).
 
non!! il y a une autre possibilité !!!!
le double clic sur l'object pdf dans la feuille declenche le window_deactivate( dans le thisworkbook testé je confirme)
parti de la tu a la main
et donc cet event tu lance notre petit bébé findwindowbyparttitle ou le nom que tu lui a donné qui recherche la widow avec une partie de texte
parti de la on peut considérer que au dblclick sur l'object tu a ta fenêtre pdf (le handle)
c'est bon tu va y arriver?
 
OK, c'est un idée intéressante que je vais exploiter.
Sinon suite à notre discussion sur le sujet des problèmes Word et Excel sur l'insertion en embbeded:
VB:
'----------------------
    'Intégration du fichier
    '----------------------
    FileName = Mid(TabFileFullNames(1), InStrRev(TabFileFullNames(1), "\") + 1)
    k = InStrRev(FileName, ".")
    If k > 0 Then
        Extension = LCase(Mid(FileName, k + 1))
    Else
        Extension = ""
    End If
    
    Select Case Extension
        Case "pdf"
            IconShapeName = "IconePDF"
            IconFileName = "PDF.ico"
            
        Case "doc", "docx"
            IconShapeName = "IconeWord"
            IconFileName = "Word.ico"
            
        Case "xls", "xlsx", "xlsm"
            IconShapeName = "IconeExcel"
            IconFileName = "Excel.ico"
            
        Case "txt"
            IconShapeName = "IconeText"
            IconFileName = "Text.ico"
            
        Case Else
            IconShapeName = "IconeAutre"
            IconFileName = "Autre.ico"
    End Select
    
    'Gestion du fichier icône
    If Len(Dir(Environ("TEMP") & "\" & IconFileName)) = 0 Then
        Set oShell = CreateObject("Shell.Application")
        
        With ThisWorkbook.Worksheets(1).OLEObjects(IconShapeName)
            'Save the Embbeded Object
            .Copy
            oShell.Namespace(Environ("TEMP")).Self.InvokeVerb "Paste"
        End With
    End If
    
    'Intégration du fichier
    If IconShapeName = "IconeWord" Or IconShapeName = "IconeExcel" Then
        'Avec Word et Excel impossible de faire ce qu'on veut
        Set OLEObject = ActiveSheet.OLEObjects.Add(FileName:=TabFileFullNames(1), Link:=False, DisplayAsIcon:=True, _
                                                   IconFileName:=Environ("TEMP") & "\" & IconFileName, _
                                                   IconLabel:=DocName, IconIndex:=0, _
                                                   Left:=ActiveCell.Left, _
                                                   Top:=ActiveCell.Top)
    Else
        'Avec les applications non-office, pour avoir le nom de fichier sur 1 ligne
        Set OLEObject = ActiveSheet.OLEObjects.Add(FileName:=TabFileFullNames(1), Link:=False, _
                                                   Left:=ActiveCell.Left, _
                                                   Top:=ActiveCell.Top)
    End If
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Problème Code VBA
Réponses
9
Affichages
520
Retour