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 :

Suppression dans une chaîne de caractères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut Suppression dans une chaîne de caractères
    Bonjour,

    Je voudrais créer une fonction VBA qui va me supprimer dans une chaîne de caractères tout ce qui vient après un mot clé donné.

    Exemple :

    ma_chaine_intitiale = "Toto : 123456789 Tata : 12345679"

    mon_mot_clé = "Tata"

    Je voudrais donc supprimer tout ce qui vient après Tata ainsi que le mot Tata.

    Cela devra me donner ce résultat = "Toto : 123456789" au lieu de "Toto : 123456789 Tata : 12345679".

    Merci,

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Tu peux utiliser la propriété La valeur de la cellule sera à gauche de celle-ci d'après cette position.

    Je te laisse traduire.
    Tu reviens si nécessaire.

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    à tester
    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
    Sub test()
     
        Dim Tableau
        Dim i As Integer
        Dim j As Integer
        Dim L As Long
        With Sheets("Feuil1")
        L = .Range("A" & Rows.Count).End(xlUp).Row
     
        For j = 2 To L
        Tableau = Split(.Cells(j, 1), "Tata")
        For i = 0 To UBound(Tableau)
            .Cells(j, 2) = Tableau(0)
        Next i
        Next j
        End With
     
    End Sub

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Bennasr,

    Oui pour cette astuce.
    Mais pourquoi cette boucle sur "Tableau"?

    D'autre part, si une boucle est effectuée sur une variable d'un certain type, il faut que les occurrences sur cette même variable soit du même type.
    Dans le cas contraire, le risque d'erreur est vite élevé.

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour MARCEL
    t'as raison , désolé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
        Dim Tableau
        Dim j As Integer
        Dim L As Long
        With Sheets("Feuil1")
        L = .Range("A" & Rows.Count).End(xlUp).Row
        For j = 2 To L
        Tableau = Split(.Cells(j, 1), "Tata")
            .Cells(j, 2) = Tableau(0)
        Next j
        End With
    End Sub

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Pas de problème.

    Regarde le complément que j'ai apporté à mon post.

  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
    Citation Envoyé par Jinkas99 Voir le message
    Bonjour,

    Je voudrais créer une fonction VBA qui va me supprimer dans une chaîne de caractères tout ce qui vient après un mot clé donné.

    Exemple :

    ma_chaine_intitiale = "Toto : 123456789 Tata : 12345679"

    mon_mot_clé = "Tata"

    Je voudrais donc supprimer tout ce qui vient après Tata ainsi que le mot Tata.

    Cela devra me donner ce résultat = "Toto : 123456789" au lieu de "Toto : 123456789 Tata : 12345679".

    Merci,

    heu.. une boucle pourquoi faire ?????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ma_chaine_intitiale = "Toto : 123456789  Tata : 12345679" 
    ma_chaine_pas_intitiale = split(ma_chaine_intitiale ,"Tata:")(0)
    et rien de plus rien de moins
    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
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Patrick,

    Certes, la variable Tableau serait redondante.
    Au demeurant, en ce qui concerne la boucle, c'est bien ce qui a été notifié, non?

  9. #9
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Je me cache derrière le statut de débutant et poser une question peut être bête !!
    Citation Envoyé par patricktoulon Voir le message
    heu.. une boucle pourquoi faire ?????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ma_chaine_intitiale = "Toto : 123456789  Tata : 12345679" 
    ma_chaine_pas_intitiale = split(ma_chaine_intitiale ,"Tata:")(0)
    et rien de plus rien de moins
    s'il s'agit d'une seule chaine en A1 est ce que le demandeur cherche à faire ça avec VBA !!! je doute
    donc il s'agit d'une liste d'ou la nécessité d'une boucle non ??!! en faite je suis débutant et je peux oser

  10. #10
    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
    je répète donc

    en citant l'auteur
    Citation Envoyé par Jinkas99 Voir le message
    Bonjour,

    Je voudrais créer une fonction VBA qui va me supprimer dans une chaîne de caractères tout ce qui vient après un mot clé donné.

    Exemple :

    ma_chaine_intitiale = "Toto : 123456789 Tata : 12345679"

    mon_mot_clé = "Tata"

    Je voudrais donc supprimer tout ce qui vient après Tata ainsi que le mot Tata.

    Cela devra me donner ce résultat = "Toto : 123456789" au lieu de "Toto : 123456789 Tata : 12345679".

    Merci,
    ou avez vous vus le besoins de boucler sur des cells ou même un tableau dans sa demande ?

    et combien même !!!
    ne croyez vous pas qu'il serait plus judicieux de séparer le code du split de la boucle ??


    du genre
    la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function spliter(cel as string, str as String )
        spliter = Split(cel, str)(0)
    End Function
    et pour une utilisation vba bouclant sur une variable tableau
    le tableau peut être issu d'un range (je le dis au cas ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i= 1 to ubound(tableau)
    tableau(i)=spliter(tableau(i),"Tata")(0)
    next
    et en prime cadeau
    vous pouvez utiliser la fonction en formule ce qui rendrait entre parenthese la chose absolument dynamique puisque déclenché par le change en colonne"A"
    exemple en B2
    =spliter(A1;"Tata")
    je n'ai pas besoins d'expliquer comment étendre une formule dans une colonne non ? ce qui donnerait le même résultat qu'avec une boucle


    aller on pousse plus loin
    imaginez que le string du split soit diffèrent pour chaque cells

    on dira la chaine complète en colonneA , le string en colonneB et le résultat en C

    ben en C vous mettez la formule
    =spliter(A1;B1)
    et on étend la formule

    ca vous coute quoi de séparer le split de la boucle dans la sub et d'en faire une tout chtite fonction qui sera largement plus modulable qu'un code compact

    peu être me suis je mieux fait comprendre maintenant
    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

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Par rapport à la question de base, le code suivant suffit amplement à la chose, me semble-t-il.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      s = "Toto : 123456789 Tata : 12345679"
      Debug.Print Left(s, InStr(s, " Tata :") - 1)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Pierre,

    C'était bien l'objet de mon premier post.
    Pas de réponse.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tout à fait, Marcel

    C'est pourquoi j'ai mis un exemple , et je ne comprends pas ce délire de split (non testé et foireux, en plus) et de boucle par la suite


    Le code suivant ne saurait pas donner la solution, la chaine de départ et le séparateur du split n'étant pas orthographiés correctement => Merci de tester la solution avant de poster pour ne pas induire le demandeur en erreur
    Citation Envoyé par patricktoulon Voir le message
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ma_chaine_intitiale = "Toto : 123456789  Tata : 12345679" 
    ma_chaine_pas_intitiale = split(ma_chaine_intitiale ,"Tata:")(0)
    et rien de plus rien de moins
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

    Par rapport à la question de base, le code suivant suffit amplement à la chose, me semble-t-il.
    ben en fait tout dépend du résultat souhaité en cas de non occurrence
    instr donnera 0
    le split(index(0)) rendra la chaine complète
    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

  15. #15
    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
    tiens pierre dis moi encore que j'ai tord

    voila ce qui se passe en cas de non occurrence
    qui puis est avec -1 sur un instr 0 en plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
        ma_chaine_intitiale = "Toto : 123456789  Tata : 12345679"
        ma_chaine_pas_intitiale = Split(ma_chaine_intitiale, "titi :")(0)
        MsgBox ma_chaine_pas_intitiale
         ma_chaine_pas_intitiale = Left(ma_chaine_intitiale, InStr(ma_chaine_intitiale, " titi :") - 1)
        MsgBox ma_chaine_pas_intitiale
    End Sub
    de plus je le redis tout dépend du résultat souhaité en cas de non occurrence
    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

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    [...]en cas de non occurrence
    instr donnera 0
    le split(index(0)) rendra la chaine complète
    Si risque d'absence de sous-chaine, on peut tester le retour de instr car:
    • Il n'est pas dit dans l'énoncé que la sous-chaine n'existe pas;
    • Il n'est pas dit qu'il faut retourner la chaine entière dans ce cas.




    Quoi qu'il en soit, le split que tu as proposé:
    • n'aboutira pas car Tata: <> Tata :
    • même avec Tata :, laisserait un espace derrière Toto : 123456789 alors que l'exemple donné par le demandeur montre clairement qu'il ne faut pas d'espace en fin de chaine
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Suppression mot dans une chaîne de caractère
    Par Maxime80 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 16/07/2015, 21h09
  2. Réponses: 7
    Dernier message: 07/02/2013, 19h36
  3. [WebI XiR2] Suppression d'un espace dans une chaîne de caractères
    Par SGA99 dans le forum Débuter
    Réponses: 6
    Dernier message: 02/12/2010, 18h12
  4. Réponses: 5
    Dernier message: 25/02/2008, 15h34
  5. Réponses: 13
    Dernier message: 20/11/2006, 18h46

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