Excel Fonctions SI + OU

services15 -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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)
A voir également:

30 réponses

services15
 
C'est génial, merci beaucoup à tous les deux !!
0
melanie1324 Messages postés 1561 Statut Membre 155
 
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
services15
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Merci pour ce silence dédaigneux...
j'ai encore perdu mon temps à essayer d'aider
0
services15
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
services15
 
J'essaye de suite ! merci
0
services15
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
melanie1324 Messages postés 1561 Statut Membre 155
 
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
services15
 
L'embarras du choix, merci beaucoup !!
0
services15
 
Coucou
Erreur de compilation aux lignes
if Sheets("cherche").Cells(b, 1) & "*") =""
0
melanie1324 Messages postés 1561 Statut Membre 155
 
pardon, erreur d'écriture,

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

Merci :)
0
services15
 
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
melanie1324 Messages postés 1561 Statut Membre 155
 
tu rajoutes then derière la ligne que je t'aif aite modifiée
if ... then
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
services15
 
ça a l'air absolument parfait !!

En plein tests, merci beaucoup !!
0
services15
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
melanie1324 Messages postés 1561 Statut Membre 155
 
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
services15
 
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
melanie1324 Messages postés 1561 Statut Membre 155
 
normalement, j'ai fait les modifs pour que si ta colonne A est vide, ca fonctionne.
Ce n'est pas le cas?
0