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

Excel Discussion :

Tester la présence de plusieurs chaines de caracteres dans une cellule


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 27
    Points
    27
    Par défaut Tester la présence de plusieurs chaines de caracteres dans une cellule
    Bonjour,

    Je sèche sur l'utilisation d'une formule permettant de tester la présence de plusieurs chaines de caractères dans une cellule.

    J'arrive a le faire sur une seule chaine, mais pas sur une plage de chaine.



    Imaginons 2 feuilles d'un classeurs Excel, pour tester des adresses de personnes

    Feuille 1 : source de valeurs à trouver dans la 2nde feuille.

    de A1 à A4, quatre chaines dont 1 avec un nom composé (souvent le cas dans 1 adresse)
    A1 : capitaine martin
    A2 : capitaine michel dupont
    A3 : de la lumiere
    A4 : du moulin

    je n'inclue pas les termes rue/avenue/etc, étant donné qu'ils peuvent être abrégé.

    Feuille 2 : Liste d'adresses de personnes (environ 200)


    il faut que je teste les cellules de la colonnes Adresses (colonne C) afin de vérifier la présence des chaines de la 1ere feuille.

    j'arrive à obtenir le résultat que désire, mais que pour une seule chaine de la feuille 1 ...


    Exemple de formule que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NON(ESTERREUR(CHERCHE(Feuil1!$A$1;C2)));"Vrai";"Faux")
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(TROUVE(Feuil1!$A$1;C2));"Faux";"Vrai")
    qui arrive au même résultat, mais ne suffit pas, puisque seule la cellule A1 est en source


    J'ai essayé de l'imbriquer avec une formule du genre :
    =NB.SI(Feuil1!$A$1:$A$4;C1)>0
    Mais il faut que le contenu soit identique et ne contienne pas d'autres caractères...

    J'ai pensé à split le contenu de la cellule et de tester les chaines séparées par un espace, mais une adresse peut avoir plusieurs "nom" et c'est cet ensemble qu'il faut tester.

    Merci pour votre aide, je suis preneur de tout piste si vous avez des idées ^^

    A bientôt

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Zelnist et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI( ESTERREUR(TROUVE(Feuil1!$A$1;C2)*TROUVE(Feuil1!$A$2;C2)*TROUVE(Feuil1!$A$3;C2)*TROUVE(Feuil1!$A$4;C2)); "pas good";"C'est bon")
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 27
    Points
    27
    Par défaut
    Salut Gorfael,

    Merci pour cette réponse, ça marche bien dans un premier temps.

    Le soucis c'est que ma source peut être variable et j'aurais aimé utiliser une plage de cellule, mais c'est pas simple ^^

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Zelnist et le forum
    Quelle plage ? et tu veux récupérer quoi ? Là, on ne sait que si la cellule contient les 4.
    Est-ce que ta plage peut avoir plus d'une valeur correspondant aux 4 critères ?
    A+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 27
    Points
    27
    Par défaut
    Oui tout à fait, quand je parle de plage de valeur, c'est pour la source.

    En gros, sur la feuille 1, je peux avoir 4 valeurs comme dans l'exemple, comme je peux en avoir une une trentaine, et il serait difficile de les imbriquer bout à bout comme dans le code ci-dessus.

    D'où l'idée de plage genre A1:A30, à comparer avec la feuille 2 ; et si l'une des valeurs de la plage de la feuille 1 est présente dans l'autre plage de valeurs de la feuille 2, afficher vrai.

    En gros, le but est de comparer 2 listes.

    a+ et bonne nuit/journée

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Zelnist et le forum
    Par formule, ça va être galère, mais par macro, c'est relativement facile. Par contre il faut des données précise :
    Nom de la feuille de recherche
    plage des critère de la recherche
    Plage des retours (et quels retour : l'adresse, l'intitulé complet, Les colonnes qu'on doit recopier ?)

    Nom de la feuille où on recherche
    plage de la feuille où on recherche
    A+

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 27
    Points
    27
    Par défaut
    bonjour,

    ahh oui en macro donc !

    La feuille1 se nomme "critere" avec plusieurs cellules de chaines de caractère (colonne "A"), que l'on désire trouver sur la colonne "C" de la feuille "listing".

    le top serait d'indiquer sur la colonne "G" de la feuille "listing", sur la même ligne de l'adresse testée, un "Oui" ou "Non" suivant si la condition est remplie.

    Ou si c'est plus simple, de recopier la ligne satisfaisant la condition sur une feuille en plus, que l'on pourrait nommer 'resultat'.

    Complexe mine de rien la recherche de données

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Zelnist et le forum
    Une proposition avec les renseignements donnés
    listing :
    zone de recherche C
    retour résultat : G+MFC

    critère :
    zone de critère A1:A4 : l'ordre n'importe pas, un caractéres peut être remplacé par ? et une chaîne par *
    Bouton lance la macro de recherche qui est dans le module associé :
    Clic-droit sur le nom de l'onglet => Menu contextuel>>Visualiser le code

    Résultat :
    colonne A : les cellules répondant aux critères
    colonne B : l'adresse relative des cellules

    Les cellules comportant des résultats se remettent à vide directement en lançant une nouvelle recherche
    A+

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    J'ai regardé la macro et ça a l'air super !

    J'ai un souci cependant, il ne se passe rien en appuyant sur le bouton recherche. Pourtant, j'ai bien autorisé les macros à s'exécuter.

    En regardant le code, le nombre de chaines de caractères situées dans la feuille "critère" a l'air fixe, ici 4.

    Est-il possible de détecter automatiquement la dernière cellules de la colonne A, et de boucler ensuite ?
    ça permettrait de ne pas avoir à retaper les lignes de codes supplémentaires, s'il y a 30 chaines dans la feuille "critère" au lieu des 4 initiales

    Merci en tout cas, c'est une piste intéressante à étudier :o)

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Zelnist et le forum
    J'ai un souci cependant, il ne se passe rien en appuyant sur le bouton recherche. Pourtant, j'ai bien autorisé les macros à s'exécuter
    Vérifie que tu n'est pas en mode "création" sur la barre d'outils "boîte à outils contrôle". Sinon, je ne sais pas, ça provient peut-être d'une incompatibilité de version.
    Récrée un bouton et Voilà la macro (attention au titre), modifiée pour un nombre de critères indéfinis en colonne A :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub CommandButton1_Click()
    'Déclarations =========================================
    Dim X As Long
    Dim Cel As Range
    Dim F_L As Worksheet, F_R As Worksheet
    Dim Tab_R() As String
    Dim Flg As Boolean
    'MEI ==================================================
    Set F_L = Sheets("listing")
    Set F_R = Sheets("resultat")
    F_R.Range("A:B").Clear
    'Recherche des critères -------------------------------
    X = Range("A" & Rows.Count).End(xlUp).Row
    ReDim Tab_R(1 To X)
    For X = 1 To UBound(Tab_R)
        Tab_R(X) = Range("A" & X)
    Next X
    'Traitement -------------------------------------------
    For Each Cel In F_L.Range(F_L.[C1], F_L.Range("C" & F_L.Rows.Count).End(xlUp))
        Flg = True
        For X = 1 To UBound(Tab_R)
            If Not (Cel Like "*" & Tab_R(X) & "*") Then
                Flg = False
                Exit For
            End If
        Next X
        If Flg Then
            Cel.Offset(0, 4) = "OK"
            Cel.Copy F_R.Range("A" & F_R.Rows.Count).End(xlUp)(2)
            F_R.Range("B" & F_R.Range("A" & F_R.Rows.Count).End(xlUp).Row) = Cel.Address(0, 0)
        Else
            Cel.Offset(0, 4).ClearContents
        End If
    Next
    End Sub
    A+

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 27
    Points
    27
    Par défaut
    Bonjour à tous,

    la macro fonctionne bien sur mon portable.

    J'ai testé c'est quasi parfait :o)

    Je me demande s'il est possible d'ajouter une option cependant :

    Lors de la recherche, les cellules sélectionnées sont celles répondant à tous les critères saisis dans l'onglet du même nom. Serait-il possible d'ajouter une option permettant d'obtenir toutes les cellules remplissant au moins une des conditions ?

    pour reprendre l'exemple du fichier :

    en critères : 'h' en A1 et 'f' en A2.
    Le résultat actuel est uniquement les cellules comprenant les 2 caractères.

    Est-il possible d'avoir toutes les cellules contenant h ou f , au lieu de h et f ?

    Le top serait en dessous du bouton "Recherche" d'intégrer un bouton d'option, ou une case à cocher, pour choisir entre "et" ou "ou" la façon de filtrer le listing ("tous les critères", ou "au moins un des critères").

    Ou peut être plus simple avec 2 boutons de recherches :
    [ Recherche - type : Et ]
    [ Recherche - type : Ou ]
    lançant chacun le code associé

    Merci en tout cas Gorfael d'avoir consacré du temps, ce système me sera très pratique dans mes activités quotidiennes :o)


    Edit du 16/03/09 : J'ai pu à l'aide de 2 boutons adapter le code et obtenir le résultat désiré ci-dessus. Merci encore Gorfael pour cette aide précieuse
    Longue vie à ce forum et à ses membres

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

Discussions similaires

  1. [E-07] extraire chaine de caracteres dans une cellule
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/03/2009, 17h25
  2. [Tableaux] passer une chaine de caracteres dans une URL ?
    Par isa150183 dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2008, 15h06
  3. problem de chaine de caractere dans une structure
    Par lenetfm dans le forum Débuter
    Réponses: 11
    Dernier message: 18/04/2008, 08h25
  4. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 09h09
  5. Réponses: 2
    Dernier message: 04/11/2005, 11h35

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