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 :

Conserver une chaine de caractere de 8 chiffres [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut Conserver une chaine de caractere de 8 chiffres
    Bonjour,

    Je vous souhaite une belle année 2017

    Je souhaite conserver les chaines de 8 chiffres d'une cellule qui contient des chiffres et des lettres.

    Ex de donnée que j'ai au départ :
    "abbb 12345678 15 hjsdbwfw 9 23456789"

    J'aimerais appliquer un masque pour avoir uniquement "12345678 23456789".

    Avez vous une idée ?

    Je suis parti sur un truc du genre, mais je m'embourbe :

    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
    Sub Filtre_chiffre()
     
    Dim Cel As Range
    Dim x As Long
    Dim myString As String, myChar As String
    Dim myNumber As Integer
     
    fin = Selection.Range("A65500").End(xlUp).Row
    Range("AT6:AT" & fin & "").Select
     
        Application.ScreenUpdating = False
        For Each Cel In Selection
            a = 0
            For x = 1 To Len(Cel)
                myChar = Mid(Cel, x, 1)
                myNumber = Asc(Mid(Cel, x, 1)) 'renvoie le numero ascii de la lettre
     
                If x - 1 > 0 Then 'connaitre si le caractère -1 est entre 0 et 9
                    myNumber_Before = Asc(Mid(Cel, x - 1, 1))
                Else
                    myNumber_Before = 48
                End If
     
                If x + 1 <= Len(Cel) Then 'connaitre si le caractère +1 est un espace
                    myNumber_after = Asc(Mid(Cel, x + 1, 1))
                Else
                    myNumber_after = 32
                End If
     
                If x + 2 <= Len(Cel) Then 'connaitre si le caractère +2 est un espace
                    myNumber_after2 = Asc(Mid(Cel, x + 2, 1))
                Else
                    myNumber_after2 = 32
                End If
                'If myNumber >= 48 And myNumber <= 57 Or myNumber = 32 Then myString = myString & myChar '48=1 57=9 32=espace
     
                If myNumber_Before = 32 And myNumber_after = 32 Then ' si _x_ on n'enregistre pas
                ElseIf myNumber_Before = 32 And myNumber_after >= 48 And myNumber_after <= 57 And myNumber_after2 = 32 Then ' si _xx_ on n'enregistre pas
                    x = x + 1
                ElseIf myNumber >= 48 And myNumber <= 57 Or myNumber = 32 Then
                    a = a + 1
                    myString = myString & myChar '48=1 57=9 32=espace
     
                End If
     
            Next x
     
     
            Range(Cel.Address) = myString
            myString = ""
        Next Cel
     
     
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    Voici un exemple de fonction qui fait ce que tu cherches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function XFoisHuitChiffres(a As String) As String
    dim tmp = a.Split(" ")
    dim result As String
    For i=0  To Ubound(tmp)
    If IsNumeric(tmp(i)) And Len(tmp(i))=8 Then
    result = result & " " tmp(i)
    Next i
    If result <> "" Then
    XFoisHuitChiffres = Mid(result,2)
    Else
    XFoisHuitChiffres = result
    End If
    End Function
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Merci beaucoup pour ta proposition et surtout ta rapidité

    J'ai voulus testé et il y a une erreur sur les deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim tmp = a.Split(" ")
    result = result & " " tmp(i)
    Est-ce que la syntaxe est bonne ?

    Ensuite comment tu voyais l'intégration de cette fonction à la macro que je proposais ?
    Merci pour ta réponse

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Pardon, je faisais du c# en parallele

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim tmp as Variant
    tmp= Split(a," ")
    result = result & " " & tmp(i)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Merci beaucoup

    Et tu as une idée de comment je l'utilise dans la macro ?

    En tout cas, merci d'avoir répond aussi vite

  6. #6
    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
    Bonjour !

    Citation Envoyé par omarter Voir le message
    J'aimerais appliquer un masque pour avoir uniquement "12345678 23456789".
    Un cas d'école pour utiliser les expressions rationnelles ("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
    Sub Demo()
                Const S$ = "abbb 12345678 15 hjsdbwfw 9 23456789"
        With CreateObject("VBScript.RegExp")
                 .Global = True
                 .Pattern = "\d{8}"
            With .Execute(S)
                    T$ = .Item(0)
                For N& = 1 To .Count - 1:  T = T & " " & .Item(N).Value:  Next
            End With
        End With
            MsgBox T
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    C'est top ton truc ! Milles mercis à vous deux pour m'avoir aidé sur cette problématique. Mon pb est résolu !

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

Discussions similaires

  1. Extraire un chiffre d'une chaine de caractere
    Par Davidb_ dans le forum QlikView
    Réponses: 2
    Dernier message: 25/07/2013, 13h56
  2. Réponses: 9
    Dernier message: 09/12/2008, 19h19
  3. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

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