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 :

Extraire un email entre deux crochets avec VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Architecte réseau
    Inscrit en
    Juin 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Juin 2022
    Messages : 9
    Par défaut Extraire un email entre deux crochets avec VBA
    Bonjour,
    j'écris une fonction pour copier les colonnes d'un onglet vers un autre et j'aimerai copier l'email qui est entre deux crochets, par exemple : Toto Isabelle<t.isabelle@gmail.com> j'aimerai extraire que la valeur t.isabelle@gmail.com et la copier dans un autre onglet

    voici le code :

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Function columnLookup(Name As String, Line As Range) As Integer
    Dim i As Integer
    Dim Cell As Range
     
    i = 0
    For Each Cell In Line
        If Cell.Value = Name Then
            i = Cell.Column
        End If
    Next Cell
     
    columnLookup = i
    End Function
     
    Sub copie()
     
     
        Dim k As Variant
        Dim localworksheet, globalWorksheet As String
        Dim currentLine, currentLine1 As Integer
        Dim classeur As Workbook
     
     
        Dim headerBase As Range
        Dim headerCopie As Range
     
     
        Dim indexNomBase, indexPrenomBase, indexEmailBase As Integer
        Dim indexNomCopie, indexPrenomCopie, indexEmailCopie As Integer
     
     
        globalWorksheet = "base"
        localworksheet = "copie"
     
        Worksheets(globalWorksheet).Activate
     
     
        'Choix du header
     
        Set headerBase = Worksheets(globalWorksheet).Range("A1", Worksheets(globalWorksheet).Range("A1").End(xlToRight))
        Set headerCopie = Worksheets(localworksheet).Range("A1", Worksheets(localworksheet).Range("A1").End(xlToRight))
     
     
        indexNomBase = columnLookup("Nom", headerBase)
        indexPrenomBase = columnLookup("Prénom", headerBase)
        indexEmailBase = columnLookup("Email", headerBase)
     
     
        indexNomCopie = columnLookup("Nom", headerCopie)
        indexPrenomCopie = columnLookup("Prénom", headerCopie)
        indexEmailCopie = columnLookup("Email", headerCopie)
     
     
        'Copier les informations
     
        currentLine1 = 2
     
        For k = 2 To 4
     
     
            Worksheets(localworksheet).Cells(currentLine1, indexNomCopie).Value = Worksheets(globalWorksheet).Cells(k, indexNomBase).Value
            Worksheets(localworksheet).Cells(currentLine1, indexPrenomCopie).Value = Worksheets(globalWorksheet).Cells(k, indexPrenomBase).Value
            Worksheets(localworksheet).Cells(currentLine1, indexEmailCopie).Value = Worksheets(globalWorksheet).Cells(k, indexEmailBase).Value
     
            currentLine1 = currentLine1 + 1
     
        Next k
     
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 445
    Par défaut
    Bonjour,

    Cette fonction extrait l'adresse entre < et >:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function AdrMail(s As String) As String
        Dim k As Long
        k = InStr(1, s, "<") + 1
        If k = 1 Then
            AdrMail = ""
        Else
            AdrMail = Mid(s, k, Len(s) - k)
        End If
    End Function
    à utiliser en ligne 63
    Cordialement.

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour EricDgn,

    Si je peux me permettre en ligne 7 ce serait plus correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            AdrMail = Mid(s, k, InStr(1, s, ">") - k)

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 255
    Par défaut
    Hello,
    en utilisant les expressions régulières :
    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
    Function RecupAdrMail(maChaine) As StringDim objReg As Object
    Dim objMatches As Object
    RecupAdrMail = ""
    Set objReg = CreateObject("vbscript.regexp")
    objReg.Pattern = "<(.+@.+)>"
    Set objMatches = objReg.Execute(maChaine)
    If objMatches.Count = 1 Then
        RecupAdrMail = objMatches(0).Submatches.Item(0) 
    End If
    Set objReg = Nothing
    Set objMatches = Nothing
    End Function
     
    Sub Test()
     Debug.Print RecupAdrMail("Toto Isabelle<t.isabelle@gmail.com>")
    End Sub
    [EDIT] j'ai corrigé le code (utilisation de groupe) car les <> étaient compris dans la chaîne extraite.

    Ami calmant, J.P

  5. #5
    Membre averti
    Femme Profil pro
    Architecte réseau
    Inscrit en
    Juin 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Juin 2022
    Messages : 9
    Par défaut
    ça marche à merveille merci énormément <3

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/11/2008, 22h35
  2. Regexp: extraire du texte entre deux balises
    Par moook dans le forum Langage
    Réponses: 11
    Dernier message: 19/06/2007, 19h08
  3. calcul délais entre deux dates avec plages horaires
    Par leila eco dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/01/2007, 17h51
  4. Réponses: 1
    Dernier message: 05/10/2006, 05h20
  5. Réponses: 24
    Dernier message: 20/08/2006, 15h08

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