Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Lister les processus du système
Avec cette nouvelle
astuce VBA Access , nous allons voir comment récolter les
processus actifs du
système d'exploitation , dans une
zone de liste d'un
formulaire . Dans un deuxième temps, avec un second chapitre, nous apprendrons à couper l'un d'entre eux par le
code VBA Access . Ce procédé peut paraître curieux et pourtant, il peut s'avérer très utile. En effet et dans des formations précédentes, nous avons appris à accéder aux
ressources d'
Excel , de
PowerPoint ou encore de
Word . Même si nous avions pris soin de détruire les objets de programmation à l'issue du développement, cette technique peut nous assurer d'avoir complètement terminé les instances pour les vider de la mémoire de l'ordinateur.
Base de données Access à télécharger
Pour démontrer cette nouvelle astuce, nous suggérons d'appuyer les travaux sur un
formulaire Access disposant de certains contrôles pour questionner les
processus de l'ordinateur .
Télécharger le fichier compressé lister-processus-systeme.rar en cliquant sur ce lien ,
Puis, le décompresser dans le dossier de votre choix,
Double cliquer sur le fichier réceptionné pour l'ouvrir dans Access ,
Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
Dans le volet de navigation sur la gauche, double cliquer sur le formulaire F_Export ,
Ainsi, nous l'exécutons. Ce formulaire est doté de deux boutons, d'une zone de liste et d'une zone de texte. Un clic sur le premier bouton, nommé
Lister , doit permettre d'afficher tous les
processus actifs dans la
zone de liste , au centre du formulaire. Nous nous soucierons du second bouton et de la zone de texte, dans le second volet.
La procédure événementielle
Pour débuter, nous devons commencer par associer un
code VBA au clic sur le
bouton Lister . Une procédure existe déjà et nous allons le constater.
A gauche du ruban Accueil , cliquer sur la flèche du bouton Affichage ,
Dans les propositions, choisir le mode Création ,
Sur le formulaire en conception, cliquer sur le bouton Lister pour le sélectionner,
Dès lors, activer l'onglet Evénement de sa feuille de propriétés ,
Puis, cliquer sur le petit bouton associé à son événement Au Clic ,
Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
Nous basculons ainsi dans l'
éditeur VBA Access entre les bornes de la
procédure lister_Click . A ce titre, vous notez la présence d'une autre procédure, juste au-dessus. Elle se nomme
recupProc .
Sub recupProc(nomProcessus As String)
'winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
End Sub
Private Sub lister_Click()
End Sub
Elle propose une ligne d'instruction en commentaire. Il s'agit de la valeur que nous devrons utiliser pour instancier la
classe WMI . Comme elle est complexe, nous la fournissons. A l'avenir, il s'agira de la répliquer à l'identique. C'est elle qui permet entre autres, d'accéder aux
processus Windows . Enfin et nous le verrons, si le paramètre n'est pas fourni à la
procédure recupProc , nous bâtirons dans un premier temps un
code VBA Access capable simplement de récupérer tous les
processus actifs , pour les énumérer dans la zone de liste.
Les variables
Nous allons commencer par développer le code de la procédure destinée à être appelée, celui de la
procédure recupProc . Des variables sont nécessaires, notamment pour instancier une
classe Windows toute particulière.
Dans la procédure recupProc et au-dessus du commentaire, ajouter les déclarations suivantes :
Sub recupProc(nomProcessus As String)
Dim objetWMI As Object: Dim requeteWMI As String
Dim lesProcessus As Object: Dim chaqueProcessus As Object
'winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
End Sub
Nous déclarons tout d'abord un objet que nous nommons
objetWMI . Il est destiné à instancier cette
classe WMI :
Windows Management Instrumentation , pour interroger le
système d'exploitation et pour accéder aux
processus de Windows . La variable qui suit :
requeteWMI , doit servir à exécuter une
syntaxe SQL sur l'
objet WMI , pour récolter la
collection des processus actifs . Ensuite, nous utiliserons les deux derniers objets, précisément pour
parcourir la collection de ces processus et les restituer tour à tour dans la zone de liste du formulaire.
Les affectations
Maintenant que les variables existent, il est temps d'
instancier cette classe WMI et grâce à elle, de récolter la
collection des processus actifs .
A la suite du code VBA, ajouter les instructions suivantes :
...
liste.RowSource = ""
Set objetWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
requeteWMI = "SELECT Name FROM Win32_Process"
...
Nous vidons tout d'abord le contenu de la zone de liste du formulaire. Pour cela, nous réinitialisons sa
propriété RowSource sur une chaîne vide. Ensuite, grâce à la
fonction GetObject avec en paramètre, la valeur qui était en commentaire, nous instancions la
classe WMI . Dès lors, nous initialisons la
requête destinée à récupérer tous les
noms (SELECT Name) Ã partir des
processus actifs du système (FROM Win32_Process).
Parcourir les processus
Maintenant que la classe est instanciée, nous allons pouvoir exploiter une méthode héritée afin d'
exécuter la requête sur le
système d'exploitation . Cette action va retourner la
collection des processus actifs que nous devons stocker dans l'
objet lesProcessus . C'est alors que nous pourrons les parcourir tous grâce à une
boucle For Each .
Toujours à la suite du code de la procédure, créer la boucle For Each suivante :
...
Set lesProcessus = objetWMI.ExecQuery(requeteWMI)
For Each chaqueProcessus In lesProcessus
liste.AddItem chaqueProcessus.Name
Next chaqueProcessus
...
Nous initialisons (Set) notre
objet lesProcessus sur la
collection des processus retournée par l'exécution de la
requête , grâce à la
méthode héritée ExecQuery de notre
objet objetWMI . C'est alors que nous engageons notre
objet chaqueProcessus dans une
boucle For Each , pour le faire
parcourir toute la collection (In lesProcessus). A chaque passage, nous ajoutons (AddItem) le
nom du processus en cours d'analyse (Name) dans la zone de liste du formulaire.
Bien sûr, pour finir de coder proprement, après la boucle, il convient de détruire l'objet WMI, afin de libérer la mémoire :
Set objetWMI = Nothing .
Appeler la procédure au clic
Telle que nous l'avons prévue, notamment pour les besoins du volet suivant, cette procédure doit être appelée avec un paramètre, qui peut être vide si nous souhaitons simplement lister tous les processus. C'est donc ce que nous devons nous employer à faire désormais.
Dans les bornes de la procédure lister_Click, ajouter l'appel suivant :
recupProc ""
Désormais, si vous exécutez le formulaire et que vous cliquez sur le bouton Lister, vous constatez que tous les processus actifs sont effectivement listés dans la zone de liste du formulaire. D'ailleurs vous pouvez noter la présence de celui d'Access, puisque nous sommes en train de travailler dessus.