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

Bonsoir,

Pas sur d'avoir d'avois compris ta demande donc je vais la reformuler à ma façon, dis moi si c'est bon :

>Si on a "Advanced / Anticipate / Released " alors on aura "1" (peu importe si "Retroplanning" ou "Working")
>Sinon (pas de "Advanced / Anticipate / Released")
>>> si on a un "(Working)" non précédé de "Retroplanning" alors 1 sinon 0
 
Dernière édition:
Je te propose

=OU(REGEX.TEST(F2;"(RELEASED|Anticipate|Advanced)";1);REGEX.TEST(F2;"(?<!Retroplanning )\(Working\)";1))*1

mais je ne sais pas si tu disposes de la fonction REGEX.TEST

Ps : J'ai cherché un moment le double espace entre "Retroplanning" et "(Working)" 😭
 
Dernière édition:
Je te propose

=OU(REGEX.TEST(F2;"(RELEASED|Anticipate|Advanced)";1);REGEX.TEST(F2;"(?<!Retroplanning )\(Working\)";1))*1

mais je ne sais pas si tu disposes de la fonction REGEX.TEST

Ps : J'ai cherché un moment le double espace entre "Retroplanning" et "(Working)" 😭
Bonjour Hecatonchire
J'ai testé mais il y a toujours la confusion avec "Working" quand j'ai "Retroplanning (working)" seul ou avec un "Cancelled" ou "Obsolete" je devrais avoir "vide" et non "1" mais c'est bon quand le (working) est sans le Retroplanning on a bien "1" dans la colonne "A"
Merci pour ton aide

Bambi35
 
Bonsoir Bambi, Hecatonchire,
Pourquoi pas :
VB:
=SI(OU(ESTNUM(CHERCHE("RELEASED";F2));ESTNUM(CHERCHE("Anticipate";F2));ESTNUM(CHERCHE("Advanced";F2));ESTNUM(CHERCHE("Working";F2)))=VRAI;"1";"")
Bonjour Sylvanu

La formule que tu bonne ne fait pas la distinction entre
PAT-XXXXXX/X - Retroplaning (Working)
PAT-XXXXXX/X - xxxxxxxx (Working)
Quand PAT-XXXXXX/X - Retroplaning (Working) est seul ou avec "Cancelled" ou "Obsolete" 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"

Merci pour ton aide

Bambi35
 
Dans quel message précèdent dans ce fil de discussion indiques tu un traitement particulier pour les termes "Cancelled" et "Obsolete" autre que les 2 derniers message (#6 et #7) ?
Je viens de voir qu'il y a une info tout en bas du fichier en cellule I30 mais c'est un peu léger ! De plus dans mon message #2, tu n'as pas mentionné cet "oublie" dans ma reformulation.

De plus, je ne comprend pas ton affirmation : "Retroplaning (Working) est seul ou avec "Cancelled" ou "Obsolete" il faut "Vide" "
Ma formule avec "PAT-011436/A - Retroplanning (Working) / PAT-012759/A - Voiture (Obsolete)" renvoie 0 (cf F30)

Par contre j'admet que ma formule renvoie 0 et non du vide. Si ce n'est que pour l'affichage, le format de nombre pour les cellules "#;#;;" permettra de masquer les 0 à l'écran/impression.
 
Re,
Peut être en traitant le cas de "Working" spécifiquement, avec :
VB:
=SI(ET(ESTNUM(CHERCHE("Retroplanning";F37))=FAUX;ESTNUM(CHERCHE("Working";F37)));1;SI(OU(ESTNUM(CHERCHE("RELEASED";F37));ESTNUM(CHERCHE("Anticipate";F37));ESTNUM(CHERCHE("Advanced";F37)))=VRAI;"1";""))
 

Pièces jointes

Dans quel message précèdent dans ce fil de discussion indiques tu un traitement particulier pour les termes "Cancelled" et "Obsolete" autre que les 2 derniers message (#6 et #7) ?
Je viens de voir qu'il y a une info tout en bas du fichier en cellule I30 mais c'est un peu léger ! De plus dans mon message #2, tu n'as pas mentionné cet "oublie" dans ma reformulation.

De plus, je ne comprend pas ton affirmation : "Retroplaning (Working) est seul ou avec "Cancelled" ou "Obsolete" il faut "Vide" "
Ma formule avec "PAT-011436/A - Retroplanning (Working) / PAT-012759/A - Voiture (Obsolete)" renvoie 0 (cf F30)

Par contre j'admet que ma formule renvoie 0 et non du vide. Si ce n'est que pour l'affichage, le format de nombre pour les cellules "#;#;;" permettra de masquer les 0 à l'écran/impression.
Bonjour Hecatonchire

Ta as raison je n'ai pas mentionné "Cancelled" ou "Obsolete" dans le #1 mais uniquement dans le fichier excel

Les Conditions ( entre parenthèses ) sont les suivantes
Si dans une cellule on a l’une de ces conditions
PAT-012634/A - Maison (Released)
PAT-018218/A - Planeur (Advanced)
PAT-008218/A - Avion (Anticipate)
Alors « 1 » en colonne « A »
Si dans une cellule on a
PAT-011436/A - Retroplanning (Working)
PAT-011400/A - Moto (Working)
Alors « 1 » en colonne « A » car le Retroplanning n'est pas prioritaire
Si dans une cellule on a
PAT-011400/A - Moto (Working)
Alors « 1 » en colonne « A »
Si dans une cellule on a
PAT-011436/A - Retroplanning (Working)
Alors « 0 » en colonne « A »
Si dans une cellule on a
PAT-010102/B - Bus (Cancelled)
PAT-012760/A - Tente (Obsolete)
Alors « 0 » en colonne « A »


J'ai mis à jour le fichier avec la formule de "Sylvanu" mais j'ai encore 2 erreurs en vert quand j'ai
PAT-011400/A - Moto (Working)
PAT-011436/A - Retroplanning (Working)
dans la même cellule
je devrais avoir "1" en colonne "A" car le Retroplanning n'est pas prioritaire

Merci encore de ton aide

Bambi35
 

Pièces jointes

Re,
Peut être en traitant le cas de "Working" spécifiquement, avec :
VB:
=SI(ET(ESTNUM(CHERCHE("Retroplanning";F37))=FAUX;ESTNUM(CHERCHE("Working";F37)));1;SI(OU(ESTNUM(CHERCHE("RELEASED";F37));ESTNUM(CHERCHE("Anticipate";F37));ESTNUM(CHERCHE("Advanced";F37)))=VRAI;"1";""))
Bonjour Sylvanu

J'ai essayé ta formule mais j'ai encore 2 erreurs en vert quand j'ai
PAT-011400/A - Moto (Working)
PAT-011436/A - Retroplanning (Working)
dans la même cellule
je devrais avoir "1" en colonne "A" car le Retroplanning n'est pas prioritaire

Merci

Bambi35
 
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 :
1759949374516.png
 
Dernière édition:
Bonsoir Sylvanu
Merci d’avoir essayé
@+++

Bambi35
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 Laurent950

Merci pour ton aide je regarde cela demain.
@++
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
725
Réponses
5
Affichages
155
Réponses
38
Affichages
994
Retour