Microsoft 365 Recherche de plusieurs critères dans une cellule

  • Initiateur de la discussion Initiateur de la discussion Bambi35
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bambi35

XLDnaute Occasionnel
Bonjour à tous
Je viens vers vous car je n'arrive pas à trouver la solution à mon problème.
J'ai en colonne "F" avec différentes informations
Si en colonne "F" on a l'information "Advanced / Anticipate / Released " on aura "1" en colonne "A " sinon vide.
Pour cela j'ai réussi avec la formule SI et OU
Mais le problème que j'ai c'est quand j'ai "working " dans le titre
PAT-XXXXXX/X - Retroplaning (Working)
PAT-XXXXXX/X - xxxxxxxx (Working)
Il y a 2 choix et selon le texte je n'ai pas la même information a mettre dans la colonne "A"


Quand PAT-XXXXXX/X - Retroplaning (Working) est seul il faut "Vide" en "colonne "A"
Quand PAT-XXXXXX/X - xxxxxxxx (Working) est seul il faut "1" en "colonne "A"
et si j'ai les 2
PAT-XXXXXX/X - Retroplaning (Working) est avec PAT-XXXXXX/X - xxxxxxxx (Working) il faut "1" en colonne "A"

Je ne sais pas comment pour faire la distinction pour éviter les 5 lignes en jaune ou j'ai "vide" en colonne "A" alors que je devrais avoir "1"
Merci pour votre aide

Ci-joint le fichier avec un tableau donnant plus d'info.

Bambi35
 

Pièces jointes

Bonjour,

La formule que je t'ai fournis au poste #4 me semble fonctionner mais il y avait le piège de bien ajouter 2 espaces après le mots planning dans "(?<!Retroplanning )\(Working\)" comme indiqué en PS.

Pas de chance, lors du Coller du texte de la fonction dans le message, le double espace a été automatiquement supprimé !
VB:
=OU(REGEX.TEST(F2;"(RELEASED|Anticipate|Advanced)";1);REGEX.TEST(F2;"(?<!Retroplanning  )\(Working\)";1))*1

Ca m'apprendra à utiliser la balise </> pour poster mes formules (là pas de suppression des espaces en double 😰

J'ai mis ma formule en colonne G
 

Pièces jointes

Bonsoir @Bambi35 , @sylvanu , @Hecatonchire

Il faut commencer par construire une fonction personnalisée VBA pour détecter ce qui est bon ou faux dans un premier temps.
Ensuite, une fois les résultats validés, il faudra construire une formule Excel complexe.

La fonction Excel serait celle-ci :
Code:
=SI(OU(
    NB.SI(F2;"*PAT-012634/A - Maison (Released)*")>0;
    NB.SI(F2;"*PAT-018218/A - Planeur (Advanced)*")>0;
    NB.SI(F2;"*PAT-008218/A - Avion (Anticipate)*")>0;
    ET(NB.SI(F2;"*PAT-011436/A - Retroplanning  (Working)*")>0; NB.SI(F2;"*PAT-011400/A - Moto  (Working)*")>0);
    NB.SI(F2;"*PAT-011400/A - Moto  (Working)*")>0
);1;SI(OU(
    NB.SI(F2;"*PAT-011436/A - Retroplanning  (Working)*")>0;
    NB.SI(F2;"*PAT-010102/B - Bus (Cancelled)*")>0;
    NB.SI(F2;"*PAT-012760/A - Tente (Obsolete)*")>0
);0;""))

La fonction personnalisée VBA serait la suivante :
VB:
Function Priorite(cell As Range) As Variant
    Dim txt As String

    ' Récupérer le contenu de la cellule, supprimer les retours à la ligne
    txt = Replace(cell.Value, vbLf, " ")

    ' Condition 1 : si l'un des trois textes prioritaires est présent
    If InStr(txt, "PAT-012634/A - Maison (Released)") > 0 _
       Or InStr(txt, "PAT-018218/A - Planeur (Advanced)") > 0 _
       Or InStr(txt, "PAT-008218/A - Avion (Anticipate)") > 0 Then
        Priorite = 1
        Exit Function
    End If

    ' Condition 2 : si "PAT-011436/A - Retroplanning (Working)" ET "PAT-011400/A - Moto (Working)" sont présents
    If InStr(txt, "PAT-011436/A - Retroplanning  (Working)") > 0 _
       And InStr(txt, "PAT-011400/A - Moto  (Working)") > 0 Then
        Priorite = 1
        Exit Function
    End If

    ' Condition 3 : si "PAT-011400/A - Moto (Working)" seul
    If InStr(txt, "PAT-011400/A - Moto  (Working)") > 0 Then
        Priorite = 1
        Exit Function
    End If

    ' Condition 4 : si "PAT-011436/A - Retroplanning  (Working)" seul
    If InStr(txt, "PAT-011436/A - Retroplanning  (Working)") > 0 _
        And Len("PAT-011436/A - Retroplanning  (Working)") < Len(txt) Then
        Priorite = ""
        Exit Function
    ElseIf InStr(txt, "PAT-011436/A - Retroplanning  (Working)") > 0 Then
        Priorite = 0
        Exit Function
    End If

    ' Condition 5 : si "PAT-010102/B - Bus (Cancelled)" ou "PAT-012760/A - Tente (Obsolete)" présents
    If InStr(txt, "PAT-010102/B - Bus (Cancelled)") > 0 _
       Or InStr(txt, "PAT-012760/A - Tente (Obsolete)") > 0 Then
        Priorite = 0
        Exit Function
    End If

    ' Par défaut, vide
    Priorite = ""
End Function

Rappel des conditions :
Regarde la pièce jointe 1223324
Bonsoir Laurant950
Merci pour ta réponse . Dans ma demande je donne quelque exemple.

La numérotation Change PAT-010252/A etc
la zone du titres changes
Seul la fin de la ligne aura soit ==> Released Advanced Anticipate Working Cancelled Obsolete.
Dans une cellule on peux avoir 10 lignes différente mais uniquement avec Released Advanced Anticipate Working Cancelled Obsolete à la fin.
Et le problème est pour distingue les lignes avec Retroplanning (Working) qui donne "0" et celle avec des titres qui change et (Working) qui donne "1"

J'ai essaye le VBA sans réussite j'ai du faire une erreur. Je ne suis pas un expert;
Merci encore

Cordialement
 
Bonjour,

La formule que je t'ai fournis au poste #4 me semble fonctionner mais il y avait le piège de bien ajouter 2 espaces après le mots planning dans "(?<!Retroplanning )\(Working\)" comme indiqué en PS.

Pas de chance, lors du Coller du texte de la fonction dans le message, le double espace a été automatiquement supprimé !
VB:
=OU(REGEX.TEST(F2;"(RELEASED|Anticipate|Advanced)";1);REGEX.TEST(F2;"(?<!Retroplanning  )\(Working\)";1))*1

Ca m'apprendra à utiliser la balise </> pour poster mes formules (là pas de suppression des espaces en double 😰

J'ai mis ma formule en colonne G
Bonsoir Hecatonchire

Merci pour ton retour

J'ai regardé le fichier et c'est la résultat attendu. Je vais donc passer par 3 colonnes pour faire le trie des lignes du tableau

Merci encore

Cordialement Bambi35

@+++
 
"Je vais donc passer par 3 colonnes pour faire le trie des lignes du tableau" => je pense/espère que cela n'a rien à voir avec ma formule ?!

J'ai laissé la formule en colonne A pour vérification mais elle ne sert à rien pour la formule en colonne G
J'ai fait une formule en H servant à contrôler le résultat de la formule en colonne G par rapport à celle de la colonne A mais elle est aussi inutile à la formule en colonne G
 
"Je vais donc passer par 3 colonnes pour faire le trie des lignes du tableau" => je pense/espère que cela n'a rien à voir avec ma formule ?!

J'ai laissé la formule en colonne A pour vérification mais elle ne sert à rien pour la formule en colonne G
J'ai fait une formule en H servant à contrôler le résultat de la formule en colonne G par rapport à celle de la colonne A mais elle est aussi inutile à la formule en colonne G
Ok merci de l'info

@++++
Bambi35
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
25
Affichages
726
Réponses
5
Affichages
155
Réponses
38
Affichages
994
Retour