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 :

Supprimer une partie d'une chaîne de caractères


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Informatique
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut Supprimer une partie d'une chaîne de caractères
    Bonsoir, je n'ai pas trouvé de fonction qui permette d'extraire une sous-chaîne précédant un caractère ou bien supprimer une sous-chaîne à partir d'un caractère.

    Par exemple, pour cette chaîne de caractères : "exemple (inutile)", je ne veux récupérer que "exemple" et donc c'est le caractère "(" qui doit déclencher le traitement. PS : Il faut que l'espace avant "(" disparaisse aussi.

    Merci d'avance pour votre aide !

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, de la lecture : Manipuler les chaînes de caractères en VB6 et VBA Excel, du côté de Scinder une chaîne avec Split ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une petite fonction toute simple qui est bien sûr à adapter !
    Si tu veux supprimer l'espace tu le concatène avec le caractère de référence, pour l'argument "Caractere", tu passe les deux caractères (espace et parenthèse):
    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
    19
    20
    21
    22
    23
    24
    25
    26
     
    Sub Test()
     
        MsgBox Extraire("exemple (inutile)", " (", 0)
     
    End Sub
     
    Function Extraire(Chaine As String, Caractere As String, Optional Position As Integer = 0) As String
     
        On Error GoTo Fin
        Extraire = Split(Chaine, Caractere)(Position)
     
        Exit Function
     
    Fin:
        If UBound(Split(Chaine, Caractere)) < Position Then
     
            Extraire = "Valeur de 'Position' en dehords de la plage !"
     
        Else
     
            Extraire = "ERREUR" 'ou n'importe quoi d'autre pour indiquer le type d'erreur
     
        End If
     
    End Function

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    pour mémoire :
    je ne veux récupérer que "exemple" et donc c'est le caractère "(" qui doit déclencher le traitement. PS : Il faut que l'espace avant "(" disparaisse aussi.
    il faut faire là l'économie de la fonction split, en faveur de la fonction Instr, associée à la fonction Left, qui fait l'affaire, est simple et est beaucoup moins gourmande

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Informatique
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut
    Ça a l'air assez compliqué quand même :/ Moi j'avais fait ceci mais j'espérais qu'avec une fonction il n'y ait pas besoin de créer une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim position_parenthese As Integer
     
    position_parenthese = InStr(TNomPrenom(tailleT), "(") 'Le nom et prénom étant déjà dans le tableau TNomPrenom
    If position_parenthese <> 0 Then
        TNomPrenom(tailleT) = Left(TNomPrenom(tailleT), position_parenthese - 2)
    End If

  6. #6
    Membre Expert
    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
    Par défaut
    Bonjour,

    es tu sur qu'il y a bien partout un espace devant la "(", car si ce n'est pas le cas sur certains tu peux alors avoir le résultat tronqué d'une lettre (avec le -2) et donc un résultat faux
    dans ce cas fait plutôt -1 au lieu de -2 et utilise la fonction Trim permettant soit de supprimer les espaces à gauche (LTrim) ou à droite (RTrim) ou bien les 2 (Trim) : ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TNomPrenom(tailleT) = RTrim(Left(TNomPrenom(tailleT), position_parenthese - 1))
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TNomPrenom(tailleT) = Trim(Left(TNomPrenom(tailleT), position_parenthese - 1))
    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 :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    des méthodes il y en a à foison
    en voici quelques unes
    'on prend l'espace et la parenthèse en paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub exemple1()
     chaine = "exemple (inutile)"
    MsgBox Split(chaine, " (")(0) 
    End Sub
    '
    'on prend la parenthèse en paramètre et on fait un trim pour virer les espaces éventuels devant ou après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub exemple2()
     chaine = "exemple (inutile)"
    MsgBox Trim(Split(chaine, "(")(0)) 
    End Sub
    '
    on utilise mid(1, et la position de la première parenthèse avec instr(1,chaine,caractere) et on trim pour les espaces éventuels'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub exemple3()
    chaine = "exemple (inutile)"
    MsgBox Trim(Mid(chaine, 1, InStr(1, chaine, "(") - 1)) 
    End Sub
    'on utilise left et la position de la parenthèse avec instr(1,chaine,caractere) -1 pour l'espace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub exemple4()
    chaine = "exemple (inutile)"
    MsgBox Left(chaine, InStr(1, chaine, "(") - 1)
    End Sub
    et juste pour dresser les cheveux sur la tète de jacques un truc encore plus tordu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub exemple5()
    chaine = "exemple (inutile)"
    MsgBox Replace(chaine, Mid(chaine, InStr(1, chaine, "(") - 1, Len(chaine)), "")
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre Expert
    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
    Par défaut
    hi patrick

    ici pas besoin de mettre Len(chaine), juste faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub exemple5()
    chaine = "exemple (inutile)"
    MsgBox Replace(chaine, Mid(chaine, InStr(1, chaine, "(") - 1), "")
    End Sub
    Edit : mais il est vrai que pour montrer les méthodes, les détails sont importants pour ceux qui abordent ces notions de code et façons de programmer …
    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 :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    to edit a repondu a ma place

    même moi qui ne suis pas débutant je considère que "mid" a un début et une fin (même si celle ci est gérable d'une drôle de façon sans doute l'auto complétion )

    exemple troublant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaine="toto" 
    msgbox mid(chaine,3,1000)
    te donne "to"

    l'erreur n'est pas relevée par le débogage!!!!!

    je considère donc ::que mieux vaut rester prudent et faire les choses conforme au cas ou la firme Redmond jugerait utile de corriger cela dans ses DLLS
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Patrick
    Qu'est qui te "trouble" tant dans ce comportement tout-à-fait normal (et voulu) ?
    Il correspond très exactement à ce qu'expose l'aide VBA interne en ce qui concerne l'argument (au demeurant facultatif) length ...

  11. #11
    Membre Expert
    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
    Par défaut
    Re,

    Patrick tu ne voulais pas dire plutôt pour MID, Début et Longueur (et non fin) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    chaine = "tototo"
    MsgBox Mid(chaine, 3, 1)
    MsgBox Mid(chaine, 3, 2)
    MsgBox Mid(chaine, 3, 3)
    MsgBox Mid(chaine, 3, 4) & " est là"
    MsgBox Mid(chaine, 3) & " et le revoilà"
    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 :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2013, 15h57
  2. donner une couleur a une partie d'une forme
    Par ralf91 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2008, 17h02
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

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