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 :

Savoir si Sous-chaine est dans chaine


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut Savoir si Sous-chaine est dans chaine
    Bonjour,

    Je voudrais savoir si une sous-chaîne se trouve en entier dans une chaîne
    Les instructions du genre' inst'r ne conviennent pas.
    Merci si vous pouvez m'aider.

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    Une solution par formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(TROUVE("ddDd";A1))=FAUX;"la sous chaine est présente";"pas de sous-chaine en bretagne")
    la Bretagne, ça me faisait plaisir
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Merci casefayere,

    Mais c'est du langage macro et pas du VBA.
    Comment le mettre en VBA ?

    ... er vivent,les Bretons !

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Tu as plusieurs solution, avec VBA :

    - tu peux inserer la formule, toujours avec VBA, soit
    avec formulaR1C1
    si je reprends mon exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        range("B2").FormulaR1C1 = _
            "SI(ESTERREUR(TROUVE(""ddDd"";A1))=FAUX;""la sous chaine est présente"";""pas de sous-chaine en bretagne"")"
    ou avec formulaLocal ou formula, là il faut que je regardes
    -tu peux demander une réponse directe, soit dans une formule, soit dans un message ou autre, idem il faut que je regardes mais dis-en plus

    Quelle option t'interesse ?

    Excuses-moi, trop de chouchen, la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        range("B1").FormulaR1C1 = _
            "=IF(ISERROR(FIND(""ddDd"",RC[-1]))=FALSE,""la sous chaine est présente"",""pas de sous-chaine en bretagne"")"
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Je veux savoir, si après avoir activé une cellule, sa valeur se trouve dans une liste donnée.

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Donc t ne cherches pas un bout de texte à l'intérieur d'un autre texte, tu veux savoir si le contenu d'une cellule se trouve parmi une liste.

    Si c'est ça, ou se trouve ta liste ?
    ...si après avoir activé une cellule...
    Donc avec l'évènement "change", faire un "find" ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Voici, par exemple, ce que j'ai essayé, mais ça ne donne que l'existence du premier caractère et pas du tout l'ensemble de la chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr("GrisRougeVertBleuCyanMagentaJaune", xCamaieu)
    etc.
    si xCamaieu = "Vert", ou "Magenta ", c'est bon, etc., autrement c'est faux.

    Je n'ai pas à savoir l'emplacement, mais si seulement ça existe.

    En VBA, il n'y a pas d'instruction du genre 'contain' ?

  8. #8
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    L'instruction Instr devrait convenir, mais avec tous ces arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1,"GrisRougeVertBleuCyanMagentaJaune", xCamaieu) Then
    Cordialement,

    PGZ

  9. #9
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Sinon, je pensai à une autre solution, à adapter bien sur, juste pour se servir de "like"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Macro3()
    Dim xcamaieu As String
    xcamaieu = "Vert"
    Range("A1") = "GrisRougeVertBleuCyanMagentaJaune"
    If Range("A1") Like "*" & xcamaieu & "*" Then
    MsgBox "la sous chaine est présente"
    Else
    MsgBox "pas de sous-chaine"
    End If
    End Sub
    Re, je viens de revoir un excellent tuto, a relire flamel :
    http://silkyroad.developpez.com/VBA/...racteres/#LI-D

    dont ceci
    La recherche est sensible à la casse si le dernier argument "compare" (facultatif) est égal à 0, ou omis.
    (Casse: Signifie que la recherche n'est pas sensible aux majuscules et aux minuscules)
    VB6-VBA


    MsgBox InStr(1, "Developpez", "Z", 0) 'renvoie 0
    MsgBox InStr(1, "Developpez", "z", 0) 'renvoie 10

    La recherche n'est pas sensible à la casse si le dernier argument "compare" est égal à 1
    VB6-VBA


    MsgBox InStr(1, "Developpez", "z", 1) 'renvoie 10
    MsgBox InStr(1, "Developpez", "Z", 1) 'renvoie 10
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    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,

    Si Instr ne convient pas, regarde du coté de "Like" (voir dans l'aide). Pour une recherche en tenant compte ou non de la casse, définir en tête de module "Option Compare" (Binary ou Text) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub RechercherChaine()
     
        Dim Texte As String
        Dim Chaine As String
     
        Texte = "Ici, c'est ma chaîne principale où doit s'effectuer la recherche du mot"
     
        'les astérisques permettent la chaîne dans le texte, en ôtant l'un
        'ou l'autre la chaîne est recherchée soit en dédut soit en fin du texte
        Chaine = "*doit s'effectuer*"
        MsgBox Texte Like Chaine
     
    End Sub
    Hervé.

    Oups,

    désolé, je n'ai pas fait attention à la réponse donné par casefayere avec Like

    Bonne journée à toutes et tous.

    Hervé.

  11. #11
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    La solution avec LIKE fonctionne bien. Mais Instr aussi, la preuve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Flamel()
    Dim sCouleur As String, sListe As String
     
    sListe = StrConv("GrisRougeVertBleuCyanMagentaJaune", vbUpperCase)
     
    sCouleur = "BLeU"
    Debug.Print sCouleur & " : " & IIf(InStr(1, sListe, StrConv(sCouleur, vbUpperCase)) > 0, "OK", "KO")
     
    sCouleur = "VertDeGris"
    Debug.Print sCouleur & " : " & IIf(InStr(1, sListe, StrConv(sCouleur, vbUpperCase)) > 0, "OK", "KO")
     
    End Sub
    on obtient dans la fenêtre d'exécution
    BLeU : OK
    VertDeGris : KO
    Le pb est que si l'on teste sCouleur = "VertBleu", la réponse sera OK. Pour éviter ce pb,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Flamel2()
    Dim sCouleur As String, sListe As String
     
    sListe = StrConv("|Gris|Rouge|Vert|Bleu|Cyan|Magenta|Jaune|", vbUpperCase)
     
    sCouleur = "BLeU"
    Debug.Print sCouleur & " : " & IIf(InStr(1, "|" & sListe, StrConv(sCouleur, vbUpperCase) & "|") > 0, "OK", "KO")
     
    sCouleur = "VertBleu"
    Debug.Print sCouleur & " : " & IIf(InStr(1, "|" & sListe, StrConv(sCouleur, vbUpperCase) & "|") > 0, "OK", "KO")
     
    End Sub
    On obtient alors
    BLeU : OK
    VertBleu : KO
    On peut bien-sûr adopter le même amendement pour la solution LIKE.

    Bon dimanche, et, comme dirait casefayere, doucement sur la sous-chaîne!

    PGZ

  12. #12
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Merci à tous.
    Problème résolu.
    Tout est bien.
    Cordialement.

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

Discussions similaires

  1. [3D] Comment savoir si un point est dans mon champ de vision
    Par patmaba dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 04/11/2018, 14h20
  2. Savoir si un point est dans un polygone.
    Par poly128 dans le forum Langage
    Réponses: 8
    Dernier message: 18/11/2008, 10h34
  3. Savoir si un caractère est dans une chaine
    Par flamel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/04/2008, 00h54
  4. [C#] Savoir où on en est dans le code
    Par padodanle51 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/07/2006, 15h39
  5. [jtable] Comment savoir si le curseur est dans la cellule?
    Par doudine dans le forum Composants
    Réponses: 2
    Dernier message: 23/01/2006, 17h34

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