IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tester une adresse MAC pour pouvoir récupérer sa valeur [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien en Electronique
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien en Electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Par défaut Tester une adresse MAC pour pouvoir récupérer sa valeur
    Bonjour,

    je débute en VBA et je suis en train de faire une BDD dans laquelle j'ai besoin de tester que l'utilisateur (via un formulaire que je suis en train de créer) rentre bien une adresse MAC. c'est à dire 12 caractères au format hexadécimal.

    je n'arrive pas a trouver comment faire, j'ai tester si les valeurs etait numerique puis si elles etaient bien comprises entre "a" et "f" mais je n'arrive pas a tester sur les 12 caracteres...

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ta solution se trouve ici : http://www.commentcamarche.com/faq/4...nnelleshttp://

    Cdlt,

    Sophie

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le bon lien ci-dessous. Désolée

    http://www.commentcamarche.com/faq/41005-vba-initiation-aux-expressions-rationnelles

    Sophie

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    12 caracteres ? tu est sur?
    je dirais plutot 17 non? avec les separateurs ?????

    cela dit je comprend pas bien ton test 1 si numeric .ce sont des nombres au format hex donc c'est des nombres

    clochette te dirige vers un regex oui ok mais il y a beaucoup plus simple

    un split sur le separateur le ubound doit te donner 6
    et si su veux tester plus grand qua a ou f
    dans une boucle des elements du split
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if "&H"& split adressemac(i)> "&ha" then blablabla
    et pareil pour le "f"
    pourrait on avoir 2 ou 3 model d'adresse
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien en Electronique
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien en Electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Par défaut
    Bonjour,

    @patricktoulon
    oui effectivement je viens de voir avec mon chef et ce sera bien avec les séparateur donc 17 caractères
    un exemple d'adresse MAC = D8:80:39:D9:DF:C5

    voilà le bout de test que j'avais essayer de taper mais qui ne fonctionne pas dans mon cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Private Sub Txt_Adresse_MAC_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    'teste si la valeur est bien une adresse Mac
    If isMACadress("Txt_Adresse_MAC") = True Then
        Exit Sub
    Else
        MsgBox ("Entrez une adresse MAC en 12 caractères Hexadécimaux")
        Cancel = True
    End If
     
    End Sub
     
    Function isMACadress(Chaine As String)
     
    'cette fonction renvoie
    '- "1" si tous les caracteres de la chaine sont hexadecimaux
    '- "0" si la chaine est vide ou si elle contient un charactere non hexadecimal
     
    'test chaine vide
    If Chaine = "" Then
    isMACadress = 0
    End If
     
    'test isCharHex sur chaque caractere de la chaine
     
    For i = 1 To 12
     
        If isCharHex(Mid(Chaine, i, 1)) = 0 Then
            isMACadress = 0
            Exit For
        Else: isMACadress = 1
        End If
     
    Next
     
    End Function
     
     
    Function isCharHex(Char As String)
    'cette fonction renvoie
    '- "1" si Char est un nombre hexadecimal
    '- "0" sinon
     
    isCharHex = 0
     
    'test si char est un chiffre (attention Inumeric renvoie "True" si char est vide!)
    If (IsNumeric(Char) = True) And (Char <> "") Then
        isCharHex = 1
    End If
     
     
    'test si Char est une lettre comprise entre "a" et "f"
    Select Case Char
        Case Is = "a", "b", "c", "d", "e", "f"
        isCharHex = 1
    End Select
     
    End Function
    Merci pour vos conseils

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut une petite fonction de rien du tout
    re
    essaie plutot ceci:

    sub de teste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
        MsgBox isValidAdressMac("D8:80:39:E9:DF:C5")
        MsgBox isValidAdressMac("D8:80:39:H9:DF:C5")
     
    End Sub

    la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function isValidAdressMac(adressMac)
        Dim tabl, i As Long, crit1 As Boolean, crit2 As Boolean
        tabl = Split(adressMac, ":")
        isValidAdressMac = True
        For i = 0 To UBound(tabl)
            crit1 = Mid(tabl(i), 1, 1) Like "[A-F]*" Or Mid(tabl(i), 1, 1) Like "[0-9]"
            crit2 = Mid(tabl(i), 2, 1) Like "[A-F]*" Or Mid(tabl(i), 2, 1) Like "[0-9]"
            If crit1 = False Or crit2 = False Then isValidAdressMac = False: Exit Function
        Next
    End Function

    EDIT:
    petit bonus

    j'ai ajouté le nombre de segment obligatoire pour la conformité (6 segments)
    j'ai ajouté la conformité en terme de longueur de chaine pour chaque segments
    encore plus de tests
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        MsgBox isValidAdressMac("D8:80:39:E9:DF:C5")
        MsgBox isValidAdressMac("D8:80:39:H9:DF:C5")
        MsgBox isValidAdressMac("D8:80:39:E9:DF")
        MsgBox isValidAdressMac("D8:80:39:DE9:DF:C5")
    End Sub
    la fonction mise a jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function isValidAdressMac(adressMac)
        Dim tabl, i As Long, crit1 As Boolean, crit2 As Boolean, crit3 As Boolean
        tabl = Split(adressMac, ":")
        If UBound(tabl) <> 5 Then isValidAdressMac = False: Exit Function
        isValidAdressMac = True
        For i = 0 To UBound(tabl)
            crit1 = Mid(tabl(i), 1, 1) Like "[A-F]" Or Mid(tabl(i), 1, 1) Like "[0-9]"
            crit2 = Mid(tabl(i), 2, 1) Like "[A-F]" Or Mid(tabl(i), 2, 1) Like "[0-9]"
            crit3 = Len(tabl(i)) = 2
            If crit1 = False Or crit2 = False Or crit3 = False Then isValidAdressMac = False: Exit Function
        Next
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Oui, Marc, ma remarque n'était pas une critique. Juste un complément d'informations sur une fonction concise et qui fait le job

    Et qui en plus, comme le dit clochete, met en évidence la puissance des regexp.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    J'avais loupé ta modification et découvre dans Like même sans virgule entre chaque série de caractères cela fonctionne ! …

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Matériel] L'équivalent d'une adresse MAC pour les puce GPS
    Par Ignescence dans le forum Apple
    Réponses: 4
    Dernier message: 04/04/2011, 12h04
  2. Réponses: 2
    Dernier message: 24/10/2009, 17h25
  3. Récupérer une adresse MAC sur l'entrée standard
    Par the_ionic dans le forum Réseau
    Réponses: 14
    Dernier message: 20/07/2006, 10h56
  4. récupérer une adresse mac d'un pc distant
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 03/02/2006, 12h01
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo