OVH Cloud OVH Cloud

Comment récupérer une "Mac Adresse"

19 réponses
Avatar
C'est moi que Vla
Bonjour à tous,

Je cherche à récupérer la mac adresse de mon PC par le biais d'un code VBA.
Sur le net j'ai trouvé comment trouver un N° de série d'un disque dur mais
nulpart il est expliqué comment récupérer la mac adresse.

Est-ce par ce ce n'est pas possible ?

Merci pour vos suggestions !

@+
Paul

9 réponses

1 2
Avatar
michdenis
Pour faire une procédure qui devrait être à la portée de la majorité, y compris moi-même, il est possible de combiner une commande
"Dos" et la création d'un fichier temporaire txt pour en extraire l'info.

'-------------------------------------
Sub test()

MsgBox MacAddress1

End Sub
'-------------------------------------

Function MacAddress1()

Dim A As Long, Ligne As String
Dim Fichier As String, T As String

'Crée le fichier avec toutes les info...
Fichier = "c:MacDenis1.txt"
commande = Environ("comspec") & _
" /c " & "ipconfig /all > " & Fichier & """"
ret = Shell(commande, 1)

A = FreeFile
Open Fichier For Input Access Read 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 Fichier

End Function
'-------------------------------------


Salutations!





"michdenis" a écrit dans le message de news:
Il y a une façon plus facile d'obtenir cette information

Dans une fenêtre "DOS", tu écris ceci à l'invite :
c:>Ipconfig /All > MacAdresse.txt

Ceci génère un fichier texte avec toute l'information dont tu as besoin et beaucoup plus.

Il est alors possible d'extraire l'information désirée de ce fichier texte et de supprimer ce dernier.


Salutations!



"michdenis" a écrit dans le message de news: %
Bonjour C'est moi que Vla,

J'ai mis tout le code proposé dans un module standard

Et dans le formulaire, j'ai inséré ceci. J'obtiens bien que ce que
la prétention de cette procédure est supposé me donner !

Ceci a été testé sous Windows Xp pro et Excel 2003.

'-----------------------
Private Sub UserForm_Initialize()
MsgBox MACAddress
End Sub
'-----------------------


Salutations!



"C'est moi que Vla" a écrit dans le message de news:
Bonjour Michdenis,

Je te remerci pour ta réponse, je m'apperçois à la vu de ton code que c'est
bien loint d'être simple pour récupérer la Mac Adresse.

J'ai donc lancé la procédure "Form_load" en laissant le code tel quel, sans
le retoucher (j'en serais bien incapable...je ne l'ai pas encore compris)
mais elle me donne comme adresse :
00 00 00 00 00 00
au lieu de :
00 40 95 46 c8 66

Faut-il que je lance qqchose d'autre que la procédure Form_load ?

@+
Paul

Je ne pense
"michdenis" a écrit dans le message de news:

Bonjour toi, c'est moi,


'A mettre dans un module Standard

Public Const NCBASTAT As Long = &H33
Public Const NCBNAMSZ As Long = 16
Public Const NCBRESET As Long = &H32

Public Type NET_CONTROL_BLOCK
ncb_command As Byte
ncb_retcode As Byte
ncb_lsn As Byte
ncb_num As Byte
ncb_buffer As Long
ncb_length As Integer
ncb_callname As String * NCBNAMSZ
ncb_name As String * NCBNAMSZ
ncb_rto As Byte
ncb_sto As Byte
ncb_post As Long
ncb_lana_num As Byte
ncb_cmd_cplt As Byte
ncb_reserve(9) As Byte
ncb_event As Long
End Type

Public Type ADAPTER_STATUS
adapter_address(5) As Byte
rev_major As Byte
reserved0 As Byte
adapter_type As Byte
rev_minor As Byte
duration As Integer
frmr_recv As Integer
frmr_xmit As Integer
iframe_recv_err As Integer
xmit_aborts As Integer
xmit_success As Long
recv_success As Long
iframe_xmit_err As Integer
recv_buff_unavail As Integer
t1_timeouts As Integer
ti_timeouts As Integer
Reserved1 As Long
free_ncbs As Integer
max_cfg_ncbs As Integer
max_ncbs As Integer
xmit_buf_unavail As Integer
max_dgram_size As Integer
pending_sess As Integer
max_cfg_sess As Integer
max_sess As Integer
max_sess_pkt_size As Integer
name_count As Integer
End Type

Public Type NAME_BUFFER
name As String * NCBNAMSZ
name_num As Integer
name_flags As Integer
End Type

Public Type ASTAT
adapt As ADAPTER_STATUS
NameBuff(30) As NAME_BUFFER
End Type

Public Declare Function Netbios Lib "netapi32.dll" (pncb As
NET_CONTROL_BLOCK) As Byte
'------------------------------------------
Public Function MACAddress() As String
Dim macAdr As String
Dim ncb As NET_CONTROL_BLOCK
Dim adapter As ASTAT

ncb.ncb_command = NCBRESET
Call Netbios(ncb)

ncb.ncb_command = NCBASTAT
ncb.ncb_lana_num = 0
ncb.ncb_callname = "* "
ncb.ncb_buffer = VarPtr(adapter)
ncb.ncb_length = Len(adapter)

Call Netbios(ncb) 'renvoie entre autre la mac adresse dans une
structure
For i = 0 To 5
macAdr = macAdr & Format$(Hex(adapter.adapt.adapter_address(i)),
"00") & " "
Next i

macAdr = Trim(macAdr) 'Enlève les espces à droite et à gauche de la
chaîne
MACAddress = macAdr

End Function
'-------------------------
Private Sub Form_load()
MsgBox MACAddress
End Sub
'-------------------------


Salutations!





"C'est moi que Vla" a écrit dans le message de
news:
Bonjour à tous,

Je cherche à récupérer la mac adresse de mon PC par le biais d'un code
VBA.
Sur le net j'ai trouvé comment trouver un N° de série d'un disque dur mais
nulpart il est expliqué comment récupérer la mac adresse.

Est-ce par ce ce n'est pas possible ?

Merci pour vos suggestions !

@+
Paul





Avatar
michdenis
J'allais oublié ce détail ! ;-))

Pour ne pas voir la fenêtre DOS, modifier cette ligne de code :

ret = Shell(commande, 1)
Pour
ret = Shell(commande, vbHide)

Cette fonction est aussi disponible dans la feuille de calcul.

'---------------------
Sub test()

MsgBox MacAddress

End Sub
'---------------------

Function MacAddress()

Dim A As Long, Ligne As String
Dim Fichier As String, T As String

'Crée le fichier avec toutes les info...
Fichier = "c:MacDenis1.txt"
commande = Environ("comspec") & _
" /c " & "ipconfig /all > " & Fichier & """"
ret = Shell(commande, vbHide)

A = FreeFile
Open Fichier For Input Access Read 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) + 2, 20)
Exit Do
End If
Loop
Close #A
Kill Fichier

End Function
'---------------------


Salutations!
Avatar
Jacques93
Bonjour MichDenis,

Juste deux petites remarques, si je puis me permettre :

Cela ne règle pas le problème des config réseaux multicartes, bien
que l'on puisse adapter ton code à cela.

Faire une boucle de vérification de l'existence du fichier avant le
Open, car on peut arriver sur le Open avant que l'instruction Shell ne
soit terminée, et => Erreur 53 (fichier introuvable) ;-)


Pour faire une procédure qui devrait être à la portée de la majorité, y compris moi-même, il est possible de combiner une commande
"Dos" et la création d'un fichier temporaire txt pour en extraire l'info.

'-------------------------------------
Sub test()

MsgBox MacAddress1

End Sub
'-------------------------------------

Function MacAddress1()

Dim A As Long, Ligne As String
Dim Fichier As String, T As String

'Crée le fichier avec toutes les info...
Fichier = "c:MacDenis1.txt"
commande = Environ("comspec") & _
" /c " & "ipconfig /all > " & Fichier & """"
ret = Shell(commande, 1)

A = FreeFile
Open Fichier For Input Access Read 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 Fichier

End Function
'-------------------------------------


Salutations!


--
Cordialement,

Jacques.

Avatar
michdenis
Bonjour Jacques93,

Cette procédure n'est pas la panacée à tous les maux, elle a été faite rapidement et testée tout aussi rapidement. Je la crois plus
accessible et moins difficile à manier que d'essayer de comprendre tous les API de l'autre procédure. Ceci étant, tous pourront
l'adapter à leur environnement ou en faire la demande !

;-))


Salutations!



"Jacques93" a écrit dans le message de news: exz6E%
Bonjour MichDenis,

Juste deux petites remarques, si je puis me permettre :

Cela ne règle pas le problème des config réseaux multicartes, bien
que l'on puisse adapter ton code à cela.

Faire une boucle de vérification de l'existence du fichier avant le
Open, car on peut arriver sur le Open avant que l'instruction Shell ne
soit terminée, et => Erreur 53 (fichier introuvable) ;-)


Pour faire une procédure qui devrait être à la portée de la majorité, y compris moi-même, il est possible de combiner une commande
"Dos" et la création d'un fichier temporaire txt pour en extraire l'info.

'-------------------------------------
Sub test()

MsgBox MacAddress1

End Sub
'-------------------------------------

Function MacAddress1()

Dim A As Long, Ligne As String
Dim Fichier As String, T As String

'Crée le fichier avec toutes les info...
Fichier = "c:MacDenis1.txt"
commande = Environ("comspec") & _
" /c " & "ipconfig /all > " & Fichier & """"
ret = Shell(commande, 1)

A = FreeFile
Open Fichier For Input Access Read 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 Fichier

End Function
'-------------------------------------


Salutations!


--
Cordialement,

Jacques.

Avatar
michdenis
La fonction pourrait se lire ainsi en tenant compte des remarques de Jacques,

'-----------------------------
Function MacAddress1()

Dim A As Long, Ligne As String
Dim Fichier As String, T As String

'Crée le fichier avec toutes les info...
Fichier = "c:MacDenis1.txt"
commande = Environ("comspec") & _
" /c " & "ipconfig /all > " & Fichier & """"
ret = Shell(commande, vbHide)

Do While Dir(Fichier) = ""
Loop

A = FreeFile
Open Fichier For Input Access Read 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) + 2, 20)
Exit Do
End If
Loop
Close #A
Application.Wait (Now + TimeValue("0:00:01") / 20)
Kill Fichier

End Function
'-----------------------------


Salutations!



"michdenis" a écrit dans le message de news:
Bonjour Jacques93,

Cette procédure n'est pas la panacée à tous les maux, elle a été faite rapidement et testée tout aussi rapidement. Je la crois plus
accessible et moins difficile à manier que d'essayer de comprendre tous les API de l'autre procédure. Ceci étant, tous pourront
l'adapter à leur environnement ou en faire la demande !

;-))


Salutations!



"Jacques93" a écrit dans le message de news: exz6E%
Bonjour MichDenis,

Juste deux petites remarques, si je puis me permettre :

Cela ne règle pas le problème des config réseaux multicartes, bien
que l'on puisse adapter ton code à cela.

Faire une boucle de vérification de l'existence du fichier avant le
Open, car on peut arriver sur le Open avant que l'instruction Shell ne
soit terminée, et => Erreur 53 (fichier introuvable) ;-)


Pour faire une procédure qui devrait être à la portée de la majorité, y compris moi-même, il est possible de combiner une commande
"Dos" et la création d'un fichier temporaire txt pour en extraire l'info.

'-------------------------------------
Sub test()

MsgBox MacAddress1

End Sub
'-------------------------------------

Function MacAddress1()

Dim A As Long, Ligne As String
Dim Fichier As String, T As String

'Crée le fichier avec toutes les info...
Fichier = "c:MacDenis1.txt"
commande = Environ("comspec") & _
" /c " & "ipconfig /all > " & Fichier & """"
ret = Shell(commande, 1)

A = FreeFile
Open Fichier For Input Access Read 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 Fichier

End Function
'-------------------------------------


Salutations!


--
Cordialement,

Jacques.

Avatar
Jacques93
Bonjour michdenis,

un petit

DoEvents ne serait pas superflu entre le Do et le Loop

Do While Dir(Fichier) = ""
DoEvents

Loop


;-)
--
Cordialement,

Jacques.

Avatar
michdenis
Bonjour Jacques,

En théorie, tu as raison, mais dans le cas qui nous occupe présentement, cela représente quelques nanosecondes en temps! Durant ces
quelques nanosecondes, excel ne peut rien exécuter d'autres, les applications ne sont pas "multi-thread" ... est-ce que le
CPU(processeur) aurait le temps de solutionner d'autres tâches en attente ? That's the question !

;-)


Salutations!

"Jacques93" a écrit dans le message de news: uN%
Bonjour michdenis,

un petit

DoEvents ne serait pas superflu entre le Do et le Loop

Do While Dir(Fichier) = ""
DoEvents

Loop


;-)
--
Cordialement,

Jacques.

Avatar
C'est moi que Vla
Bonsoir à tous et merci à tous de me proposer autant de solutions.
Je me suis absenté qu'un journée, mais maintenant j'ai du boulot pour tout
tester ;-)

Encore Merci de votre aide

@+
Paul

"Jacques93" a écrit dans le message de news:

Bonjour C'est moi que Vla,

Une autre méthode utilisant l'API GetIfTable :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getiftable.asp

qui permet d'énumérer toutes les interfaces réseaux :

http://cjoint.com/?lgqpru7hOc

Ne fonctionne pas sous Win95

Bonjour Jacques,

Merci pour ton lien.

Vu ma connaissance en anglais, j'ai seulement réussi à comprendre que
cette page web parle effectivement de la façon de faire pour récupérer
une Mac Adresse. Mais c'est tout.
Je suis de la génération qui cose plus Patois que l'Anglais ;-) même si
je reconnais, bien volontié, que le Patois n'est pas guère employé sur le
Net.

@micalement
Paul

"Jacques93" a écrit dans le message de news:


Bonjour C'est moi que Vla,

Plusieurs exemple, à adapter, ici :

http://vbnet.mvps.org/index.html?code/network/macaddress.htm

Attention au cas où tu as plusieurs cartes réseaux,
Ethernet filaire, Wifi, etc... Chacune a son adresse MAC


Bonjour à tous,

Je cherche à récupérer la mac adresse de mon PC par le biais d'un code
VBA. Sur le net j'ai trouvé comment trouver un N° de série d'un disque
dur mais nulpart il est expliqué comment récupérer la mac adresse.

Est-ce par ce ce n'est pas possible ?

Merci pour vos suggestions !

@+
Paul



--
Cordialement,

Jacques.







--
Cordialement,

Jacques.





Avatar
C'est moi que Vla
Bonsoir à tous et merci à tous de me proposer autant de solutions.
Je me suis absenté qu'un journée, mais maintenant j'ai du boulot pour tout
tester ;-)

Encore Merci de votre aide à tous (Michdenis et Jacques93)

J'ai pas trop de temps cette semaine mais je teste et je reviens vous dire
ce qu'il en est.


@+
Paul

"michdenis" a écrit dans le message de news:

Bonjour Jacques,

En théorie, tu as raison, mais dans le cas qui nous occupe présentement,
cela représente quelques nanosecondes en temps! Durant ces
quelques nanosecondes, excel ne peut rien exécuter d'autres, les
applications ne sont pas "multi-thread" ... est-ce que le
CPU(processeur) aurait le temps de solutionner d'autres tâches en attente
? That's the question !

;-)


Salutations!

"Jacques93" a écrit dans le message de news:
uN%
Bonjour michdenis,

un petit

DoEvents ne serait pas superflu entre le Do et le Loop

Do While Dir(Fichier) = ""
DoEvents

Loop


;-)
--
Cordialement,

Jacques.





1 2