Piloter application pour Enregistrer sous

Bonjour Steelson !

Je me suis enfin occupé de l'AntiVirus, ton "autre application" fonctionne et me liste bien tout ce que j'ai d'ouvert.

Du genre:

"Titre :

Handle : "

un bon premier pas !!!

Par contre j'ai ressayé la macro VBA pour Bloc-notes mais sans résultat il me dit encore :

"Argument ou appel de procédure incorrect"

  AppActivate "macro - Bloc-notes"

Cela dépend du nom du fichier texte.

Après avoir lancé la liste des applications, essaye sans rien fermer avec :

Sub fermernotepad()
    AppActivate "Sans titre - Bloc-notes"
    SendKeys "%{F4}"
End Sub

Sans titre - Bloc-notes est ce que l'on trouve dans le titre :

Sinon, si tu pouvais me copier le contenu du fichier qui donne la liste des applications ...

J'ai lancer ton fichier "liste_fenetres" qui me liste toutes mes applications dans "Sans titre - Bloc-notes" ensuite dans mon excel j'ai mis cette macro:

Sub fermernotepad()
    AppActivate "Sans titre - Bloc-notes"
    SendKeys "%{F4}"
End Sub

Mais il me met toujours

"Argument ou appel de procédure incorrect"

Ci joint la liste:

Liste des fenêtres ouvertes :

Titre : Démarrer

Handle : 0x000100D6

Titre : Sans titre - Bloc-notes

Handle : 0x00400770

Titre : Solid Edge ST10 - Assemblage - [Gabarit.asm]

Handle : 0x00010702

Titre : Macro

Handle : 0x00070478

Titre : PicPick

Handle : 0x00010284

Titre : PDF

Handle : 0x000A0C02

Titre : Classeur3 - Excel

Handle : 0x000609B0

Titre : Gabarit

Handle : 0x00050A3E

Titre : Piloter application pour Enregistrer sous - Page 3 - Forum - Google Chrome

Handle : 0x00040512

Titre : Pense-bête

Handle : 0x00010188

Titre : Program Manager

Handle : 0x00010160

Donc là, je ne comprends pas !

Tu as bien laissé ouvert le bloc notes avant de lancer excel ?

J'ai refait l'essai chez moi et cela fonctionne (il me demande même si je dois enregistrer le fichier texte !)

Fais juste un essai en mettant

Sub allersur()
    AppActivate "Solid Edge ST10 - Assemblage - [Gabarit.asm]"
End Sub

Là du coup ça fonctionne.

Si Solid Edge est en fond lorsque je clic sur le bouton ça m'affiche bien la fenetre solid edge.

Par contre Si je réduit mon Solid Edge que j'appui sur le bouton dans Excel rien ne se passe mais j'ai l'impression qu'il est tout de même dans solid edge..

Donc tu peux maintenant jouer avec sendkeys pour piloter ton appli puisque l'on connait non "nom".

Tu peux envoyer des commandes mais aussi simplement du texte (comme le nom du fichier à enregistrer), cela fonctionne très bien.

https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/sendkeys-statement

merci pour le tuyau sur les appli réduites !

D'accord, du coup sendkeys, pour faire un enregistrer sous en pdf..

Oui, reproduit dans sendkeys la séquence des touches de ton application.

Excuse moi de te déranger, peux-tu me donner un exemple s'il te plait ?

Par exemple normalement sur Solid Edge je clic sur "F7" puis je met en ".pdf" je choisi le chemin exemple "X:\Plans\A Jour" et j'enregistre.

1er exemple, juste une ouverture pdf, un copier/coller et une fermeture pdf

Private Sub CommandButton1_Click()
    ouvrir "C:\Users\Michel\Downloads\", "samsung-galaxy-beam_francais.pdf"
End Sub
Sub ouvrir(dossier As String, fichier As String)

    retshell = Shell("""C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe""" & dossier & fichier)
    Application.Wait (Now + TimeValue("0:00:05"))
    retshell = Shell("""C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe""" & dossier & fichier)

    Application.Wait (Now + TimeValue("0:00:05"))
    Application.SendKeys ("^a")
    Application.SendKeys ("^c")
    Application.Wait (Now + TimeValue("0:00:05"))
    Application.SendKeys ("%{F4}")
    ActiveSheet.Paste

End Sub

2ème exemple : pilotage d'outlook, avec Ctrl+V pour envoyer "à distance", c'set-à-dire à partir d'excel SendKeys "^v", True

Option Explicit
Sub envoi()

Dim messagerie As Object
Dim email As Object
Dim numero As Integer

On Error GoTo erreur

    Set messagerie = CreateObject("Outlook.Application")
    Set email = messagerie.CreateItem(0)
    With email
        .to = "prenom.nom@fai.fr"
        .Subject = "test envoi mail"
        .ReadReceiptRequested = True
    End With

    Range("A:A").Copy
    email.display
    Application.Wait (Now + TimeValue("0:00:01"))
    SendKeys "^v", True
    Application.CutCopyMode = False

    Set email = Nothing
    Set messagerie = Nothing

Exit Sub

erreur:

    MsgBox "Erreur : " & Err.Number & vbLf & Err.Description

End Sub

3ème exemple avec un agenda

On a ici à un moment donné 8 tabulations pour se positionner dans le texte de l'agenda

Application.SendKeys "{TAB 8}", True
Option Explicit

Sub Convoquer()

    Dim messagerie As Object
    Dim ligne As Long
    Dim invitation As Object
    Dim myRequiredAttendee, myOptionalAttendee, myResourceAttendee

    Const olAppointmentItem = 1
    Const olMeeting = 1

    Set messagerie = CreateObject("Outlook.Application")

    ligne = 2

    ' les cellules qui seront recopiées dans le texte de l'invitation = plus simple que d'écrire un texte en html
    Sheets(Cells(ligne, 9).Value).Cells.Copy

    Set invitation = messagerie.CreateItem(olAppointmentItem)
    With invitation
        .Subject = Cells(ligne, 1).Value
        .Location = Cells(ligne, 2).Value
        .Start = Cells(ligne, 3).Value + Cells(ligne, 4).Value
        .Duration = Cells(ligne, 5).Value
        .MeetingStatus = olMeeting
        If Cells(ligne, 6).Value > 0 Then
            .ReminderSet = True
            .ReminderMinutesBeforeStart = Cells(ligne, 6).Value
        Else
            .ReminderSet = False
        End If
        .AllDayEvent = Cells(ligne, 7).Value
        ' If Busy Status non spécifié, 2 par défaut (Busy)
        If Len(Trim$(Cells(ligne, 8).Value)) = 0 Then
            .BusyStatus = 2
        Else
            .BusyStatus = Cells(ligne, 8).Value
        End If

        ligne = 2
        Do Until Trim$(Cells(ligne, 10).Value) = ""
            '.Recipients.Add Cells(ligne, 10).Value
            Set myRequiredAttendee = .Recipients.Add(Cells(ligne, 10).Value)
            myRequiredAttendee.Type = 1 ' olRequired
            ligne = ligne + 1
        Loop

        ligne = 2
        Do Until Trim$(Cells(ligne, 11).Value) = ""
            '.OptionalAttendees.Add Cells(ligne, 11).Value
            Set myOptionalAttendee = .Recipients.Add(Cells(ligne, 11).Value)
            myOptionalAttendee.Type = 2 ' olOptional
            ligne = ligne + 1
        Loop

        .display ' pour visualiser avant d'envoyer manuellement
        ' .send ' pour envoyer directement

    End With

    ' on se place dans le texte
    Application.SendKeys "{TAB 8}", True

    ' recopie ici après tempo de 2 secondes
    Application.Wait (Now + TimeValue("0:00:02"))
    SendKeys "^v", True
    Application.CutCopyMode = False

    Set myRequiredAttendee = Nothing
    Set myOptionalAttendee = Nothing
    Set invitation = Nothing
    Set messagerie = Nothing

End Sub

'Set myRequiredAttendee = myItem.Recipients.Add("Nate Sun")
'myRequiredAttendee.Type = olRequired
'Set myOptionalAttendee = myItem.Recipients.Add("Kevin Kennedy")
'myOptionalAttendee.Type = olOptional
'Set myResourceAttendee = myItem.Recipients.Add("Conf Rm All Stars")
'myResourceAttendee.Type = olResource

Je vais essayer de faire demain un exemple avec un sauvegarder sous pdf.

La difficulté est que dans ne sorte de simulation, tu n'as pas droit à la souris, mais uniquement au clavier, y compris tabulation.

Un exemple avec un document word que je veux enregistrer sous pdf

Sub pdf()

AppActivate "Test SendKeys.docx - Word"
Application.SendKeys "{F12}{TAB}{DOWN 7}{ENTER 2}"

End Sub
8test-sendkeys.docx (11.30 Ko)

Bonjour Steelson,

Super merci beaucoup pour tous ces exemples. C'est très gentil merci.

Je n'ai plus qu'à essayer de faire de même pour Solid Edge Ahah

Je vais essayer je te tiens au courant !

EDIT : ca fonctionne mon seul problème c'est le Down je doit l'exécuter 2 fois j'ai donc écrit:

Sub allersur()
    AppActivate "Solid Edge ST10 - Mise en plan - [20000539.dft]"
    Application.SendKeys "{F7}{TAB}{DOWN 2}{ENTER 2}"
End Sub

Mais je ne sais pas pourquoi il ne descend pas et me déverrouille mon clavier numérique touche "Verr Num"

Essaie de le faire avec une autre feuille excel "esclave" par exemple, juste en descendant quelques cellules

Tu crées un feuille excel

Tu sélectionnes A1

Ensuite, à partir de la feuille excel "pilote", fais juste :

Sub test1()
    AppActivate "esclave.xlsx - Excel"
    Application.SendKeys "{DOWN 2}"
End Sub

tu dois te retrouver en A3

Si ce n'est pas le cas, c'est que ton clavier réagit à un double clic sur down en le désactivant !!

et dans ce cas, tu mets une tempo entre les 2 down

Sub test2()
    AppActivate "esclave.xlsx - Excel"
    Application.SendKeys "{DOWN}"
    Application.Wait Now + TimeValue("0:00:01")
    Application.SendKeys "{DOWN}"
End Sub
12pilote.xlsm (12.75 Ko)
12esclave.xlsx (7.47 Ko)

Ceci m'inquiète, ça fonctionne correctement sur un Excel, il descend bien de 2 cases mais me verrouille ou déverrouille "Verr Num"

Sur Solid Edge il ne descend pas, j'ai même essayé Down 4 mais non il garde le premier

Du coup je me demande si ce n'est pas "TAB" qu"il n'exécute pas peut être...

PS: Lorsque je le fait au clavier sur Solid Edge ça fonctionne très bien mais dès que je l'exécute par macro non... Peut etre que la macro ne comprend pas TAB.. ?

EDIT : Lorsqu'il exécute la macro je le vois bien déscendre jusqu'au ".pdf" mais j'ai l'impression qu'il ne le valide pas. Je m'explique avec un seul ENTER il clic sur enregistrer direct ! D'ou le problème

EDIT : OUIIIIII !!!!!!!! J'ai réussi !!!!!! non pas avec ENTER mais avec ~

EDIT : OUIIIIII !!!!!!!! J'ai réussi !!!!!! non pas avec ENTER mais avec ~

Oui il y a une équivalence dans https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/sendkeys-statement
Entrée    {ENTER} ou ~

mais qui n'est donc pas équivalent !!

Qui doit j'imagine dépendre des logiciels..

Pour le coup sur Solid Edge ce n'est pas équivalent effectivement ! ^^

En tout cas j'ai réussi à faire ce que je souhaitais je suis vraiment ravis je te remercie Beaucoup !!

Exemple sur un autre logiciel impossible de cliquer sur entrée que ce soit en passant par {ENTER} ou par {~} pourtant lorsque je clic avec mon clavier sur "Entrée" pas de soucis..

Rechercher des sujets similaires à "piloter application enregistrer"