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 :

[VBA-E] Vérifier si une suite de caractère est présente


Sujet :

Macros et VBA Excel

  1. #1
    Mut
    Mut est déconnecté
    Membre averti Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Points : 307
    Points
    307
    Par défaut [VBA-E] Vérifier si une suite de caractère est présente
    Bonjour je souhaiterais savoir s'il existe (je crois que oui) une fonction qui permet de savoir si une suite de caractère est présente dans une cellule.

    Par exemple, j'ai une cellule qui contient une phrase :

    "ceci est un exemple...."

    et moi je souhaiterais extraire "est un" de cette cellule....mais comment le détecter et l'extraire ??

    Merci

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    En te servant de Instr pour savoir si ta chaîne de caractère existe dans ton texte
    En te servant de Right, Left, Mid, Len pour extraire, etc...
    Voir tout celà dans l'aide en ligne, avec exemples...
    C'est facile.

  3. #3
    Mut
    Mut est déconnecté
    Membre averti Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Points : 307
    Points
    307
    Par défaut
    Merci !

    Le probleme est pour extraire vu que le texte n'est jamais pareil et que je dois vérifier dans une colonne entière.en fait j'ai une phrase et dedans je peux avoir la chaine que je recherche.Mais de cette chaine là je ne veux que ce qui suit. exemple :

    AAAAAAAAA AAA AA XXX YYY AAAA BBBB
    AAABBB XXX YYY CCCC GGGG
    RRRRGGGG XXXYY UUUUUKLKLLLLLL

    Voici par exemple trois lignes différentes; je souhaiterais récupérer la chaine de caractère YY ou YYY à chaque fois.....alors je vois pas trop comment faire....

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    essai d'être plus clair sur la chaine que tu ve récupérer et ces caractéristiques... , comment tu fais pour la reconnaitre ?

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ben !

    Ceci à condition de ne pas avoir de Y ailleurs que dans ta chaine de YYY, sinon c'est sans solution.....

    Instr te permet d'avoir la position de la 1ère lettre de ta chaine YYY
    Mid tout ce qui vient depuis ce début, jusqu'à la fin (appelons cela titi)
    ensuite, ma foi, il va te falloir faire une boucle, puisque tu ne sais pas où s'arrête ta chaîne YY..
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    toto = ""
    tant que left(titi, 1) = "Y"
      toto = toto & left(titi, 1)
      titi = mid(titi, 2)
    fin de tant que
    Mais, puisque tu as également lu Len dans l'aide en ligne, rien ne t'empêche de faire autrement ... du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For I = 1 to len(titi)
      si mid(titi, 1) = "Y" alors
        toto =  toto & mid(titi,i,1)
      sinon
        exit for
      fin des si
    next I
    ou ce que tu peux inventer d'autre toi-même...
    C'est facile

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    j'ai toujours pas compris ce que vous voulez faire ... ton code il fait quoi jmfmarques ??
    si titi ne contient pas d'Y TOTO = ""
    si titi ne contient pas 1 'Y TOTO = "Y"
    si titi ne contient pas 2 'Y ou plus TOTO = "YY"

    ??

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    s'ilo n'y a pas de Y, instr... = 0 et titi = "" !

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Alors :
    pour la 1ère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Command1_Click()
      aaa = "AAAAAAAAA AAA AA XXX YYY AAAA BBBB"
     On Error Resume Next
      titi = Mid(aaa, (InStr(aaa, "Y")))
      err.clear
      toto = ""
      While Left(titi, 1) = "Y"
        toto = toto & Left(titi, 1)
        titi = Mid(titi, 2)
      Wend
      MsgBox toto
    End Sub
    testé.
    Reviens avec la 2ème...

    que voilà (testée aussi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Command1_Click()
    aaa = "AAAAAAAAA AAA AA XXX YYY AAAA BBBB"
    On Error Resume Next
    titi = Mid(aaa, (InStr(aaa, "Y")))
    err.clear
    For I = 1 To Len(titi)
      If Mid(titi, I, 1) = "Y" Then
        toto = toto & Mid(titi, I, 1)
      Else
        Exit For
      End If
    Next I
    MsgBox toto
    End Sub
    On en veut d'autres (et des meilleures ?...)

    ALLEZ, une 3ème (que je n'aime pas pour plusieurs raisons, même si elle parait plus facile) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
      aaa = "AAAAAAAAA AAA AA YYY CCC AAAA BBBB"
      toto = ""
      For i = 1 To Len(aaa)
        If Mid(aaa, i, 1) = "Y" Then toto = toto & Mid(aaa, i, 1)
      Next
      MsgBox toto
    End Sub

  9. #9
    Mut
    Mut est déconnecté
    Membre averti Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Points : 307
    Points
    307
    Par défaut
    Merci d'avoir répondu !!

    J'arrive à m'en approcher mais ce n'est pas encore tout a fait ça....je vais réexpliquer en essayant d'etre plus clair

    J'ai une colonne avec des cellules remplies avec un texte (pas le meme dans toutes les cellules)

    ex :

    en A1 : abcd5246ef ghijkl TEST 1 mnop545qrst
    en A2 : uvw541x ghijkl TEST 23 yzpjpjj6454mj
    en A3 : zgsdg56454qsg ghijkl TEST 154 sgdsgs644d

    etc...

    et donc ce que je souhaiterais faire c'est de récupérer le chiffre après la chaine de caractère "TEST" qui elle ne change pas.

    En résumé, je cherche à extraire le numéro dans une autre cellule qui se trouve après le mot TEST.

    Merci

  10. #10
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Alors là...
    Tu avais peut-être mal exposé ton problème, mais n'en parlons plus...
    L'examen des seuls exemples ci-dessus te montre bien comment utiliser Instr, Mid, etc....
    Ce sont ces méthodes que tu dois mettre en oeuvre pour faire ce que tu veux qui, de surcroît, est plus simple encore après tes explications nouvelles.
    EDIT : Isnumeric (aide en ligne, te facilitera encore plus la tâche)
    par contre :
    je cherche à extraire le numéro dans une autre cellule qui se trouve après le mot TEST
    n'est pas clair

  11. #11
    Mut
    Mut est déconnecté
    Membre averti Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Points : 307
    Points
    307
    Par défaut
    en fait après le texte "TEST" se trouve un numéro qui se compose de 2 ou 3 chiffres et c'est lui que je dois récupérer et mettre dans une cellule à part....

    Je vais essayer de voir avec tes exemples ci dessus si je peux faire quelque chose

    Merci beaucoup !

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    tiens ... voilà ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function ExtraitNombre(st As String)
     Dim iPos As Integer
     Dim stCh As String ' Chaine cherché
     stCh = "TEST"
     iPos = InStr(1, st, stCh) + Len(stCh)
     ExtraitNombre = Val(Mid(st, iPos, 4)) 'Récupére les 4 cractéres suivant le mot TEST...
     
     End Function
     
    Sub test()
         MsgBox ExtraitNombre("abcd5246ef ghijkl TEST 1 mnop545qrst ")
         MsgBox ExtraitNombre("uvw541x ghijkl TEST 23 yzpjpjj6454mj ")
         MsgBox ExtraitNombre("zgsdg56454qsg ghijkl TEST 154 sgdsgs644d ")
     End Sub
    tu peu aussi placer une formule en B2...

  13. #13
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Héla ! ce ne sont pas toujours 4 caractères ...

    Regarde, Mut : bien qu'il y ait mieux à faire, je vais me contenter, tout simplement, d'utiliser l'un ou l'autre des 2 1ers exemples donnés par mon message précédent (quand tu nous a fait travailler sur des Y). Je vais simplement remplacer "Y" par "TEST" pour évaluer titi. Bien sur : je vais faire démarrer titi non pas au début mais à la fin (+ 4) du mot "TEST" et, bien sur, je vais ôter l'espace éventuellement présent (Trim)
    et plus bas, faire mon test avec Isnumeric au lieu de le faire sur "Y", ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Command1_Click()
      aaa = "zgsdg56454qsg ghijkl TEST 154 sgdsgs644d"
      On Error Resume Next
      titi = Trim(Mid(aaa, (InStr(aaa, "TEST") + 4)))
      Err.Clear
      toto = ""
      While IsNumeric(Left(titi, 1))
         toto = toto & Left(titi, 1)
         titi = Mid(titi, 2)
      Wend
      MsgBox toto
    End Sub
    Voilà, Mut et je répète qu'il y a mieux à faire. J'ai voulu ici simplement te montrer que tu avais déjà ce qu'il fallait entre les mains.

  14. #14
    Mut
    Mut est déconnecté
    Membre averti Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Points : 307
    Points
    307
    Par défaut
    Merci beaucoup a vous deux !

    bbil en effet le nombre de caractère peut évoluer, mais je garde quand meme le bout de code qui pourra certainement me servir

    jmfmarques ton code fonctionne très bien! c'est parfait merci beaucoup !

  15. #15
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Merci pour ton merci, mais...
    Si après ta chaine numérique à extraire, le mot suivant ne risque pas de commencer par un chiffre...
    Il suffit de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    aaa = "zgsdg56454qsg ghijkl TEST 154 sgdsgs644d"
    on error resume next  '---- pour le cas où le mot "TEST" serait absent !!!
    toto = Str(Val(Trim(Mid(aaa, (InStr(aaa, "TEST") + 4))))) '---str uniquement si tu veux retransformer en texte, sinon : pas nécessaire
    err.clear
    msgbox toto

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

Discussions similaires

  1. [Batch] Vérifier si une chaine de caractères est présente dans un fichier
    Par jp_____ dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 23/08/2013, 10h40
  2. [WD17] vérifier si une chaîne de caractère est vide
    Par jer64 dans le forum WinDev
    Réponses: 5
    Dernier message: 13/01/2013, 02h09
  3. Vérifier si une chaîne de caractère est contenu dans une autre
    Par Marvelll dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 22/02/2010, 14h54
  4. Réponses: 2
    Dernier message: 20/10/2007, 15h54
  5. Vérifier qu'une chaine de caractère est bien présente
    Par kilian67 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/09/2007, 18h10

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