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