IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Formule matricielle booléenne


Sujet :

Excel

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Par défaut Formule matricielle booléenne
    Bonjour à tous,

    Je me retrouve avec un tableau de produits répondant ou non à une 50aine de critères, je souhaite réaliser moi-même un filtre sur ces critères. avec une fonction ou :
    Où la ligne 1:1 contient les critères souhaités par le filtre et la ligne 2:2 contient les critères de l'appareil à filtrer

    .............. |Critère 1|Critère 2|Critère n | Resultat
    Filtre ...... | Oui | Oui | Non
    Appareil 1 | Oui | Non | Non | 0
    Appareil 2 | Oui | Oui | Non | 1


    Je peux le faire par cette formule =and(or(A1=A2;A2);or(B1=B2;B2);or(C1=C2;C2); ... mais avec 50 critères c'est long et sur 200 appareils, ça n'est pas très optimisé...


    J'ai essayé de faire {=or(A1:AZ1=A2:AZ2;A2:AZ2)}, mais le résultat est toujours vrai
    et {=A1:AZ1=A2:AZ2} donne toujours vrai, même si des valeurs de la ligne 1 ne correspondent pas à celles de la ligne 2
    Edit : {=AND(X5:AC5=X7:AC7)} me permet de valider 3 des 4 états. Il me manque le OR(X7:AC7)
    Sauriez-vous m'aider à "matricialiser" la première formule ?


    PS : Excel 2013 EN

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bonjour,
    Plutôt que d'utiliser des formules : utilise les filtres avancés !

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Par défaut
    Bonjour riaolle,

    Merci pour ta proposition, je vais tenter ça !

    Par ailleurs, si quelqu'un a la solution par formule matricielle, ça peut être intéressant de la connaître

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par 7ider5 Voir le message
    Par ailleurs, si quelqu'un a la solution par formule matricielle, ça peut être intéressant de la connaître
    Les essais de formule matricielle avec les opérateurs logiques ET , OU sont voués à l'échec car ces deux opérateurs "dysfonctionnent" dès que l'on veut les employer dans une formule matricielle. Il faut donc chercher des formules de remplacement de ces opérateurs logiques.
    Je suppose que les valeurs de comparaison pour les différents critères sont en A1 : AZ1 pour le filtre et en A2 : AZ2 pour l'appareil à contrôler sous la forme de valeurs numériques 1 , 0 associées aux valeurs logiques VRAI , FAUX plutôt que sur la forme "oui" , "non" qui obligent à manipuler des chaines de caractères.

    Le remplacement habituel des opérateurs logiques ET , OU est l'utilisation des opérateurs arithmétiques * (ou encore la fonction PRODUIT) et + (ou encore la fonction SOMME) à condition de remplacer les valeurs logiques VRAI , FAUX par les valeurs numériques associées 1 , 0.
    On peut ainsi écrire la formule matricielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = 1 * ( PRODUIT( ($A$1 : $AZ$1 = A2 : AZ2) + A2 : AZ2 ) > 0 )
    à valider par Ctrl + Maj + Entrée.
    On peut aussi écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = MIN ( PRODUIT( ($A$1 : $AZ$1 = A2 : AZ2) + A2 : AZ2 ); 1 )
    toujours validée par Ctrl + Maj + Entrée.

    Pour montrer qu'il y d'autres possibilités moins habituelles, on peut utiliser le fait que les propositions p => q (c'est à dire p implique q) et nonp V q (c'est à dire nonp OU q ) sont logiquement équivalentes pour remplacer dans Excel OU (p = q ; q) par SI( p <> q ; q ; 1) , d'où une troisième formule matricielle possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = PRODUIT ( SI($A$1:$AZ$1 <> A2:AZ2 ; A2:AZ2 ; 1))
    toujours bien sûr à valider par Ctrl + Maj + Entrée.
    Cordialement
    Claude

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Par défaut
    Merci Claude pour ta solution !

    Je ne l'ai pas encore mise en oeuvre, mais je vais essayer, car elle correspond à ce que je souhaites faire et me paraît bien plus optimisée que la mienne :

    J'ai fini par créer ma propre fonction d'implication en utilisant l'existante en VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function MatImply(X As Variant, Y As Variant) As Boolean
    Dim i As Integer
    MatImply = True
        For i = 1 To X.Columns.Count
            If not (CBool(X(i)) Imp CBool(Y(i))) Then
                MatImply = False
                Exit Function
            End If
        Next i
    End Function

Discussions similaires

  1. Formule matricielle pour une variable
    Par sariel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/01/2008, 19h31
  2. Problème formule matricielle
    Par Gerard6969 dans le forum Excel
    Réponses: 2
    Dernier message: 18/09/2007, 08h47
  3. Formule matricielle et Fonction ligne()
    Par FredoMin dans le forum Excel
    Réponses: 1
    Dernier message: 28/06/2007, 11h14
  4. Comment affecter une formule matricielle longue dans une cellule
    Par dav_e77 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/01/2007, 18h56
  5. [VBA-E] - formule matricielle
    Par jimbololo dans le forum Macros et VBA Excel
    Réponses: 37
    Dernier message: 09/06/2006, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo