Lancer un programme externe selon valeur d'une cellule

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

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

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.

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"
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 !

Je n'avais pas fait attention à tes répertoires,

Shell ("C:\WINDOWSCreate.exe")

en supposant qu'ils sont directement dans C:

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

Quelle est la rédaction de cette ligne si au lieu d'appeler une application .exe, je souhaite appeler un script AHK?

Rechercher des sujets similaires à "lancer programme externe valeur"