Formule excel !

Bonjour,

J'ai un tableau avec 6 colonnes et 5 lignes. Je souhaite savoir si les PM(1,2,3,...) sont utilisés au moins une fois. C'est à dire, j'aimerais regarder la ligne 1 et savoir si il y au moins une fois un "O", puis la ligne 2 et regarder si il y a au moins une fois un "O" puis les additionner. Donc en résumé pour le cas ici j'aurais le nombre 4 parce que:

PM1 N N N O O J'ai au moins 1 fois un "O" ---> compteur = 1
PM2 N O O O N J'ai au moins 1 fois un "O" ---> compteur = 2
PM3 N N N N O J'ai au moins 1 fois un "O" ---> compteur = 3
PM4 O O N N O J'ai au moins 1 fois un "O" ---> compteur = 4
PM5 N N N N N Je n'ai pas au moins 1 fois un "O" ---> compteur = 4

Donc résultat = 4

Merci d'avance pour votre aide.

Funky
Configuration: Windows XP
Firefox 3.0.3

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonjour

    une petite formule
    si ton tableau commence en ligne 1 : 2 formules
    en G1 : =Si(nb.si(B1:F1;"O")>0;1;0)
    en G2 : =Si(nb.si(B2:F2;"O")>0;1;0) + Somme($G$1:G1)
    tirer la 2eme formule vers le bas

    si ton tableau commence en ligne 2 (par exemple)
    en G1 mettre 0
    en G2 : =Si(nb.si(B2:F2;"O")>0;1;0) + Somme($G$1:G1)
    tirer la formule vers le bas
    1. Bounjour,

      J'ai essayé votre formule et il me semble qu'il y a un souci !

      DM1 N N N O O 1 OK la fonction me donne 1
      DM2 N O O O N 2 OK la fonction donne 1 et la somme est de 2
      DM3 N N N N O 4 OK la fonction donne 1 mais la somme devrait être de 3
      DM4 O O N N O 8 ...
      DM5 N N N N N 15 ...

      La fonction est juste merci, mais c'est la somme qui pose problème !

      Merci

      Funky
  2. Contributeur
    re:

    bizarre, meme si la formule n'est pas bonne, les resultats que tu donne ne correspondent pas à la formule
    en G1 : mettre 0
    en G2 : =SI(NB.SI(B2:F2;"O")>0;1;0) + G1
    1. Re,

      Effectivement en mettant + G1 et non somme cela fonctionne je croix, je vais faire quelques essai encore.

      Merci pour la vitesse de tes réponses et d'avoir pris le temps.

      Funky
  3. Contributeur
    Bonjour à vous deux,
    Si je peu me permettre un pti grain de sel..
    En G2 mettre
    =SI(NB.SI(B2:F2;"O")>0;1;0) +G1
    et tirer vers le bas.
    A+
    EDIT:
    Désolé Wilfried, je n'ai pas actualiser avant d'envoyer ma réponse.
    1. Maintenant est-il possible de réduire cette formule sur une seule cellule?

      Merci

      Funky
  4. Contributeur
    re:

    Oui, mais on va taper sur une Formule Matricielle, gourmande en ressource
    Formule à valider avec Ctrl + Maj + Entree
    =SOMME(SI(NB.SI(DECALER($B$2;LIGNE($G$2:G2)-2;0;1;5);"O")>0;1;0))

    si la validation est correcte, des {} encadreront la formule automatiquement

    j'y revient car je ne suis pas sur d'avoir répondu correctement

    la Cellule B1 est vide
    Formule matricielle à mettre en G2
    =SOMME(SI(NB.SI(DECALER($B$2;LIGNE(INDIRECT("$G$2:G" & NBVAL(B:B)+1))-2;0;1;5);"O")>0;1;0))


    la cellule B1 contient une info
    Formule Matricielle à mettre en G2
    =SOMME(SI(NB.SI(DECALER($B$2;LIGNE(INDIRECT("$G$2:G" & NBVAL(B:B)))-2;0;1;5);"O")>0;1;0))
    1. OK merci,

      Peux-tu m'expliquer comment fonctionne cette formule que je l'adapte à la mise en forme du tableau définitif.

      Merci
  5. Contributeur
    re:

    c'est assez compliquer, elle fonctionne comme (en VBA) une boucle FOR NEXT

    =SOMME(SI(NB.SI(DECALER($B$2;LIGNE(INDIRECT("$G$2:G" & NBVAL(B:B)))-2;0;1;5);"O")>0;1;0))

    INDIRECT("$G$2:G" & NBVAL(B:B)) : defini une plage selon le nombre de valeurs présentes dans la colonne B
    si tu as 5 valeurs dans la colonne B
    tu aras une plage definie : G2:G5 soit 4 lignes
    LIGNE(INDIRECT("$G$2:G" & NBVAL(B:B))) : comme c'est une formule matricielle selon l'exemple ci-dessus, ligne prendra successivement les valeurs 2,3,4,5
    (j'ajoute un -2 à ligne pour démarrer à la valeur 0 et dans l'ordre suivant les valeurs seront successivement 0,1,2,3)
    DECALER($B$2;LIGNE(INDIRECT("$G$2:G" & NBVAL(B:B)))-2;0;1;5) decaler me permet de definir une 2 eme matrice (horizontale) qui se deplacera en fonction des valeurs 0,1,2,3
    Decaler(cellule; ligne; colonne; Nbligne; Nbcolonne)
    cellule : $B$2
    ligne : les valeurs successives 0,1,2,3 (calculée avec ligne (......)-2)
    colonne : 0 pas de decalage colonne
    Nbligne : 1 ligne à prendre en compte
    Nbcolonne : 5 Colonnes à prendre en compte

    le reste ressemble à la premiere

    je ne sais pas si je suis tres clair lol
    1. Merci pour ces explications.

      Je vais essayer de comprendre mais c'est pas facile du premier coup.

      Maintenant, il est possible de mettre une ligne vide entre chaque (PM)?
  6. Contributeur
    re:

    oui mais il faut modifier : & NBVAL(B:B))
    par : & NBVAL(B:B)*2)
    1. Ok c'est tout bon mais je ne comprend pas très bien à quoi sert le INDIRECT("$G$2:G" le $G$2:G correspond à quoi?

      Merci
  7. Contributeur
    re:

    INDIRECT transforme un adressage String en Adressage cellule
    INDIRECT("G2:G" & nbval(G:G)) Donnera une plage G2Gxxx xxx étant le nombre de valeurs dans G

    En creant une matrice evolutive, j'oblige la formule matricielle à boucler sur cette matrice avec ligne(..........) en fonction du nombre de lignes desiré

    ce qui implique que je traite xxx fois la plage C2:F2 en evoluant à chaque fois d'une ligne donc
    C2:F2 puis C3:F3 puis C4:F4......... jusqu'à xxx