Condition multiple

cadar95 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
cadar95 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je cherche à remplir une case par Y ou N en fonction de la valeur de 2 autres cellules.

Par exemple :
A B C

1 Mathieu Aussi manager
2
3 Jean Aussi directeur

J'aimerais donc remplir les cellules de la colonne B en fonction des cellules en A et C.
Pour cela j'aimerais que mon programme repère dans la même fonction si ma cellule est non vide (en A) et si La cellule contient le mot Aussi (en B)

J'ai essayé d'utiliser de nombreuse fonction en passant par if instr, Ucase, range.texte ou range.value like mais sans succès le programme ne détecte pas ...

Jai aussi essaye de faire un if en double condition avec un and sans succès ...

Auriez-vous des idées pour m'éclaircir ?

Merci !

6 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Option Explicit
'macro d'appel
Sub maMacro()
    MsgBox OK(Range("B6"))
End Sub

Private Function OK(Target As Range) As String
Dim Sont_Dans As Boolean
    With Target
        Sont_Dans = .Offset(0, -1) <> "" And InStr(UCase(.Offset(0, 1)), "AUSSI") > 0
    End With
    OK = IIf(Sont_Dans = 0, "N", "Y")
End Function


Appel dans la feuille, en B6 :
=OK(B6)

0
cadar95 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta réponse !

Cela semble fonctionné mais j'ai du mal à comprendre l'appel dans la feuille.
J'aimerais également mettre dans un if cette fonction car j'ai d'autres conditions
Comment faire ?
Appeler La fonction dans le if ?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
mais j'ai du mal à comprendre l'appel dans la feuille.
comme je t'ai fait une fonction, et pas une Sub, tu peux l'utiliser directement comme une formule de calcul.

J'aimerais également mettre dans un if cette fonction car j'ai d'autres conditions
Change le code d'appel "maMacro" :
Option Explicit
'macro d'appel
Sub maMacro()
If TonTest Then
    MsgBox OK(Range("B6"))
End If
End Sub

Private Function OK(Target As Range) As String
Dim Sont_Dans As Boolean
    With Target
        Sont_Dans = .Offset(0, -1) <> "" And InStr(UCase(.Offset(0, 1)), "AUSSI") > 0
    End With
    OK = IIf(Sont_Dans = 0, "N", "Y")
End Function


Mais sans plus de précision sur ton(es) test(s) complémentaire(s), je ne peux rien de plus...
0
cadar95 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Mon Excel est constitué de 3 colonnes
Colonne À :avec des noms, cellules vide ou cellules
colonne B que je cherche à remplir par du vide, Y, N
Colonne C: remplis par des case vide, des cellules contenant Aussi manager Aussi directeur, Aussi producteur etc

Jai donc plusieurs conditions je vais les énumérer de la plus simplement à la plus compliqué

Si ma cellule en A et C est vide alors B est vide
Si ma cellule est vide en A et contient en C un texte alors B est vide
Si ma cellule contient du texte en A et vide en C alors B est rempli par Y
Si ma cellule contient du texte en A et contient le mot "Aussi" en C alors B est rempli par N

J'espère que ça ta éclairci sur ce que je cherche à faire ...

Merci pour ton aide
0

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

Posez votre question
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Il y a plus simple, mais j'ai préféré détailler pour une meilleure compréhension...

Sub AppelFonction()
Dim i&
'pour les lignes de 1 à 10
    For i = 1 To 10
        Range("B" & i) = OK(Range("B" & i))
    Next i
End Sub

Private Function OK(T As Range) As String
    'si la cellule ciblée n'est pas située Colonne B
    If T.Column <> 2 Then MsgBox "Le Range : " & T.Address & " n'est pas en colonne B": Exit Function
    'Si ma cellule en A et C est vide alors B est vide
    'Si ma cellule est vide en A et contient en C un texte alors B est vide
    If T.Offset(0, 1).Value = "" Then OK = "": Exit Function
    'Si ma cellule contient du texte en A et vide en C alors B est rempli par Y
    If T.Offset(0, -1) <> "" And T.Offset(0, 1).Value = "" Then OK = "Y": Exit Function
    'Si ma cellule contient du texte en A et contient le mot "Aussi" en C alors B est rempli par N
    If T.Offset(0, -1) <> "" And InStr(UCase(T.Offset(0, 1)), "AUSSI") > 0 Then OK = "N"
End Function

0
cadar95 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Le code a l'air clair mais le programme semble bloqué au niveau du premier if de la fonction ... le numéro 2 correspond à la colonne B ?
0