Excel Fonctions SI + OU

Bonjour,

Je cherche à faire une formule qui soit du type:

Si cellule O4 contient mot1 ou mot2 ou mot3 alors afficher resultat1
sinon
si cellule O4 contient mot5 ou mot6 ou mot7 alors afficher resultat2
sinon
si cellule O4 contient mot9 ou mot10 ou mot11 alors afficher resultat3
sinon afficher "a vérifier"

Merci beaucoup de votre aide

J'ai cherché par moi meme mais je galère !!
(excel 2007 FRANCAIS)

30 réponses

Résumé de la discussion

Le problème décrit vise une formule Excel 2007 (FR) qui, dans O4, détecte si le contenu correspond à mot1/mot2/mot3 pour afficher resultat1, sinon si mot5/mot6/mot7 → resultat2, sinon si mot9/mot10/mot11 → resultat3, autrement "à vérifier". Une solution proposée prévoit une chaîne SI imbriquée avec OU pour vérifier chaque liste et renvoyer le résultat correspondant. Des alternatives plus flexibles incluent une macro VBA qui parcourt un tableau de critères sur une feuille et assigne les résultats, ou une approche par table de correspondance sur une feuille séparée avec une recherche, avec gestion éventuelle de la casse. Des conseils complémentaires recommandent d’uniformiser les textes en majuscules pour éviter les écarts et de clarifier le tableau de critères pour la maintenance.

Bobot (l’IA à votre service)
  1. Bonjour,

    ta formule :

    =si(Ou(O4="mot1";O4="mot2";O4="mot3")=vrai;"resultat1";si(Ou(O4="mot5";O4="mot6";O4="mot7")=vrai;"resultat1";si(ou(O4="mot9";O4="mot10";O4="mot11")=vrai;"resultat1";"a verifier")))
    2
    1. Melanie: Merci ça fonctionne sauf que !!

      Sauf que dans la cellule o4 de référence il n'y a pas qu'un seul mot mais plusieurs . Excel ne doit pas s'attendre a trouver uniquement "mot1", "mot2"... Mais une phrase contenant "mot1" ou "mot2"...

      Merci beauco^p
      0
  2. normalement, j'ai fait les modifs pour que si ta colonne A est vide, ca fonctionne.
    Ce n'est pas le cas?
    0
    1. Bonjour,

      il manque une ligne en fait :

      Sub cherche()

      i = 2
      Do While Cells(i, 15) <> "" 'va balayer ta colonne O
      b = 2
      Do While Sheets("cherche").Cells(b, 4) <> "" 'va balayer la feuille cherche, modifie cherche par ton nom de feuille si tu le modifies

      If Sheets("cherche").Cells(b, 1) = "" Then
      a=1
      else
      a = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 1) & "*")
      end if

      If Sheets("cherche").Cells(b, 2) = "" Then
      If a >= 1 Then
      Cells(i, 22) = Sheets("cherche").Cells(b, 4)
      b = 1000

      End If
      Else

      If Sheets("cherche").Cells(b, 3) = "" Then
      c = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 2) & "*")

      If a >= 1 And c >= 1 Then
      Cells(a, 22) = Sheets("cherche").Cells(b, 4)
      b = 1000
      End If
      end if

      d = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 3) & "*")
      If a >= 1 And c >= 1 And d >= 1 Then
      Cells(a, 22) = Sheets("cherche").Cells(b, 4)
      b = 1000
      End If
      End If
      End If
      b = b + 1

      Loop
      i = i + 1
      Loop
      End Sub
      0
      1. Coucou et merci !!

        Donc, le problème maintenant c'est que si la colonne A de la feuille "cherche" est vide, le résultat sera forcément vide (ça ne tient pas compte des coditions colonnes B et C !!).

        Merci :p
        0
    2. Contributeur
      re,

      ci joint
      https://www.cjoint.com/?3cqsNZlmITe

      pas trop de dégats à la macro avec mon système de blocs "règle de gestion" et quelques surprises à la sensibilité à la casse j'ai donc tout mis en Ucase(forcage en majuscules)

      en rouge italique les discordances qui sauf erreur de ma part (ca, je sais faire)
      viennent de "manques" dans la feuille dite "cherche"
      a noter une faute de frappe (ligne 398) qui cause un "other": "de f" au lieu de "def"
      0
      1. ça a l'air absolument parfait !!

        En plein tests, merci beaucoup !!
        0
      2. Ce qui est étrange c'est quand je lance la macro sans rien toucher au fichier, plein de "others" (en colonne W) deviennent "Defective collect" !! (exemple lignes 3, 4, 6, 14...).

        Alors que les conditions ne permettent pas de donner ce résultat, si je ne m'abuses !

        Merci Michel :)
        0
      3. Contributeur
        Je viens de re-re-re-re- essayer: je n'ai pas de problème avec le fichier que je t'avais transmis il y a quelques jours déjà; c'était supprimé chez moi compte tenu de ton silence...

        On te revoit la semaine prochaine ou dans 15 jours ?
        0
    3. tu rajoutes then derière la ligne que je t'aif aite modifiée
      if ... then
      0
      1. pardon, erreur d'écriture,

        remplace if Sheets("cherche").Cells(b, 1) & "*") =""
        par if Sheets("cherche").Cells(b, 1) =""
        0
        1. Alors si je fais la modif, toujours erreur : "attendu then ou goto".

          Merci :)
          0
        2. Coucou Mélanie,

          J'ai fait les modifs que tu as indiqué ci dessus Mais (!) du coup, ça donne toutes les lignes avec KCI comme résultats !!

          Voila la formule telle que je l'ai modifiée avec ton aide:

          Sub cherche()

          i = 2
          Do While Cells(i, 15) <> "" 'va balayer ta colonne O
          b = 2
          Do While Sheets("cherche").Cells(b, 4) <> "" 'va balayer la feuille cherche, modifie cherche par ton nom de feuille si tu le modifies
          If Sheets("cherche").Cells(b, 2) = "" Then
          If a >= 1 Then
          Cells(i, 22) = Sheets("cherche").Cells(b, 4)
          b = 1000

          End If
          Else
          If Sheets("cherche").Cells(b, 3) = "" Then
          c = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 2) & "*")
          If Sheets("cherche").Cells(b, 1) = "" Then
          a = 1
          End If
          If a >= 1 And c >= 1 Then
          Cells(a, 22) = Sheets("cherche").Cells(b, 4)
          b = 1000
          End If
          Else
          If Sheets("cherche").Cells(b, 1) = "" Then
          a = 1
          End If

          d = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 3) & "*")
          If a >= 1 And c >= 1 And d >= 1 Then
          Cells(a, 22) = Sheets("cherche").Cells(b, 4)
          b = 1000
          End If
          End If
          End If
          b = b + 1

          Loop
          i = i + 1
          Loop
          End Sub

          Merci !!
          0
      2. Re,

        copies et colls cette macro à la place de l'autre :
        Sub cherche()

        i = 2
        Do While Cells(i, 15) <> "" 'va balayer ta colonne O
        b = 2
        Do While Sheets("cherche").Cells(b, 4) <> "" 'va balayer la feuille cherche, modifie cherche par ton nom de feuille si tu le modifies
        If Sheets("cherche").Cells(b, 2) = "" Then
        If a >= 1 Then
        Cells(i, 22) = Sheets("cherche").Cells(b, 4)
        b = 1000

        End If
        Else
        If Sheets("cherche").Cells(b, 3) = "" Then
        c = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 2) & "*")
        if Sheets("cherche").Cells(b, 1) & "*") =""
        a=1
        end if
        If a >= 1 And c >= 1 Then
        Cells(a, 22) = Sheets("cherche").Cells(b, 4)
        b = 1000
        End If
        Else
        if Sheets("cherche").Cells(b, 1) & "*") =""
        a=1
        end if

        d = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 3) & "*")
        If a >= 1 And c >= 1 And d >= 1 Then
        Cells(a, 22) = Sheets("cherche").Cells(b, 4)
        b = 1000
        End If
        End If
        End If
        b = b + 1

        Loop
        i = i + 1
        Loop
        End Sub
        0
        1. L'embarras du choix, merci beaucoup !!
          0
        2. Coucou
          Erreur de compilation aux lignes
          if Sheets("cherche").Cells(b, 1) & "*") =""
          0
      3. Contributeur
        Merci pour ce silence dédaigneux...
        j'ai encore perdu mon temps à essayer d'aider
        0
        1. Hello Michel, rien de tel !

          Simplement, la pièce jointe que je télécharge via ton lien ne fournie pas un fichier excel mais un fichier zip très bizarre qui, j'ai l'impression, ne contient rien me concernant...

          C'est la raison pour laquelle je n'ai pas encore relevé ton message.
          Mais peut etre que ça vient de moi ...

          Merci en tout cas !
          0
        2. Contributeur
          Je ne t'ai pas envoyé un fichier zip !!!!
          mais un fichier Excel 2007 comportant une macro...

          Le minimum aurait été de le signaler Le + tôt possible car peut-être est tu sous XL<2007

          voici la macro:1 ou 2 modifs (dernière ligne col U au lieu de K)
          et adjonction de commentaires montrant la modélisation rapide des objets à traiter , regroupement en bloc des règles de gestion...
          ce pour faciliter la maintenance et/ou une évolution

          Tu en fait ce que tu veux....

          Option Explicit   
          
          Sub apprecier()   
          Dim derlig As Integer   
          Dim T_model, T_in, T_out   
          Dim c_in As Integer, c_m As Integer   
          Dim cond1 As Boolean, cond2 As Boolean, cond3 As Boolean   
          
          '-----------------MODELISATION OBJETS A TRAITER   
          With Sheets(2)   
              derlig = .Range("D1000").End(xlUp).Row   
              T_model = .Range("A2:D" & derlig)   
          End With   
          
          With Sheets(1)   
              derlig = .Range("K1000").End(xlUp).Row   
              T_in = .Range("K2:O" & derlig)   
              ReDim T_out(1 To derlig - 1)   
          End With   
          
          '-------ANALYSE   
          For c_in = 1 To UBound(T_in)   
              For c_m = 1 To UBound(T_model)   
                  ' -----gestion des conditions   
                      ' règle de gestion: si telle cellule feuille1colonne XXX est égale ou ressemble (like) à feuille2;celluleYYY ou la cellule feuille2 est vide==>VRAI   
                  cond1 = (UCase(T_in(c_in, 5)) Like "*" & UCase(T_model(c_m, 1)) & "*") Or IsEmpty(T_model(c_m, 1)) 'colonneO   
                  cond2 = (T_in(c_in, 1) = T_model(c_m, 2)) Or IsEmpty(T_model(c_m, 2)) 'colonne L   
                  cond3 = (T_in(c_in, 2) = T_model(c_m, 3)) Or IsEmpty(T_model(c_m, 3)) 'colonne K   
                  'si les 3 sont vraies alors tableau de sortie= analysis correspondant   
                  If cond1 And cond2 And cond3 Then   
                      T_out(c_in) = T_model(c_m, 4)   
                  End If   
              Next c_m   
              'cas non trouvé   
              If IsEmpty(T_out(c_in)) Then T_out(c_in) = "OTHER"   
          Next c_in   
          
          '------RESTITUTION PROVISOIRE COL W   
          Application.ScreenUpdating = False   
          Range("W2").Resize(UBound(T_out), 1) = Application.Transpose(T_out)   
          
          End Sub   
          


          edit: modifié colonnes dans modélisation
          0
        3. J'essaye de suite ! merci
          0
        4. Hello,

          Plusieurs commentaires:
          ligne 150 par exemple, ça devrait afficher KCI (car la cellule O contien KCI) hors ça affiche collect issue. (idem ligne 365 ça affiche Delivery issue au lieu de KCI)

          Est ce que ta "formule VBA" est liée a la feuille "cherche" comme Melanie, ou bien estce que tout est à partir de ta formule ?

          Merci de tes commentaires!
          0
        5. Contributeur
          Bonjour,

          je n'ai pas de lignes 150 ni 365

          Est ce que ta "formule VBA" est liée a la feuille "cherche" comme Melanie, ou bien estce que tout est à partir de ta formule ?

          que veux tu dire ?
          0
      4. HEllo Mélanie,

        Je confirme que pour les lignes 27 et 28 les conditions sont uniquement colonnes K et L et quelque soit le contenue O :)

        Merci beaucoup !
        0
        1. Re,

          je sias pourquoi.
          A la ligne 27 et 28 de la feuille cherche, tu n'as rien mis en colonne A. Ce qu'il fait que ma macro s'arrête à la 26 ème ligne.

          De plus, si les lignes 27 et 28 sont vides, je dois revoir le fonctionnement de ma macro.
          Peux-tu me confirmer que ces lignes de la feuille cherche doivent bien êtrevides?
          0
          1. C'est génial, merci beaucoup à tous les deux !!
            0
            1. Contributeur
              Re à tous
              A la bourre, mais d'autres occupations...
              Ci joint maquette
              http://www.cijoint.fr/cjlink.php?file=cj201102/cijevmL3b5.xlsm

              J'ai réuni les 2 feuilles dans un seul classeur pour faciliter l'étude on pourra le faire sans grosse difficulté (utilisation de variables tableaux) si tu le désires mais...

              la restitution se fait conne W pour comparer avec l'original: il y a quelques discordances que je vais regarder...

              Michel
              0
              1. Pour l'instant, ma macro copie les resultats dans la colonne à droite que tu as mise en jaune.
                Si ca te convient :
                remplaces partout :
                cells(i,22) par cells(i,21).
                0
                1. Coucou !!

                  Merci beaucoup !!

                  J'ai encore une question, j'ai ajouté des lignes du coté des conditions comme du côté du fichier principal mais par exemple, je n'ai aucune "Delivery issue" ni "Collecte issue" (40 réponses normalement juste pour Collecte issue).

                  Voila le fichier !

                  http://www.cijoint.fr/cjlink.php?file=cj201102/cij3oFuxPt.xls

                  Merci beaucoup !!
                  0
              2. Bonjour,

                J'ai posé ce fichier :
                http://www.cijoint.fr/cjlink.php?file=cj201102/cijKPWNZWa.xls

                Il contient une macro.
                Pour marcher :
                tu dois mettre une feuille chercher. tu peux modifier le nom, il faudra alors modifier la macro. Pour cela, Outils, macro, vba :

                Sub cherche()

                i = 2
                Do While Cells(i, 15) <> "" 'va balayer ta colonne O
                b = 2
                Do While Sheets("cherche").Cells(b, 1) <> "" 'va balayer la feuille cherche, modifie cherche par ton nom de feuille si tu le modifies
                a = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 1) & "*")
                If Sheets("cherche").Cells(b, 2) = "" Then
                If a >= 1 Then
                Cells(i, 22) = Sheets("cherche").Cells(b, 4)
                b = 1000

                End If
                Else
                If Sheets("cherche").Cells(b, 3) = "" Then
                c = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 2) & "*")
                If a >= 1 And c >= 1 Then
                Cells(a, 22) = Sheets("cherche").Cells(b, 4)
                b = 1000
                End If
                Else
                d = Application.WorksheetFunction.CountIf(Cells(i, 15), "*" & Sheets("cherche").Cells(b, 3) & "*")
                If a >= 1 And c >= 1 And d >= 1 Then
                Cells(a, 22) = Sheets("cherche").Cells(b, 4)
                b = 1000
                End If
                End If
                End If

                b = b + 1

                Loop
                i = i + 1
                Loop
                End Sub
                0
                1. Hello Michel et merci de t'interresser à mon problème !

                  Pour répondre à ta question: dans le post ou je donne les 2 liens vers pièces jointes: lorsque dans le fichier avec les conditions, si plusieurs colonnes sont remplies, (et seulement dans ce cas) il faut que s'affiche le résultat lié.

                  Exemple:
                  &SI(ET(NB.SI(O3;"*sh*")>1;K3="RCV/HOLD/REPAIRED")=VRAI;"shortage at repair Line";"")

                  Sauf que dans le cas de la formule ci dessous, elle ne fonctionne pas, je ne sais pas pourquoi (peut être que je ne l'ai pas insérée correctement dans la formule globale ci dessou).

                  Pour essaye de contrer les limites d'excel j'ai concaténé les formules au lieu de les imbriquer (mais j'ai peut etre fait des erreurs aussi, n'hésitez pas à les pointer du doigt !!)

                  =SI(NB.SI(O3;"*kci*");"KCI";"")&SI(NB.SI(O3;"*NTF* ");"NTF";"")&SI(NB.SI(O3;"*ano*")+NB.SI(O3;"*misma tch*")>0;"Anomaly at Repair Line";"")&SI(NB.SI(O3;"*cab*")+NB.SI(O3;"*misuse*" )+NB.SI(O3;"*quote*")+NB.SI(O3;"*trade*")+NB.SI(O3 ;"*mr*")>0;"misuse";"")&SI(NB.SI(O3;"*def*")>0;"De fective Collect";"")&SI(NB.SI(O3;"*short*")+NB.SI(O3;"*ets *")+NB.SI(O3;"*reactive*")+NB.SI(O3;"*delay*")+NB. SI(O3;"*eta*")>0;"Shortage at Repair Line";"")&SI(ET(NB.SI(O3;"*sh*")>1;K3="RCV/HOLD/REPAIRED")=VRAI;"shortage at repair Line";"")&SI(NB.SI(O3;"*complaint*")+NB.SI(O3;"*eq uivalence*")+NB.SI(O3;"*buyback*")+NB.SI(O3;"*elev ation*")+NB.SI(O3;"*compensation*")+NB.SI(O3;"*cpl t*")+NB.SI(O3;"*esca*")>0;"Complaints";"")

                  Par ailleurs il manque à la fin: si, rien de toutes les conditions indiquées: alors marquer "a vérifier manuellement" (par exemple).

                  coté VBA, je suis aussi évidemment preneur !!

                  Encore merci à vous !!
                  0
                  1. Pour l'isntant, non, je n'ai pas pu travailler sur ton fichier.
                    Je pense que je ne pourrais pas avant demain.
                    0
                    1. Pas de problèmes, merci de ta réponse, on en reparle tranquillement quand tu as eut le temps !

                      Bonne journée Mélanie !
                      0
                    2. Contributeur
                      Bonjour,
                      Excusez encore 1 fois l'incruste

                      j'essaie du VBA pour résoudre ton pb
                      dans ton tableau des conditions, s'agit-il de "OU" ou de "ET"
                      en effet
                      dans le post 24
                      tout ce qui est en statut trans et avec la lettre H colonne L doivent mentionner Collect issue)
                      dans tes premiers post, tu parles de telle condition OU telle condition?
                      c'est important pour l'algo

                      petit détail traduction de "à vérifier" en anglais ?
                      0
                  2. Est ce que tu as un feedback ?

                    Merci d'avance :)
                    0
                    1. http://www.cijoint.fr/cjlink.php?file=cj201102/cijMuIUDHP.xlsx

                      http://www.cijoint.fr/cjlink.php?file=cj201102/cijQIPlomt.xlsx

                      Voila les fichiers, dans l'un il ya le fichier dans lequel je dois travailler, un peu différent et plus complet que précédemment. (la formule est la pour remplir la colonne U, qui est remplie pour l'exemple)

                      Dans l'autre fichier, c'est les éléments a faire apparaitre avec les différentes conditions sinnéquanonnes.
                      Certaines cases sont vides, sous entendu aucune autre condition
                      (exemple ligne 27: tout ce qui est en statut trans et avec la lettre H colonne L doivent mentionner Collect issue)

                      Merciiii Mélanie !!
                      0
                      1. c faisable?
                        0
                        1. ok je vais essayer :)
                          0
                      2. Reprends ton fichier et dans une autre feuille, mets moi le tableau suivant:
                        colonne a : tes mots recherchés
                        colonne b : ce qu'il doit t'afficher
                        0
                        • 1
                        • 2