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
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.Mon souhait est que l'application externe lancée par la macro soit celle correspondant à la valeur finale affichée dans cette cellule.
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
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 condensant ainsi, est-il certain que le fichier attendra que le recalcul soit 100% fini avant de lancer la macro "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?