Page 1 sur 1

Création de macros pour PhotoFiltre avec Excel

Publié : 12 mai 2014 15:18
par Seric31
Bonjour,
Excel est un outil puissant dont on ne soupçonne pas toujours l'étendue des possibilités surtout en matière de programmation.

Cela fait quelques temps que j'utilise une instruction utile :"Sendkeys"
Cela permet d'envoyer une ou plusieurs touches à la fenêtre active comme s'il s'agissait d'une saisie directe au clavier. La fenêtre active n'étant pas nécessairement Excel mais toute autre application Windows.
Cela permet donc de piloter dans notre cas PF depuis une macro Excel pour automatiser un certain nombre d'opérations (Voire d'effectuer des calculs intermédiaires).
En voici 2 exemples :

Sub PhotoFiltre_Texture() : Applique le filtre "Craquelure" à l'image et l'atténue à 30%. Puis Redimensionne l'image à 300x300 - 200dpi

Sub PhotoFiltre_Redressage_Horaire() : La diagonale de la sélection définit l'angle par rapport à l'horizontal.
La macro récupère la Largeur et la hauteur de la sélection, calcule l'angle résultant et applique une rotation paramétrée avec la valeur obtenue.

Code : Tout sélectionner

Sub PhotoFiltre_Texture()

AppActivate ("PhotoFiltre") 'Pour activer PF
SendKeys "%(LXF)", True
SendKeys "{ENTER}", True
SendKeys "%(EA)", True
SendKeys "%(LXF)", True
SendKeys "{HOME}", True
SendKeys "{PGDN 6}", True
SendKeys "{ENTER}", True
Application.Wait (Now + TimeValue("0:00:01"))
SendKeys "^h"
SendKeys "{TAB 2}", True
SendKeys "300", True
SendKeys "{TAB 3}", True
SendKeys "200", True
'SendKeys "{ENTER 2}", True
SendKeys "{NUMLOCK}", True

End Sub
'---------------------------------------------
Sub PhotoFiltre_Redressage_Horaire()

'-----Vidage Presse-Papier
Dim Cible As DataObject
Set Cible = New DataObject
Cible.SetText ""
Cible.PutInClipboard
Set Cible = Nothing
'---------------------------

AppActivate ("PhotoFiltre")
SendKeys "^g", True
SendKeys "{TAB 5}", True
SendKeys "^c", True
Application.Wait (Now + TimeValue("0:00:01"))
With New DataObject
    .GetFromClipboard
    L = .GetText(1)
End With

SendKeys "{TAB}", True
SendKeys "^c", True
Application.Wait (Now + TimeValue("0:00:01"))
With New DataObject
    .GetFromClipboard
    H = .GetText(1)
End With

Ang = Atn(Val(H) / Val(L))
Ang = 45 * Ang / Atn(1)
SendKeys "{ESC}", True
SendKeys "%(INA)", True
SendKeys "{TAB 2}", True
SendKeys Ang
SendKeys "{ENTER 2}", True
SendKeys "{NUMLOCK}", True

End Sub
Quelques Explications :
- SendKeys "%(INA)", True : Le texte que l'on envoie est entre guillements.
- SendKeys Ang : On envoie le contenu de la variable Ang
- Le sigle "%(" simule la touche "ALT" enfoncée : Cela permet d'avoir accès à l'arborescence des menus.
- Le sigle "^" simule la touche "CTRL" enfoncée : Pour les raccourcis (Attention : il faut utiliser les minuscules sinon c'est considéré comme "CTRL+SHIFT"
- SendKeys "{TAB 2}", True : On envoie 2 fois la touche tabulation
- SendKeys "{ENTER 2}", True : Pour fermer une boite de dialogue(2x la touche ENTER)
- SendKeys "{NUMLOCK}", True : Bizarrerie : Quand on utilise cette instruction, le clavier numérique se désactive. Avec cela on le réactive...

- Application.Wait (Now + TimeValue("0:00:01")) : Permet d'attendre une seconde avant de passer à la suite (Utile quand on fait un copier/coller)
- With New DataObject / .GetFromClipboard / H = .GetText(1)/ End With : Permet d'affecter la valeur du presse-papier dans la variable H (en Texte!)

A partir de le, je pense que vous avez compris le principe pour réaliser vos propres macros...

Re: Création de macros pour PhotoFiltre avec Excel

Publié : 13 mai 2014 12:11
par Tom
Bonjour et merci,

c'est plutôt intéressant et ça marche bien pour la première macro.
Par contre sur la seconde j'ai un message d'erreur d'Excel sur la première ligne me disant que l'objet
n'est pas défini par l'utilisateur... :shock:

J'ai une version (légale) ancienne d'Excel, c'est peut la raison ou j'ai oublié quelque chose ?
J'ai pourtant tracé une sélection :?

Re: Création de macros pour PhotoFiltre avec Excel

Publié : 15 mai 2014 0:43
par Seric31
Tom a écrit :Bonjour et merci,

c'est plutôt intéressant et ça marche bien pour la première macro.
Par contre sur la seconde j'ai un message d'erreur d'Excel sur la première ligne me disant que l'objet
n'est pas défini par l'utilisateur... :shock:

J'ai une version (légale) ancienne d'Excel, c'est peut la raison ou j'ai oublié quelque chose ?
J'ai pourtant tracé une sélection :?
Bonjour,
Je pense que'il y a une bibliothèque de référence qui n'est plus activée. (Elle l'est par défaut à l'installation il me semble du moins pour la version 2007)
Ces bibliothèques sont plutôt des annuaires des objets (fonctions...) d'autres applications qui peuvent être utilisés dans ton code.
Pour la (ré)activer :
Alt+F11 : Ouverture de la fenêtre Visual Basic (depuis Excel)
Menu Outils > Références : Tu peux voir qu'il doit y avoir une quarantaine de références disponibles mais quelques unes sont cochées...
Il faut vérifier que celles de bases le sont:
- Visual Basic for Applications
- Microsoft Excel 12.0 Object Library
- OLE automation
- Microsoft Office 12.0 Object Library
- Microsoft Forms 2.0 Object Library
(Les numéros de versions dépend de la version d'Office)
Avec çà je pense que cela devait aller