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

VBA Discussion :

Comment supprimer ce qu'il y a entre guillemets dans une chaine qui en contient ?


Sujet :

VBA

  1. #1
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut Comment supprimer ce qu'il y a entre guillemets dans une chaine qui en contient ?
    Bonjour à tous, et une excellente année à vous...

    Voilà, j'ai un petit souci avec un code, que je ne sais pas comment appréhender.

    J'ai différentes chaines de caractères qui peuvent ressembler à celle-ci :

    ValeurLign="(setq Valeur (strcat Valeur "\n\tCalque en cours \t= " (vlax-ldata-get "DenisH" "CharteCalq")) ;_ Fin de strcat"

    J'aimerais, dans cette chaine, supprimer tous les caractères qui sont entourés de guillemets ainsi que ces guillemets... Bref, ce qu'il y a en caractères gras/italique.

    Pour me retrouver avec cette chaine :

    ValeurLign="(setq Valeur (strcat Valeur (vlax-ldata-get )) ;_ Fin de strcat"

    Si quelqu'un a une astuce, un conseil... Je suis preneur...

    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  2. #2
    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

    Bonjour,

    cas déjà documenté dans le tutoriel Les Expressions Rationnelles appliquées en VBA

    _________________________________________________________________________________________________________
    Je suis Paris, 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)

  3. #3
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Bonjour Marc, et merci pour cette réponse...

    Mais c'est hyper complexe et je crains que ça dépasse largement mon piètre niveau. Je pensais qu'avec un Replace(Chaine$,"\"\w\"","") suffirait, ou un truc dans le même genre...

    Mais je vais tout de même tenter le truc... Mais je ne pense pas que mes collègues aient la même version de Word que moi...

    Merci encore...

    PS : forcément, mon premier test plante... "Erreur 13: Incompatibilité de type", j'ai écris ça, qui ne fonctionne pas :
    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
        Dim reg As VBScript_RegExp_55.RegExp
        [...]
            Set reg = New VBScript_RegExp_55.RegExp
            ' attribution des propriétés
            ' ''' motif / pattern
            reg.Pattern = strPattern
            ' ''' application sur toutes les occurences
            reg.Global = True
            ' ''' on ignore la casse
            reg.IgnoreCase = True
            ' ''' le motif ne porte pas sur plus d'une ligne à la fois
            reg.MultiLine = False
            reg.Pattern = "(\" \ w \ ")" '-> Ca plante ici *******************************************
            SupprEntreGuillemet = reg.Replace(ValeurLign, "$2 $1")
            MsgBox SupprEntreGuillemet
    Je suis ouvert à toutes solutions...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  4. #4
    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

    Le Pattern d'une chaîne étant déjà écrit dans le tutoriel, d'un niveau Copier / Coller !

    Sinon en pur VBA cela demande une logique de fin de primaire début de collège
    donc à la portée de tout débutant en VBA :

    - au sein d'une boucle Do Loop sans condition
    - chercher la position d'un premier guillemet via la fonction InStr (cf aide VBA interne et autre tutoriel de ce forum)
    - si le résultat est égal à zéro il n'y a plus rien à traiter, sortir de la boucle
    - sinon chercher la position du guillemet suivant via la même fonction
    - si le résultat est égal à zéro, souci donc abandon (sortie de boucle)
    - sinon extraire le texte entre les deux positions (comprises) via la fonction Mid
    - supprimer le texte extrait de la chaîne initiale via la fonction Replace
    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)

  5. #5
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Salut, et merci pour ton aide...
    Sinon en pur VBA cela demande une logique de fin de primaire début de collège
    donc à la portée de tout débutant en VBA
    Je le prend comment ? Mais tu as raison, je voyais le problème beaucoup plus difficile qu'il est...

    Bon, du coup, j'ai fais une condition If, ça donne çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            If InStr(ValeurLign, """") <> 0 Then
                    PosGuillemet1 = InStr(ValeurLign, """")
                    PosGuillemet2 = InStr(PosGuillemet1 + 1, ValeurLign, """")
                ValeurLign = Left(ValeurLign, PosGuillemet1 - 1) & Mid(ValeurLign, PosGuillemet2 + 1, (Len(ValeurLign) - PosGuillemet2))
            End If
    Je vais réfléchir sur ta proposition de Do Loop...

    Encore merci...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  6. #6
    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
    Pour le second Mid la position de départ seule suffit …

    Même si le code est incomplet l'effort de logique étant bien avéré (cf règles de ce forum),
    voici la version reprenant le Pattern documenté dans les cas pratiques du tutoriel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Demo()
        S$ = "(setq Valeur (strcat Valeur ""\n\tCalque en cours \t= "" (vlax-ldata-get ""DenisH"" ""CharteCalq"")) ;_ Fin de strcat"
     
        With CreateObject("VBScript.RegExp")
            .Global = True
            .Pattern = "( ""[^""]*"")"  ' Ou .Pattern = "( \x22[^\x22]*\x22)"  comme dans le tutoriel …
             MsgBox .Replace(S, "")
        End With
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    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)

  7. #7
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Ok, merci encore pour ton aide...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/05/2011, 18h58
  2. Réponses: 1
    Dernier message: 07/04/2009, 11h21
  3. Réponses: 13
    Dernier message: 03/10/2007, 11h25
  4. comment mettre 1 guillemet dans une chaine de texte
    Par maisonfoue dans le forum Access
    Réponses: 2
    Dernier message: 06/01/2007, 21h18
  5. Réponses: 1
    Dernier message: 04/09/2006, 20h51

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