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 :

Supression chaîne de caractères [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut Supression chaîne de caractères
    Bonjour à tous,

    je connais les fonctions left, mid, right.

    Mon problème est le suivant :

    après importation des données d'un fichier texte, j'ai, par exemple, l'information suivante.

    "Maison 6 pièces dans le Lubéron ( charmant mas provençal )"

    J'aimerais supprimer la chaîne de caractères "( charmant mas provençal )". Toutes les chaînes commencent par " ( " et finissent par " ) ".

    Je suis complètement bloqué dans ma réflexion pour trouver le code VBA qui ferait ça.

    J'ai vraiment besoin qu'on me mette le pied à l'étrier.

    Merci d'avance de vos conseils.

    Cordialement
    Pascal

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim Chaine As String, Parenthese_Ouv As String, Parenthese_Fer As String
        Dim NewChaine As String, Chaine_Ret As String
        Application.ScreenUpdating = False
        Chaine = Range("A1").Value 'Chaîne de caractères à traiter
        Parenthese_Ouv = InStr(1, Chaine, "(", 1) 'position parenthèse ouvrante
        Parenthese_Fer = InStr(1, Chaine, ")", 1) 'position parenthèse fermante
        Chaine_Ret = Mid(Chaine, Parenthese_Ouv, Parenthese_Ouv) 'Chaîne à retirer
        NewChaine = Replace(Chaine, Chaine_Ret, "") 'Nouvelle chaîne
    Cdlt

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nounours1952 Voir le message

    Bonjour,

    Une autre solution possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function ChaineSansParentheses(ByVal ChaineATraiter As String) As String
     
             ChaineSansParentheses = Trim(Split(ChaineATraiter, "(")(0)) & Trim(Split(ChaineATraiter, ")")(1))
     
    End Function

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Bonjour à tous,

    merci à Kergresse et Arturo. Je vais tester ça.

    Cordialement
    Pascal

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Bonjour à tous,

    désolé pour le délai de ma réponse. Quelques soucis de hardware.

    La proposition de Arturo83, n'enlève que la première parenthèse. Le reste n'est pas éliminé.

    Celle d'Eric me pose un problème d'appel. Si je la mets dans le sub, le programme me demande un end sub. Si je mets la procédure dans un module et que je l'appelle par "Call ChaineSansParentheses", j'obtiens un message d'erreur de compilation "Argument non facultatif". Si je mets l'intégralité du nom de la procédure, le message d'erreur de compilation est "Attendu : séparateur de liste ou )". Pareil si j'enlève le "As String" après la parenthèse.

    Que fais-je de travers ?

    Amicalement
    Pascal

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Eric t'as proposé une fonction et non un sub
    Deux option:
    - soit tu la met dans un module et l'appelle comme tu n'importe quel autre fonction native:
    Nom : fonction1.jpg
Affichages : 143
Taille : 126,5 Ko

    - soit tu la met dans thisworkbook et tu l'utilise directement dans excel
    Nom : fonction2.jpg
Affichages : 152
Taille : 112,3 Ko
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Bonjour Halaster,

    Toi : "- soit tu la met dans un module et l'appelle comme tu n'importe quel autre fonction native:"

    Moi : "Si je mets la procédure dans un module"

    Jusque là, j'ai tout bon (ouf !). J'ai fait quoi de travers, là ?
    C'est l'appel de la procédure qui me pose problème, comme exposé (clairement, j'espère).

    Amicalement
    Pascal

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    C'est l'appel de la procédure qui me pose problème
    je connais les fonctions left, mid, right.
    Comme je l'ai dit et montré sur la capture d'écran, tu appelle cette nouvelle fonction de la meme manière que tu appelle n'importe quelle autre fonction
    Tu n'écris jamais call left(...), bah la c'est pareil.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nounours1952 Voir le message
    Bonjour,

    Voir l'exemple dans le fichier joint.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Re,

    merci. Je l'ai adapté à mes besoins.

    Amicalement
    Pascal

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Bonjour à tous,

    suite au crash de mon DD, et donc la perte de mon programme VBA (ah bon, tu n'avais pas fait de sauvegarde ? Ben non, comme un c...!), il ne me restait plus qu'à tout refaire. Arrivé au point qui a motivé ma demande d'aide, je ne me rappelais plus les adaptations que j'avais appliquées. Après plusieurs tâtonnements, je vous soumets le produit opérationnel de mes réflexions. Pour rappel, je recherchais une méthode pour éliminer une chaîne de caractères à partir d'une parenthèse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Dim DerLig As Long
      Dim i As Integer
      Dim ChaineOri As String
      Dim ChaineModif As Variant
     
      DerLig = range("A" & Rows.count).End(xlUp).Row
        For i = 1 To DerLig
            ChaineOri = range("B" & i).value           'Chaîne à modifier
            ChaineModif = Split(ChaineOri, "(")        'Couper à partir de la première parenthèse
            range("C" & i) = ChaineModif               'Récupérer la chaîne modifiée
        Next
    Encore merci pour votre aide précieuse et votre patience.

    Cordialement
    Pascal

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

Discussions similaires

  1. Supression d'espace dans une chaîne de caractères
    Par filsdepub dans le forum Langage SQL
    Réponses: 6
    Dernier message: 31/08/2015, 17h44
  2. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  3. Regex supression du premier répertoire dans la chaîne de caractères
    Par touille dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/02/2011, 14h12
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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