XL 2010 Savoir si la calculatrice est présente ou pas

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

À partir d'un CommandButton que j'ai nommé perspicacement "Bouton_Calculatrice" je peux appeler la calculatrice :
VB:
Private Sub Bouton_Calculatrice_Click()
'CommandButton "Bouton_Calculatrice" permettant d'afficher la calculatrice

Application.ScreenUpdating = False

Dim x
      
     x = Shell("C:\Windows\System32\calc.exe", 1)

Range("C2500").Select: Application.ScreenUpdating = True

End Sub
Mais si, pour des raisons éthyliques, on clique plusieurs fois de suite sur ce même bouton, à chaque fois apparaîtra une nouvelle calculatrice.
Je voudrais tout simplement court-circuiter cet appel si la calculatrice est déjà présente. J'ai tenté ceci sans succès (du reste, je m'y attendais) :
VB:
Private Sub Bouton_Calculatrice_Click()
'CommandButton permettant d'afficher la calculatrice

Application.ScreenUpdating = False

Dim x

    If Not x Is Nothing Then Exit Sub
    x = Shell("C:\Windows\System32\calc.exe", 1)
      
Range("C2500").Select: Application.ScreenUpdating = True

End Sub
Comment s'y prendre ?
 
Dernière édition:
Solution
Bonsoir,

J'ai trouvé ça. C'est simple et, ma foi, ça marche bien pour la calculatrice.
VB:
Function IsProcessRunning(process As String) As Boolean
'********************************************************************************************
'Vérifie si une application est ouverte
'https://stackoverflow.com/questions/29807691/determine-if-application-is-running-with-excel
'********************************************************************************************
'- process : le nom de l'application (ex : "calc.exe" --> calculatrice Windows)

    Dim objList As Object
   
    Set objList = GetObject("winmgmts:") _
        .ExecQuery("select * from win32_process where name='" & process & "'")
   
    IsProcessRunning = objList.Count > 0...

patricktoulon

XLDnaute Barbatruc
merci lionel :D :D
génial je sais pas mais j'essaie d'avoir une compréhension claire et net de mon environnement afin de coder une action simple et efficace et abordable par tous avec l'utilisation d'outils accessibles a tous
voila comment je code ou que je monte un projet
 

patricktoulon

XLDnaute Barbatruc
:D :D :D :D
ca c'est par ce que tu découvre et que tes papilles sont exacerbées par tout ces nouvelles connaissances (un peu comme moi il y a 10 ans)
mais a un moment donné il faut valider ses acquis de la connaissance et ça passe par son propre examen critique sans peur et sans ego

et réduire les aller retour dans le raisonnement ainsi que dans ses codes
les applicatifs s'en porte mieux ,sont plus pérennes, et c'est pas une torture de reprendre un code mêmes des mois/années après leur conceptions
ça n'interdit pas d'apprendre de nouvelles méthodes mais les utiliser uniquement si elles sont maitrisées

purrée ké' rabat-joie le toulonnais :D:D:D:D:p:p:p:p
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Un commentaire pour ceux qui auraient été intéressés par ce fil.
Prenons le cas du Bloc Note.
Sur la feuille il y a un CommandButton qui, lorsqu'on clique dessus fait apparaître le Bloc Note.
Sur la feuille il y a un tableau.
Je veux récupérer certaines valeurs de ce tableau pour les coller dans le Bloc Note.
Pour ce faire, quand je suis sur la cellule dont je veux (éventuellement) copier la valeur pour la coller dans le Bloc Note, je clique sur un CommandButton dédié. La valeur est mise en mémoire dans le presse papier.
J'ouvre le Bloc Note, puis bouton droit souris je colle. Ça marche.
Maintenant, je voudrais copier une autre valeur d'une autre cellule pour la coller toujours dans le Bloc Note. Je sélectionne cette cellule (automatiquement le Bloc Note va se loger dans la barre des tâches). Une fois la valeur automatiquement copiée via la macro commandée par le CommandButton, je veux faire réapparaître le Bloc Note pour y coller cette 2ème valeur. Pour récupérer le Bloc Note soit je vais le pêcher dans la barre des tâches, soit je le récupère via Alt + Tab. Le Bloc Note avec la 1ère valeur collée apparaît pour qu'on y colle la 2ème valeur. En revanche si on veut rappeler le Boc Note en cliquant sur le CommandButton du Bloc Note, le Bloc Note apparaît bien mais vierge de toute donnée. Autrement dit, la 1ère valeur collée a disparu (c'est un nouveau Bloc Note qui apparaît) et il faut tout recommencer en prenant soin, cette fois-ci, de ne pas rappeler le Bloc Note, entre 2 collés, avec son CommandButton.
Dommage. Ce n'est pas bien grave, mais ça peut être enquiquinant si on oublie ce détail.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour Magic_Doctor

si je comprend bien ton souhait
  1. selectionner une cellule
  2. clic droit puis copier
  3. appui sur bouton qui ouvre bloknote (nouveau la première fois)
  4. et colle ou colle a la suite (les fois suivantes)
  5. réduit bloque note a chaque changement de sélection

un simple variable ferait l’affaire pour faire ca non ? ;)
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour patricktoulon,

Pour le copié-collé, j'ai écrit ça :
VB:
Sub CopyCoord()
'Met en mémoire ("presse papier") les coordonnées en degrés décimaux ou sexagésimaux pour être ensuite collées dans le Bloc Note

Dim cadena$, MyData As New DataObject

    If Not Intersect(Selection, [Col_DD1]) Is Nothing Then
        cadena = Selection & "°" & "   |   " & Int(Selection.Offset(0, 2)) & "°" & "  " & Int(Selection.Offset(0, 3)) & "'" & "  " & Round(Selection.Offset(0, 4), 3) & "''" & "  " & Selection.Offset(0, 5)
        MyData.SetText cadena
        MyData.PutInClipboard
    End If
            
End Sub
et ça marche très bien.
Mais si je veux faire un copié-collé à partir d'une autre valeur et que je rappelle le Bloc Note (qui était dans la barre des tâches), pour y mettre cette seconde valeur sous la première que j'y avais déjà collée, à partir du CommandButton qui fait apparaître le Bloc Note, alors là, quand le Bloc Note réapparaît, son contenu est vide (exit la 1ère valeur qui y avait été collée), alors que je voudrais qu'elle soit toujours présente. Donc, ne pas rappeler le Bloc Note via le CommandButton, mais aller la chercher soit dans la barre des tâches, soit avec Alt + Tab.
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai trouvé ça. C'est simple et, ma foi, ça marche bien pour la calculatrice.
VB:
Function IsProcessRunning(process As String) As Boolean
'********************************************************************************************
'Vérifie si une application est ouverte
'https://stackoverflow.com/questions/29807691/determine-if-application-is-running-with-excel
'********************************************************************************************
'- process : le nom de l'application (ex : "calc.exe" --> calculatrice Windows)

    Dim objList As Object
   
    Set objList = GetObject("winmgmts:") _
        .ExecQuery("select * from win32_process where name='" & process & "'")
   
    IsProcessRunning = objList.Count > 0
End Function
VB:
Sub Calculatrice()
'Appelle la calculatrice Windows

    If IsProcessRunning("calc.exe") Then Exit Sub  'si la calculatrice Windows est déjà ouverte on sort (évite de se retrouver avec 36 calculatrices ouvertes)
    Shell "c:\windows\system32\calc.exe"
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 114
Membres
103 121
dernier inscrit
SophieS