Formule excel !

Funky -  
wilfried_42 Messages postés 912 Statut Contributeur -
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. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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. Funky
       
      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
  2. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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. Funky
       
      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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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. Funky
       
      Maintenant est-il possible de réduire cette formule sur une seule cellule?

      Merci

      Funky
      0
  4. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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. Funky
       
      OK merci,

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

      Merci
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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. Funky
       
      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
  7. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    oui mais il faut modifier : & NBVAL(B:B))
    par : & NBVAL(B:B)*2)
    0
    1. Funky
       
      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
  8. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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