Excel Fonctions SI + OU

Fermé
services15 - 10 févr. 2011 à 11:00
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 21 févr. 2011 à 17:17
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

C'est génial, merci beaucoup à tous les deux !!
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
14 févr. 2011 à 14:35
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
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 févr. 2011 à 10:14
Merci pour ce silence dédaigneux...
j'ai encore perdu mon temps à essayer d'aider
0
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 15/02/2011 à 14:44
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
J'essaye de suite ! merci
0
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 févr. 2011 à 09:57
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
15 févr. 2011 à 11:56
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
L'embarras du choix, merci beaucoup !!
0
Coucou
Erreur de compilation aux lignes
if Sheets("cherche").Cells(b, 1) & "*") =""
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
16 févr. 2011 à 09:28
pardon, erreur d'écriture,

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

Merci :)
0
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
16 févr. 2011 à 10:35
tu rajoutes then derière la ligne que je t'aif aite modifiée
if ... then
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 févr. 2011 à 18:52
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
ça a l'air absolument parfait !!

En plein tests, merci beaucoup !!
0
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
21 févr. 2011 à 17:17
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 févr. 2011 à 14:17
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
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 févr. 2011 à 15:57
normalement, j'ai fait les modifs pour que si ta colonne A est vide, ca fonctionne.
Ce n'est pas le cas?
0