Récupération adresse MAC physique d'un PC

Bonjour et belle journée aux lecteurs de ce post qui ont une fine connaissance de l’utilisation des adresses MAC sous Excel.

Mon Contexte d’utilisation :

Je veux récupérer l’Adresse MAC du poste précis sur lequel est installé et lancé un fichier Excel spécifique A. Ce fichier ne peut être installé et lancé que de 2 manières : Soit sur le bureau, soit sur la racine d’une clé USB, mais en aucun cas sur un réseau, Ethernet, Wifi ou autre.

J’ai déjà lu avec attention ce post :

https://forum.excel-pratique.com/questions/numero-de-serie-base-sur-l-adresse-mac-196170

Le petit code de la Fonction ci-dessous, trouvé sur forum, il y a quelques années et placé dans un Module du fichier A, ne répond qu’en partie à ma demande de récupération de l’adresse MAC du poste sur lequel le fichierA Excel est installé, mais mes connaissances en VBA sont insuffisantes, pour en comprendre tous Les détails :

Dim A As String,Ligne As String,Fichier1 As String,T As String,commande As String, ret As String

Fichier1 = Environ("TEMP") & "\macadress" & Format(Now, "yyyymmddhhmmss") & ".txt"

commande = Environ("comspec") & _

" /c " & "ipconfig /all >" & Fichier1

ret = Shell(commande, 1)

Application.Wait (Now + TimeValue("0:00:02"))

A = FreeFile

Open Fichier1 For Input As #A

Do While Not EOF(A)

Line Input #A, Ligne

T = WorksheetFunction.Substitute(Ligne, "-", "")

If Len(Ligne) - Len(T) = 5 Then

MacAddress1 = Mid(Ligne, InStr(1, Ligne, ":", _

vbTextCompare) + 1, 20)

Exit Do

End If

Loop

Close #A

Kill Fichier1

If MacAddress1 <> "" And MacAddress1 <> 0 And MacAddress1 <> Range("A1").Value Then Range("A1").Value = MacAddress1

End Function

La cellule A2 contient bien, au final, l’adresse MAC du poste en Hexa et ses séparateurs.

Pour augmenter encore la sécurité, cette adresse MAC détectée est transformée en une valeur décimale mémorisée, au même titre que d’autres adresses MAC de postes différents.

Dans la feuille de calcul du fichierA, qui lance le module, 3 cas se présentent :

1* Aucune adresse MAC n’a encore été mémorisée. Je sais les mémoriser dans un autre fichier B ouvert automatiquement.

2* 1 ou plusieurs adresses MAC ont déjà été mémorisées séparément & l’adresse MAC détectée y est bien mémorisée. L’utilisation du fichierA est autorisée ; 3 autres fichiers Excel sont alors ouverts automatiquement B,C,D. L’utilisation peut commencer.

3* 1 ou plusieurs adresses MAC ont déjà été mémorisées séparément mais l’adresse MAC détectée n’y est pas mémorisée. L’utilisation du fichier A n’est pas autorisée; Une Msgbox l’indique puis ferme le fichier.

Ce qui pose problème :

1* Le test d’adresse MAC ne doit s’effectuer qu’à l’ouverture du fichier Aquel que soit le cas 1, 2 ,3 de détection de l’adresse MAC. Le test est inopérant lorsque les autres fichiers suivants sont ouverts

2* Les cas 2* & 3* ne sont pas différentiés en début de détection.

Pour résumer brièvement, le début de détection de l’adresse MAC en cours pose problème car au final, la cellule A2 contient au départ l’adresse MAC d’un poste précédemment utilisé, puis à la fin de détection, l’adresse MAC du présent poste en tentative d’utilisation et qui peut être différente de la 1ère au début, si elle n’est pas mémorisée (cas 3*). Si elle est différente de la 1ère au début, mais déjà mémorisée, l’ouverture des fichiers suivants B,C,D peut s’effectuer correctement. (cas2*).

Code partiel de la feuille (Calculate) du fichier A :

Cellule A2 = Adresse MAC détectée (Résultat) ou =""

Cellule A3 = Cde manuelle d’ouverture fichier B (pour mémoriser la détection) puis ="" (une fois mémorisée) (cas3*)

Cellule A4 = ="" si aucune mémorisation au tout début ou =d pour toutes les autres séquences

Cellule B2 = -1 (Cas 1*rien mémorisé) ou =1 (cas2* détecté & mémorisé) ou =0 (Cas3* détecté mais non mémorisé) ou ="" avant un tout 1er test de détection d’une adresse MAC.

Cellule D1=1 si seul fichier A est ouvert ou ="" si au moins 1 des fichiers B, C, D est ouvert

‘ Récupération du Nom d’utilisateur

If Range("C1").Value <> Environ("username") Then Range("C1").Value = Environ("username")

‘Conditions pour récupérer MAC (cas 2*) ou (cas3*) (utilisation autorisée ou utilisation non autorisée)

If Range("A2").Value <> "" And Range("B2").Value <> "" And Range("B2").Value <> -1 And Range("D1").Value = 1 Then

Module5.MacAddress1

End If

‘Conditions pour récupérer MAC (cas 2*) ou (cas3*) (utilisation autorisée ou utilisation non autorisée)

If Range("A2").Value = "" And Range("B2").Value = "" And Range("D1").Value = 1 Then

Module5.MacAddress1

End If

‘ Résultats après détection adresse MAC (Cas 3*) (utilisation non autorisée)

If Range("B2").Value = 0 And Range("A4").Value = "d" Then

MsgBox mess (non autorisé)

Module4.fer (Fermeture fichier(s)

End If

‘ Résultats après détection adresse MAC (Cas 1*) (ouverture fichier B pour mémorisation)

If Range("B2").Value = -1 And Range("A4").Value = "" And Range("A3").Value <> "" Then

Range("A4").Value = "d"

End If

‘ Résultats après détection adresse MAC (Cas 2*) (ouverture autorisée des fichiers B,C,D

If Range("B2").Value = 1 And Range("A4").Value = "" Then

Range("A4").Value = "d"

End If

edit modo : merci de mettre le code en utilisant le bouton </>de la barre de menu d'édition des messages (ici, je l'ai fait pour toi)

Un grand merci, d’avance, à toutes celles et ceux qui pourront m’éclairer à résoudre ce problème. Petit bonus, pour ces derniers, si cela peut vous intéresser et utile, sachez que le logiciel qui utilise ces fichiers A,B,C,D est un logiciel de cryptage de messages ou de données personnelles Hexcel (au résultat absolument indéchiffrable si l’on a pas son poste reconnu, une identification certifiée, les autorisations nécessaires) et que je peux mettre gracieusement à votre disposition (Me contacter pour cela).

En restant à votre disposition pour tout complément d’informations, cordialement à tous, merci d'avance de vos propositions de modification et belle continuité dans vos activités.

Bonjour,

J'avoue avoir du mal à comprendre quelle est la demande.

Tu nous mets un code que tu as trouvé sur le forum que tu as du mal à comprendre, mais qui fonctionne comme tu le souhaites. Cela ne semble donc pas lié à ta demande, mais je suis prêt à t'expliquer.

Tu nous mets des morceaux de code en nous indiquant qu'il y a un problème car cela ne donne pas le résultat souhaité.

Ce que j'ai compris, tu souhaites un mécanisme qui autorise l'ouverture d'un fichier A à condition de respecter certaines conditions.

Pour le reste je n'ai rien compris au problème que tu rencontres et les morceaux de code n'aident pas à ma compréhension.

Pourrais-tu expliquer les conditions pour l'utilisation de l'application ou inversement les conditions pour ne pas pouvoir l'utiliser ?

Bonjour h2so4 et merci, tout d’abord, de bien vouloir te pencher sur mon problème, que je vais essayer d’expliquer plus simplement.

Le logiciel est constitué de 4 fichiers Excel , avec macros : A pour celui qui est ouvert le 1er. Si des conditions sont réunies, alors ouverture automatique du fichier B, puis automatiquement du fichier C, puis automatiquement du fichier D. Dans ces conditions, le logiciel est prêt à être utilisé. Seule l’ouverture du fichier A est concerné par le problème. Ce fichier A s’ouvre puis exécute la macro de sa feuille de calcul (Private Sub Worksheet_Calculate()) qui comporte prioritairement le test de l’adresse MAC du poste utilisé, puis la vérification de l’adresse MAC détectée, existante ou pas dans le lieu de mémorisation des adresses Mac transformées en décimal) (dans le fichier B, encore fermé)

Il n’y a aucune condition préalable pour l’ouvrir, mais, A2 peut contenir l’adresse MAC d’un précédent utilisateur ou rien.

Cependant, 3 situations (cas) sont possibles alors :

Le logiciel n’a pas été préparé pour reconnaître des adresses MAC autorisées (cas 1* de mes 1ères explications) et A2="", puis B2=-1.

Dans ce cas, d’abord, appel du Module5.adress1 puis A2= Adresse MAC Hexa du nouvel utilisateur puis ouverture du fichier B pour mémoriser son adresse MAC en décimal puis enregistrement des fichiers. (Cela semble bien fonctionner).

Le logiciel a été préparé pour reconnaître des adresses MAC autorisées et le nouvel utilisateur à son adresse MAC déjà mémorisée : (cas 2* de mes 1ères explications) A2=adresse MAC d’un précédent utilisateur autorisé ou non.

Dans ce cas, d’abord, appel du Module5.adress1 pour récupérer la nouvelle adresse MAC de l’utilisateur, puis A2= Adresse MAC Hexa du nouvel utilisateur, puis B2=1, puis ouverture du fichier B, puis C, puis D.

Le logiciel a été préparé pour reconnaître des adresses MAC autorisées et l l’adresse MAC nouvel utilisateur n’est pas mémorisée : (cas 3* de mes 1ères explications) A2=adresse MAC d’un précédent utilisateur autorisé ou non.

Dans ce cas, d’abord, appel du Module5.adress1 pour récupérer la nouvelle adresse MAC de l’utilisateur, puis A2= Adresse MAC Hexa du nouvel utilisateur, puis B2=0, puis Message de non utilisation possible puis fermeture de A.

Le problème concerne les 2 dernières situations : Avant d’obtenir l’adresse MAC d’un nouvel utilisateur, il faut la tester 1 fois et une seule fois, pour récupérer l’état de B2 (=1 (cas 2* ou 0 cas 3*).

Ma question : En début de test d’adresse MAC, faut-il mémoriser temporairement l’adresse précédente, avant d’effectuer le test de celle du nouvel utilisateur, puis écrire l’adresse obtenue en son emplacement (A1), puis effacer l’adresse d’un précédent utilisateur ?. En complément, comment n’effectuer qu’une fois le la nouvelle adresse MAC à chaque ouverture du fichier A (Macro ?. (je ne sais pas faire). Je suis aussi intéressé par le code d’un autre module de test d’adresse MAC.

Merci de ta précieuse aide en souhaitant avoir été plus clair.

Cordialement.

Bonjour h2so4, avant même que tu puisses me répondre, j'ai pu solutionner le problème: Le test de l'adresse MAC n'était pas de placer sa macro dans un module mais nécessairement dans Workbook Open à l'ouverture du fichier A, mais en ayant pris soin d'effacer la cellule qui va contenir l'adresse du nouvel utilisateur, après le test, de supprimer l'appel de la fonction et remplacer End fonction par end Sub.

Belle continuation à toi.

Hello,

pour récupérer les adresses MAC des adaptateurs réseau d'un ordinateur en VBA il y a plus rapide que de passer par une commande console (qui peut faire ouvrir une fenêtre parasite) : Le WMI.

Voici un code VBA qui liste tous les adaptateurs Réseau d'un ordinateur en indiquant pour chaque adaptateur sa description , son adresse MAC (si il y en a une), si il a une I.P, et sa première adresse I.P (si il y en a une) :

Sub Get_MAC_Address_Network_oAdapterConf_Configuration()
    Dim iSh As Worksheet, i As Integer, wmi As Object
    Dim oAdapterConf, oAdapterConfs As Object
    ' Récupérer tous les détails des adaptateurs Réseau
    Set iSh = ThisWorkbook.Sheets(1)
    Set wmi = GetObject("winmgmts:root\CIMV2")
    Set oAdapterConfs = wmi.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")
    'Certains Attributs de chaque adaptateur  Réseau
    iSh.Cells(1, 1) = "Description": iSh.Cells(1, 2) = "MACAddress"
    iSh.Cells(1, 3) = "IPEnabled": iSh.Cells(1, 4) = "IP Address"
    i = 2
    For Each oAdapterConf In oAdapterConfs
      With oAdapterConf
        iSh.Cells(i, 1) = .Description: iSh.Cells(i, 2) = .MACAddress
        iSh.Cells(i, 3) = .IPEnabled
        If IsNull(.IPaddress) = False Then iSh.Cells(i, 4) = .IPaddress(0)
      End With
      i = i + 1
    Next
End Sub
xlnetworkadapters

L'adresse MAC principale est celle de l'adaptateur qui est IPENABLED et qui n'est pas celle de la virtualBox.

La récupération de toutes les informations prend chez moi moins de 10 ms.

Ami calmant, J.P

Bonjour JP, je garde précieusement ce test complet des Adresses MAC utilisables qui effectivement ne prend pas grand temps. Merci à toi de tes conseils.

Comme h2so4, si la curiosité et l'intérêt, pour tester ou expérimenter mon logiciel, n'hésite pas à me contacter. Je te souhaite une belle continuation, en ces tamps troublés... Cordialement.

Rechercher des sujets similaires à "recuperation adresse mac physique"