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 :

Récupération partielle d'un texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut Récupération partielle d'un texte
    Bonjour le groupe,

    Ca fait déjà pas mal de temps que je ne suis pas venu, mais j'aurais besoin de vous.

    Dans un fichier .ini que je récupère d'une machine, j'ai plein d'infos dont je me débarrasse pour ne garder que quelques ligne.
    Mais dans ces quelque lignes, je voudrais ne récupérer qu'une partie du texte :

    Dans la cellule, j'ai :
    $TC_TP2[113]="6T20MEKC"

    Je voudrais récupérer juste cette valeur :
    6T20MEKC

    J'ai fais une macro pour purger ce qui ne me va pas, mais pour tronquer la valeur, j'ai tenté une regex mais sans succès

    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
    Sub Purge()
        Set regex_nom = New RegExp
     
        dernier_ligne = Sheets("TO_INI").Cells(65000, 1).End(xlUp).Row
        For x = dernier_ligne To 1 Step -1
            If (Left(Sheets("TO_INI").Cells(x, 1), 8) <> "$TC_TP2[") Then
                Sheets("TO_INI").Cells(x, 1).Delete Shift:=xlUp
            Else
                regex_nom.Pattern = "=.(.*)."
                Set Nom_outils = regex_nom.Execute(Sheets("TO_INI").Cells(x, 1))
                For Each Nom_outil In Nom_outils
                    Nom = Nom_outil.Value
                Next Nom_outil
                Sheets("TO_INI").Cells(x, 4) = Nom
            End If
        Next
    End Sub
    Est il possible qu'une âme charitable me vienne en aide ?
    Merci d'avance
    JLuc

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    As-tu essayé avec la regex suivante ?
    Tu peux faire des simulations ici:
    https://regex101.com/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    J'ai essayé avec un truc de ce genre : regex_nom.Pattern = ".*"(.*)""
    Mais il y a erreur avec les doubles cote (")
    du coup, je ne sais pas comment gérer ça
    En mettant un espion sur la variable Nom_outil et avec le pattern dans ma macro plus haut, en dépliant j'ai [item 1] qui contient le texte que je veux, mais je ne sais pas comment l'atteindre

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    exemple sur la cellule active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t = Split(ActiveCell.Value, """")(1)

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 235
    Par défaut
    Hello,
    voici une macro qui utilise une regex qui capture ce qui est entre guillemets dans les cellules d'une plage et qui met le résultat dans la cellule à côté :
    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
    Sub FiltreRegex()
       Dim ws As Object, Rng As Object, regex As Object, matches As Object, cell As Object
       Dim pattern As String
        Set ws = ThisWorkbook.Sheets("FeuilJLuc") '
        Set Rng = ws.Range("A1:A2") '
        Set regex = CreateObject("VBScript.RegExp")
        pattern = """(.*)"""        ' on capture ce qui est entre guillemets
        regex.pattern = pattern
        For Each cell In Rng
            On Error GoTo Nextcell
            Set matches = regex.Execute(cell.Value)
            Debug.Print matches(0).submatches(0)
            cell.Offset(0, 1).Value = matches(0).submatches(0)
    Nextcell:
        Next cell
     End Sub
    Nom : RegExJLuc.gif
Affichages : 130
Taille : 24,0 Ko

    Dans le cas présent la solution avec regex ne s'impose pas et la solution à joe.levrai est suffisante.

    Ami calmant, J.P

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    A l'intérieur d'une chaines, les doubles cottes doivent être échappée, ou doublée car la double cotte est aussi le caractère d'échappement en VB.
    Quelques exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Data As String
    Data = "chaine avec "" à l'intérieur"    '// On double la double quote au milieu de la chaine
    Data = """ double cotte au début"
    Data = "Double cotte a la fin"""
    Data = """"    '// double cotte seule
    Ta regex peut fonctionner, mais comme .* capture tout et n'importe quoi, assures-toi qu'elle ne soit pas trop naïve.
    Perso, je préfère être le plus restrictif possible.

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

Discussions similaires

  1. Textes partiellement illisibles sur certains sites
    Par Leparachute dans le forum Firefox
    Réponses: 4
    Dernier message: 08/01/2009, 07h23
  2. Récupération partielle d'un texte (HTML)
    Par jeromeg19 dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2008, 14h41
  3. [DW8] insertion partielle de texte cyrillique
    Par j.p.mignot dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 28/12/2007, 11h53
  4. Encadrer partiellement du texte
    Par Beowulf dans le forum Mise en forme
    Réponses: 1
    Dernier message: 14/08/2007, 15h16
  5. Ouvrir partiellement un fichier texte
    Par wjc dans le forum Windows XP
    Réponses: 4
    Dernier message: 21/09/2006, 22h42

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