lancer un programme externe selon valeur d'une cellule

Y compris Power BI, Power Query et toute autre question en lien avec Excel
n
nicopat
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 28 mars 2015
Version d'Excel : 2007 FR

Message par nicopat » 9 juin 2016, 16:33

Bonjour,

Je souhaite que mon fichier excel lance automatiquement plusieurs applications selon la valeur d'une cellule.

Je vais créer 3 applications externes via autohotkey "Create.exe", "Update.exe", "Delete.exe". Chacune de ces applications externes gèrera des actions dans des logiciels tiers en reproduisant une action manuelle.

Au niveau d'excel, je souhaite que soit lancé automatiquement soit Create.exe, soit Update.exe, soit Delete.exe selon les situations.
Je pense dédié une cellule (disons A1 du feuillet1) de mon fichier excel qui affichera soit "Create", soit "Update", soit "Delete" (en fonction d'autres informations disponibles dans le fichier) pour préciser quelle application lancer à chaque recalcul du fichier.

Avant de me lancer, je souhaiterais des conseils à 2 niveaux :

1. rédaction de la macro :

Sur internet, j'ai trouvé cet exemple :
Sub AppExterne()
    Shell "CMD /C " & """" & "cd chemin_complet_du_repertoire_du_prog && nom_du_prog_sans_.exe" & """"
End Sub
ou encore ceci :
Sub AppExterne()
Shell ("C:WINDOWSAppExterne.exe")
End Sub
Voilà mes questions :
a/ dans la rédaction de ma macro, je souhaite intégrer la valeur de la cellule A1 du feuillet1 comme variable pour préciser quelle application lancer : comment rédiger cela?
b/ quelle est la rédaction de macro permettant un lancement le + rapide possible de l'application externe?

2. gestion de la mise à jour de la cellule A1 du feuillet 1 et du lancement de la macro :

Mon fichier excel étant très gros, je l'utilise en recalcul manuel.
Sur commande, je vais donc lancer un recalcul de tout le fichier, qui déterminera la valeur à afficher dans la cellule A1 du feuillet 1, qui à son tour déterminera laquelle des 3 applications externes doit être lancée.
Or parfois, lorsque je lance le recalcul (qui peut prendre quelques secondes), plusieurs valeurs s'affichent successivement dans la cellule A1 du feuillet 1 avant d'afficher la valeur finale.
Mon souhait est que l'application externe lancée par la macro soit celle correspondant à la valeur finale affichée dans cette cellule.

J'ai essayé de remplacer le recalcul manuel par cette macro :
Sub dataupdate()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

      Calculate

Application.ScreenUpdating = True
Application.Calculation = xlCalculationManual
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = False
Application.CutCopyMode = False


End Sub
Mais cela ne résout pas mon problème.

Merci d'avance pour votre aide!

Nicole
Sympathisme, Communautarisme, Altruisme.
Je peux aider pour choisir une agence web. (experte agréée pour les appels d'offres sur http://www.webagency321.com/fr/)
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 950
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 10 juin 2016, 00:53

Bonjour nicopat,
a/ dans la rédaction de ma macro, je souhaite intégrer la valeur de la cellule A1 du feuillet1 comme variable pour préciser quelle application lancer : comment rédiger cela?
Sub maProcedure()
Select Case Sheets("nom de ta feuille").Cells(1,1).Value
Case 1
   Shell ("C:WINDOWSAppExterne.exe")
Case 2
   Shell ("C:WINDOWSAppExterne.exe")
Case 3
   Shell ("C:WINDOWSAppExterne.exe")
Case Else
End Select
End Sub
Mon souhait est que l'application externe lancée par la macro soit celle correspondant à la valeur finale affichée dans cette cellule.
As-tu envisagé de simplement ajouter un bouton de commande quelquepart? Tu lances ton recalcule, puis tu exécute le code donné précédemment.

D'ailleurs tu peux condenser les 2 opérations (recalcul + exécution du code
Sub dataupdate()
      Calculate
      maProcedure
End Sub

J'attends ton retour pour les différentes propositions ;)
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
n
nicopat
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 28 mars 2015
Version d'Excel : 2007 FR

Message par nicopat » 10 juin 2016, 10:16

Bonjour d3d9x,

Merci pour ton aide :-)

Dans la macro "maprocedure", les valeurs des variables doivent apparaître quelque part, non? comme ci-dessous, peut-être?
Sub maProcedure()
Select Case Sheets("nom de ta feuille").Cells(1,1).Value
Case Create
   Shell ("C:WINDOWSCreate.exe")
Case Update
   Shell ("C:WINDOWSUpdate.exe")
Case Delete
   Shell ("C:WINDOWSDelete.exe")
Case Else
End Select
End Sub
As-tu envisagé de simplement ajouter un bouton de commande quelquepart? Tu lances ton recalcule, puis tu exécute le code donné précédemment.
non, j'ai besoin que ce soit déclenché automatiquement, sans action humaine.
D'ailleurs tu peux condenser les 2 opérations (recalcul + exécution du code)
Sub dataupdate()
      Calculate
      maProcedure
End Sub

J'attends ton retour pour les différentes propositions ;)
En condensant ainsi, est-il certain que le fichier attendra que le recalcul soit 100% fini avant de lancer la macro "maprocedure"?
Cela solutionnerait le problème n°2 je pense.
Sympathisme, Communautarisme, Altruisme.
Je peux aider pour choisir une agence web. (experte agréée pour les appels d'offres sur http://www.webagency321.com/fr/)
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 950
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 10 juin 2016, 11:48

Sub maProcedure()
Select Case Sheets("Feuil1").Cells(1, 1).Value
Case "Create"
   Shell ("C:WINDOWSCreate.exe")
Case "Update"
   Shell ("C:WINDOWSUpdate.exe")
Case "Delete"
   Shell ("C:WINDOWSDelete.exe")
Case Else
End Select
End Sub
en supposant que dans ta cellule A1, tu mets Create,Update ou Delete comme valeur ;)
En condensant ainsi, est-il certain que le fichier attendra que le recalcul soit 100% fini avant de lancer la macro "maprocedure"?
Oui. L'appel à "maProcedure" se fera forcément à la fin de la procédure "Calculate". Tous les événements intermédiaires éventuels se feront entre le "Calculate" et "maProcedure"
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
n
nicopat
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 28 mars 2015
Version d'Excel : 2007 FR

Message par nicopat » 8 juillet 2016, 17:59

d3d9x a écrit :
Sub maProcedure()
Select Case Sheets("Feuil1").Cells(1, 1).Value
Case "Create"
   Shell ("C:WINDOWSCreate.exe")
Case "Update"
   Shell ("C:WINDOWSUpdate.exe")
Case "Delete"
   Shell ("C:WINDOWSDelete.exe")
Case Else
End Select
End Sub
en supposant que dans ta cellule A1, tu mets Create,Update ou Delete comme valeur ;)
Bonjour à tous, et bonjour d3d9x

Finalement, je me rends compte aujourd'hui que cette macro n'appelle pas les programmes concernés.
Lorsque je lance la macro, il ne se passe rien, alors que les valeurs dans la cellule correspondent bien à celles stipulées dans la macro.
Donc je suppose qu'il y a un problème de rédaction dans la macro, mais je ne le trouve pas.
Quelles sont les règles pour l'écriture du chemin d'accès aux .exe? Par exemple si un répertoire contient "é" : comment rédiger le chemin?
Cela dit, j'ai essayé en les plaçant directement sur C:, et ça n'a pas fonctionné non plus...

je me suis trompée, ça fonctionne !
Sympathisme, Communautarisme, Altruisme.
Je peux aider pour choisir une agence web. (experte agréée pour les appels d'offres sur http://www.webagency321.com/fr/)
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 950
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 8 juillet 2016, 19:13

Je n'avais pas fait attention à tes répertoires,
Shell ("C:\WINDOWSCreate.exe")
en supposant qu'ils sont directement dans C:
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
n
nicopat
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 28 mars 2015
Version d'Excel : 2007 FR

Message par nicopat » 9 juillet 2016, 00:36

d3d9x a écrit :Je n'avais pas fait attention à tes répertoires,
Shell ("C:\WINDOWSCreate.exe")
en supposant qu'ils sont directement dans C:
Merci d3d9x, je suis justement en train de galérer avec les chemins...

Sais-tu comment rédiger cette ligne de code si le fichier "create.exe" se trouve dans :
G:\noémie\Desktop\

Entre l'accent du répertoire et les "\" à mettre ou pas, je ne trouve pas la bonne rédaction...
Sympathisme, Communautarisme, Altruisme.
Je peux aider pour choisir une agence web. (experte agréée pour les appels d'offres sur http://www.webagency321.com/fr/)
n
nicopat
Membre fidèle
Membre fidèle
Messages : 254
Inscrit le : 28 mars 2015
Version d'Excel : 2007 FR

Message par nicopat » 9 juillet 2016, 18:09

Quelle est la rédaction de cette ligne si au lieu d'appeler une application .exe, je souhaite appeler un script AHK?
Sympathisme, Communautarisme, Altruisme.
Je peux aider pour choisir une agence web. (experte agréée pour les appels d'offres sur http://www.webagency321.com/fr/)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message