Aller au contenu


Photo

Excel vba Applescript


  • Please log in to reply
6 replies to this topic

#1 patyom

patyom

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 356 Messages :
  • Sexe:Masculin
  • Localisation:Livernon (Lot)

Posté 04 août 2019 - 00:19

Bonsoir,

 

J'ai des problèmes pour passer des paramètres d'un SUB excel vba vers un Script Applescript en utilisant MacScript().

J'arrive lancer un script sans paramètre sans aucun problème mais dès que j'inclus dans la phrase "with parameters {x,y}" ça bugue. 

 

Quelqu'un pourrait-il m'aiguiller

 

Merci

:zz-big-grrmm:

(Excel Mac 2011)


Ce message a été modifié par patyom - 04 août 2019 - 00:20 .

MacBook Pro - 13" - 4Go - 250Go
Emac 1GHz - 640 MB - 40 Go

#2 Aliboron

Aliboron

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 241 Messages :
  • Sexe:Masculin
  • Localisation:Toulouse.cong

Posté 04 août 2019 - 08:18

Est-ce que tu peux donner une description plus complète du script que tu veux envoyer via la commande MacScript() ? Est-ce que tu peux exécuter ce script avec les paramètres dans l'éditeur Applescript ?


Ce message a été modifié par Aliboron - 04 août 2019 - 08:19 .

Bernard

MacMini 2009 & iMac 2008 + tout un tas d'accessoires -- FAQ Office Macintosh

#3 patyom

patyom

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 356 Messages :
  • Sexe:Masculin
  • Localisation:Livernon (Lot)

Posté 04 août 2019 - 20:15

Bonsoir,

J'ai fais un exemple tout bête : je sais que je peut le faire avec VBA mais c'était pour apprendre à passer des paramètres de VBA à Applescript avec un retour.

Voilà :

le Script (SuppressionElementListe.scpt)

on run {ma_liste, Position}
	
	**** pour info ma_liste ressemble à çà {"a", "b", "c", "d", "e"} ****
	log ma_liste
	
	set ma_liste to suppression(ma_liste, Position)
	log ma_liste
	return ma_liste
	
end run

on suppression(liste, nbr)
	if (nbr > length of liste) or (nbr < 1) then return liste
	
	if nbr > 1 then
		set resultat to ((beginning of liste) as list) & suppression(rest of liste, nbr - 1)
	else
		return rest of liste
	end if
end suppression

le code VBA

Sub essaiPassageAuto()

' Déclarations
Dim ma_liste as string
Dim ScriptToRun As String
Dim Res As String

' Initialisations
ma_liste = {"a", "b", "c", "d", "e"}

' Phrase de lancement Script
ScriptToRun = "run script (""Macintosh HD:users:PATRICK:Desktop:DOSSIERS Desktop:Script-AppleScript:SuppressionElementListe.scpt"" as alias) with parameters {ma_liste, 3}"

' Lancement avec retour dans Res
Res = MacScript(ScriptToRun)

End Sub

Pour le retour dans Res je ne suis pas sûr.

(il y a certaines lignes qui apparaissent en vert c'est un bug)

 

Merci


MacBook Pro - 13" - 4Go - 250Go
Emac 1GHz - 640 MB - 40 Go

#4 Aliboron

Aliboron

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 241 Messages :
  • Sexe:Masculin
  • Localisation:Toulouse.cong

Posté 05 août 2019 - 00:15

Plusieurs remarques : 

- Concernant le tableau ma_liste, tu ne peux pas utiliser les accolades {}

- Il faut renseigner les valeurs une par une

- Dans Applescript, les chemins d'accès sont au format posix

 

Donc en gros, ton code VBA doit plutôt ressembler à ça :

Sub essaiPassageAuto()

' Déclarations'
Dim ma_liste(0 To 4) As String
Dim ScriptToRun As String
Dim Res As String

' Initialisations'
ma_liste(0) = "a"
ma_liste(1) = "b"
ma_liste(2) = "c"
ma_liste(3) = "d"
ma_liste(4) = "e"

' Phrase de lancement Script'

ScriptToRun = "run script (""/Users/PATRICK/Desktop/DOSSIERS Desktop/Script-AppleScript/SuppressionElementListe.scpt"" as alias) with parameters {""" & ma_liste(3) & """}"

' Lancement avec retour dans Res'
Res = MacScript(ScriptToRun)

End Sub

En principe, ça devrait fonctionner.

 

Tu trouveras pas mal d'indications concernant les "mariages" VBA/Applescript sur les pages qu'y consacre Ron de Bruin.


Ce message a été modifié par Aliboron - 05 août 2019 - 09:30 .

Bernard

MacMini 2009 & iMac 2008 + tout un tas d'accessoires -- FAQ Office Macintosh

#5 patyom

patyom

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 356 Messages :
  • Sexe:Masculin
  • Localisation:Livernon (Lot)

Posté 05 août 2019 - 08:44

Bonjour,

Tu es sûr de "ma_liste(3)", je crois que là on ne passe que la valeur 3 de la liste.

il y a 2 paramètres : ma_liste et Position (de l'élément à supprimer)

 

Dans tous les cas je me doutais que c'était la déclaration des paramètres qui coinçait.

 

Je vais essayer de trouver.

 

Merci


MacBook Pro - 13" - 4Go - 250Go
Emac 1GHz - 640 MB - 40 Go

#6 Aliboron

Aliboron

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 241 Messages :
  • Sexe:Masculin
  • Localisation:Toulouse.cong

Posté 05 août 2019 - 09:13

Tu es sûr de "ma_liste(3)", je crois que là on ne passe que la valeur 3 de la liste.

 

Oui, cela ne passe que la valeur 3 de la liste. J'avais cru comprendre qu'avec {ma_liste, 3} tu passais toute la table juste pour en extraire la 3e valeur. Mais sinon, tu dois pouvoir envoyer .../...with parameters {""" & ma_liste &", 3" & """}".../... comme paramètre. Reste que je ne sais pas ce que ça va donner avec une table. Si j'ai une minute, je ferai un essai, pour voir...

 

MàJ : 

Bon, visiblement, ça n'accepte pas "as alias" d'une part et, surtout, l'envoi de toute la table comme paramètre ("Incompatibilité de type").

 


Dans tous les cas je me doutais que c'était la déclaration des paramètres qui coinçait.

Pas seulement. La déclaration de la table, la saisie des données, le chemin d'accès, ça compte aussi. ;)


Ce message a été modifié par Aliboron - 05 août 2019 - 09:37 .

Bernard

MacMini 2009 & iMac 2008 + tout un tas d'accessoires -- FAQ Office Macintosh

#7 Aliboron

Aliboron

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 241 Messages :
  • Sexe:Masculin
  • Localisation:Toulouse.cong

Posté 05 août 2019 - 12:43

MàJ : 

Bon, visiblement, ça n'accepte pas "as alias" d'une part et, surtout, l'envoi de toute la table comme paramètre ("Incompatibilité de type").

 

Petit complément : tu peux contourner le problème en envoyant les valeurs et pas la table en entier. Par exemple en intercalant cette boucle (et en transférant TouteListe au lieu de ma_liste, bien sûr) :

For i = 0 To 4
TouteListe = TouteListe & ma_liste(i) & ""","""
Next i
TouteListe = "" & Left(TouteListe, Len(TouteListe) - 3)

Bernard

MacMini 2009 & iMac 2008 + tout un tas d'accessoires -- FAQ Office Macintosh




0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)