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

  1. 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
    0
    1. Contributeur
      re:

      oui mais il faut modifier : & NBVAL(B:B))
      par : & NBVAL(B:B)*2)
      0
      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
        0
    2. 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
      0
      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)?
        0
    3. 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))
      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
        0
    4. 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.
      0
      1. Maintenant est-il possible de réduire cette formule sur une seule cellule?

        Merci

        Funky
        0
    5. 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
      0
      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
        0
    6. 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
      0
      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
        0