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 des caractères selon condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut Extraire des caractères selon condition
    Bonjour,

    J'ai un fichier qui est issu d'une extraction sql d'un champ en rtf. Excel m'affiche tout le champ avec les balises rtf.

    Exemple :
    A2 : (vide)
    A3 : (vide)
    A4 : (vide)
    A5 : "{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Tahoma;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;\red105\green105\blue105;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1036\fs16\f2\cf2 \cf2\ql{\f2 {\ltrch DACHSER 75.82 eur HT}\li0\ri0\sa0\sb0\fi0\ql\par}
    }
    }"
    A6 : (vide)
    A7 : (vide)
    A8 : (vide)
    A9 : "{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Tahoma;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;\red105\green105\blue105;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1036\fs16\f2\cf2 \cf2\ql{\f2 {\ltrch DACHSER Speed 84.44 eur HT}\li0\ri0\sa0\sb0\fi0\ql\par}
    }
    }"
    A10 : (vide)


    En fait, je voudrais que dès que la balise "\ltrch" apparaît alors on prend la chaine de caractères qui va jusqu'au caractère "}"

    Je ne maîtrise pas assez excel pour y arriver, est ce que quelqu'un a une astuce ?

    Merci par avance,

    Liop

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voir du côté des fonctions de la catégorie "Texte".
    Les fonctions CHERCHE ou TROUVE permettent de trouver la position d'un ou plusieurs caractères cherchés dans une chaîne de caractères. La fonction STXT permet d'extraire une chaîne de caractères d'une autre.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Excel ou VBA ? Tu es dans le forum VBA. Mais ceci peut se faire avec Excel. Voici les fonctions qui te seront utiles :
    • CHERCHE : renvoie la position d'un caractère recherché dans une chaîne de caractère.
    • GAUCHE et DROITE : permet d'extraire une partie d'une chaîne de caractère selon un nombre de caractères donnés en partant de la gauche ou de la droite.

    Ex. avec A5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GAUCHE(DROITE(A5;NBCAR(A5)-CHERCHE("\ltrch";A5)-6);CHERCHE("}";DROITE(A5;NBCAR(A5)-CHERCHE("\ltrch";A5)-6))-1)
    1. CHERCHE("\ltrch";A5) : on cherche \ltrch dans la chaine de caractères.
    2. NBCAR(A5)-CHERCHE("\ltrch";A5)-6 : nombre de caractères après \ltrch
    3. DROITE(A5;NBCAR(A5)-CHERCHE("\ltrch";A5)-6) : texte après \ltrch
    4. CHERCHE("}";DROITE(A5;NBCAR(A5)-CHERCHE("\ltrch";A5)-6)) : on cherche "}" dans le texte après \ltrch
    5. DROITE(A5;NBCAR(A5)-CHERCHE("\ltrch";A5)-6))-1 : nombre de caractères avant "}" dans le texte après \ltrch
    6. GAUCHE(DROITE(A5;NBCAR(A5)-CHERCHE("\ltrch";A5)-6);CHERCHE("}";DROITE(A5;NBCAR(A5)-CHERCHE("\ltrch";A5)-6))-1) : texte avant "}" dans le texte après \ltrch --> soit le texte entre \ltrch et "}"

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut
    Merci pour cette réponse qui fonctionne.

    Effectivement, j'aurai souhaité que ce soit en VBA pour qu'à l'ouverture du fichier la macro s'execute.

    Est ce possible en VBA ?

    MErci

    Liop

  5. #5
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Citation Envoyé par liop49 Voir le message
    Effectivement, j'aurai souhaité que ce soit en VBA pour qu'à l'ouverture du fichier la macro s'execute.
    Je ne comprends pas bien pourquoi il faudrait que ce soit une macro. Si tu écris une fonction, elle sera calculée dès l'ouverture du fichier. Et tu peux tirer cette fonction sur les autres cellules pour faire l'analyse sur toute la colonne A
    Si vraiment il faut que ce soit une macro, tu peux traduire la formule avec les équivalents en VBA.
    • GAUCHE --> Left
    • DROITE --> Right
    • CHERCHE --> Application.Search
    • NBCAR --> Len

    Mais tu as aussi d'autres fonctions intéressantes pour la manipulation de chaîne de caractères en VBA (Mid, Split ...) --> regarde ce tuto : http://silkyroad.developpez.com/VBA/...Caracteres/#LI.

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Si l'on tient à faire cela avec VBA --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    toto = "{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Tahoma;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;\red105\green105\blue105;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1036\fs16\f2\cf2 \cf2\ql{\f2 {\ltrch DACHSER Speed 84.44 eur HT}\li0\ri0\sa0\sb0\fi0\ql\par}}}"
    sep1 = "\ltrch"
    sep2 = "}"
    titi = Mid(toto, InStr(toto, sep1) + Len(sep1))
    titi = Left(titi, InStr(titi, sep2) - 1)
    MsgBox titi
    Y ajouter bien évidemment les gestions d'erreurs éventuelles (avsence éventeulle de sep1 ou de sep2).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut Ou bien tout simplement via Split …

    Bonjour !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Demo()
        Const S = "{\f2 {\ltrch DACHSER 75.82 eur HT}\li0\ri0\sa0\sb0\fi0\ql\par}"
             SP = Split(S, "\ltrch ")
        If UBound(SP) > 0 Then MsgBox Split(SP(1), "}")(0)
    End Sub
    ___________________________________________________________________________________________________________

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

    ___________________________________________________________________________________________________________
    Je suis Paris, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir (coucou à Jacques et Marc),

    un pour Marc dont la solution est simple, élégante, permettant de faire la vérification et en même temps de donner le résultat si la vérification est avérée

    une autre solution serait de passé par du regex/grep, awk, sed pour avoir l'ensemble des résultats à mettre dans Excel, cela veut dire traiter le fichier en amont pour ne garder que le résultat dans Excel
    faisable depuis Excel via l'utilisation du shell (mais bon là c'est un autre niveau), toujours bon de le savoir

    La démarche dans Excel :
    - Récupérer le chemin de ledit fichier à traiter
    - Définir une variable dont la correspondance sera égal à la commande shell adéquat avec en sus le paramètre du chemin du fichier à traiter
    - Traiter le résultat de cette variable dans Excel

    PS : je ne suis pas habitué à l'invite de commande dans Windows, et je débute avec le terminal sur Mac OS X avec les commandes citées, mais celles-ci sont très puissante et intéressante à voir

    Sinon le fichier peut être facilement traiter à l'aide des solutions proposées en post #6 et #7
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

Discussions similaires

  1. Programme VBA pour extraire des données selon une condition
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/03/2017, 15h39
  2. requête pour extraire des caractères d'un champ
    Par hellyjlj dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/11/2007, 15h32
  3. Extraire des caractères d'une chaine
    Par fabpeden dans le forum C
    Réponses: 5
    Dernier message: 07/05/2007, 10h09
  4. Extraire des caractères spéciaux de la base
    Par Samrock dans le forum Langage
    Réponses: 17
    Dernier message: 28/05/2006, 18h13
  5. Comment extraire des caractères d'une chaine ?
    Par Powa87 dans le forum Langage
    Réponses: 16
    Dernier message: 01/01/2005, 19h00

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