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 :

Chaine de caractères - Supprimer un code d'une lettre et 4 chiffres ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Par défaut Chaine de caractères - Supprimer un code d'une lettre et 4 chiffres ?
    Bonjour,

    Je souhaite supprimer un code du type "_ABC0000" dans une chaine de caractère. Sachant, que "_ABC" est fixe, mais que "0000" est aléatoire en restant sur 4 chiffres.
    J'avais réussi avec le code ci-dessous, car "_ABC0000" était toujours à la fin de la chaine de caractère.

    Mais maintenant, ce n'est plus le cas, il peut être au milieu.
    Sauriez-vous me dire comment je pourrais adapter mon code, afin que puisse supprimer "_ABC0000" où qu'il soit dans ma chaine de caractère ?

    Le top serait que je puisse mettre ce code supprimé dans une variable pour le réutiliser après.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Code = Right(ActiveCell.Offset(0, 3).Value, 12)
           Libelle_1 = Replace(Libelle_0, Code, "")
    Merci d'avance pour votre aide,

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Bonsoir

    voici comment trouver la position du _
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub essai()
    LeTextePrincipal = Cells(1, 1)
    TypeDeComparaison = 0
    LaChaineRecherchee = "_"
    x = InStr(1, LeTextePrincipal, LaChaineRecherchee, TypeDeComparaison)
    MsgBox x
    End Sub

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    hello,
    pour faire cela tu peux utiliser les expressions régulières avec l'objet COM VBScript.RegExp
    Exemple :

    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
    Public Sub ElimineChaine()   
        Dim regEx As Object
        Dim strInputs As Variant
        Dim strInput, strOutput As String
        strInputs = Array("Déb_ut_ABC1234FiN", "_ABC0000EndString", _
                          "Start__ABC5678", "_ABC000rkrkrkrkrk_ABC8888KKKKK")
        Set regEx = CreateObject("VBScript.RegExp")
        ' Le motif est _ABC suivi de 4 chiffres
        regEx.Pattern = "_ABC[0-9]{4}"
        For Each strInput In strInputs
        Debug.Print strInput
        strOutput = regEx.Replace(strInput, "")
        Debug.Print strOutput
        Debug.Print "=============================="
        Next
    End Sub
    Résultat :
    Déb_ut_ABC1234FiN
    Déb_utFiN
    ==============================
    _ABC0000EndString
    EndString
    ==============================
    Start__ABC5678
    Start_
    ==============================
    _ABC000rkrkrkrkrk_ABC8888KKKKK
    _ABC000rkrkrkrkrkKKKKK
    ==============================
    Ami calmant, J.P

  4. #4
    Membre éclairé
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Par défaut
    Bonjour,

    Merci a_diard et jurassic pork pour vos retours, Nickel !

    @jurassic pork,
    Comment puis-je récupérer le code "_ABC0000" trouvé, afin de le mettre dans une variable, pour le coller dans une cellule ?
    faut-il que je fasse une différence entre les valeurs strInput et strOutput ?

    Petite question supplémentaire, pour supprimer plusieurs chaines de caractères différentes, est-il possible de les renseigner sur la même ligne ci-dessous, avec un séparateur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regEx.Pattern = "_ABC[0-9]{4} ; "_DEF[0-9]{4} ; "_GHI[0-9]{4}"
    Merci d'avance,

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    hello,

    cela peut se faire comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     regEx.Pattern = "(_ABC[0-9]{4}|_DEF[0-9]{4}|_GHI[0-9]{4})"
    Mais ce n'est pas trop optimisé,il faut mieux avoir un motif plus générique du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex.Pattern="_[A-Z]{3}[0-9]{4}"
    undescore suivi de 3 lettres majuscules suivi de 4 chiffres.
    Ami calmant, J.P

  6. #6
    Membre éclairé
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Par défaut
    Merci jurassic pork,

    Lorsque j'ai une seule chaine de caractère à supprimer, comment puis-je récupérer le code "_ABC0000" trouvé, afin de le mettre dans une variable, pour le coller dans une cellule ?

    Merci d'avance,

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    hello,

    comme ceci par exemple :
    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
    Public Sub ElimineChaine()    Dim regEx As Object
        Dim TheMatches, Match
        Dim strInputs As Variant
        Dim strInput, strOutput As String
        strInputs = Array("Déb_ut_ABC1234FiN", "_ABC0000EndString", _
                          "Start__ABC5678", "_ABC000rkrkrkrkrk_ABC8888KKKKK")
        Set regEx = CreateObject("VBScript.RegExp")
        ' Le motif est _ABC suivi de 4 chiffres
        regEx.Pattern = "_ABC[0-9]{4}"
        For Each strInput In strInputs
        Debug.Print strInput
        Set TheMatches = regEx.Execute(strInput)
        If TheMatches.Count = 1 Then Debug.Print "CodeTrouvé : ", TheMatches(0).Value
        strOutput = regEx.Replace(strInput, "")
        Debug.Print strOutput
        Debug.Print "=============================="
        Next
    End Sub
    Ami calmant, J.P

  8. #8
    Membre éclairé
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Par défaut
    Hello,

    Je me suis basé sur ton exemple pour de multiples suppressions, pour supprimer "[PROJET]" et "[FRANCE]" (avec les crochets).
    Cela ne fonctionne pas. Sais-tu me dire comment dire à VBA ne pas interprétrer les crochets ?
    (j'ai tenté \, le double crochet..rien n'y fait)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regEx.Pattern = "(_ABC[0-9]{4}|  [PROJET]{8} |  [FRANCE]{8})"

    Merci beaucoup

Discussions similaires

  1. Indiquer qu'une chaine de caractères est un code
    Par Invité dans le forum VB.NET
    Réponses: 1
    Dernier message: 08/05/2011, 11h57
  2. Chaine de caractère, supprimer caractère spéciaux []
    Par snoopy69 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/03/2009, 12h40
  3. [OpenOffice][Tableur] Chaine de caractères à supprimer
    Par ickyknox dans le forum OpenOffice & LibreOffice
    Réponses: 14
    Dernier message: 15/01/2009, 18h16
  4. Réponses: 2
    Dernier message: 17/06/2008, 21h14
  5. [RegEx] Tronquer une chaine de caractère sauf si c'est une URL.
    Par psychoBob dans le forum Langage
    Réponses: 16
    Dernier message: 03/06/2006, 12h01

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