Formule mathématique à trouver

Ralph -  
 Ralph -
Bonjour,

J'ai un fichier d'adhérents d'une association de locataires pour un immeuble de 35 logements. Il y a quatre type d'appartements : des F1 (1 pièce), F2 (2 pièces), F3 (3 pièces) et F4 (4 pièces). Sur les 35 logements de l'immeuble on dénombre 5 F1, 14 F2, 8 F3 et 8 F4, soit 89 pièces avec un ou plusieurs locataires par logement peu important le type de logement (parfois 2 locataires dans un F1 et 5 ou 6 locataires dans un F4) et un ou plusieurs adhérents par appartement (certains 4 pièces ont 6 locataires et deux adhérents, par exemple).

J'aimerai trouver une formule qui puisse automatiquement calculer le nombre de pièces comptant au moins un adhérent de notre association de locataires.

Quelle est la bonne formule ? Merci pour votre aide.

4 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Impossible de t'aider sans connaitre la structure de ton fichier
    Poste un exemple (avec des noms bidons) sur cjoint.com, fais créer un lien que tu copies et reviens coller ici

    Cdlmnt
    Via

    0
  2. Ralph
     
    Via,
    J'ai posté le fichier sur le lien que vous m'avez envoyé.
    Pouvez-vous m'aider. merci.
    Cordialement.
    R
    0
    1. Ralph
       
      Voici le lien :
      http://www.cjoint.com/c/GJxkTXMQ7ZR
      0
    2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759 > Ralph
       
      Ok j'ai le fichier mais je ne comprend pas mieux ce que tu cherches à obtenir
      Il y a 34 appartements différents , tu veux totaliser le nombre de pièces de ces 34 ?
      Si c'est le cas il faut d'abord dans une nouvelle colonne convertir les T2 et autres en nombres additionnables avec la formule : =CNUM(STXT(D5;2;1))
      Ensuite tu fais la somme de cette colonne, résultats 81
      0
    3. Ralph > via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention  
       
      En fait je veux calculer automatiquement via une formule mathématique : 1°) le nombre de logements (14/35) et le % correspondant, et 2°) le nombre de pièces ayant au moins un adhérent (44/89) sachant qu'il y a 5T1 + 14T2 + 8T3 + 8T4 = 89 pièces; ainsi que le % correspondant.
      Cases E101, E102 et F101, F102.
      Cordialement,
      R
      0
    4. Ralph > Ralph
       
      (il faut trouver les formules mathématiques permettant de calculet AUTOM%ATIQUEMENT les cases pour 14/35, 44/89, 40% et 49,44%)
      0
    5. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759 > Ralph
       
      Ok je m’absente cet après-midi, je regarde cela en rentrant
      0
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    pas possible par mail mais je te le renvoie sur cjoint
    https://www.cjoint.com/c/GJymbNMxsv6

    Au cas où tu n'arrives pas à l'ouvrir voilà la fonction perso :
    Function logements(plage As Range)
    For Each Cell In plage
    If Cell <> "" And Range("I" & Cell.Row) > 0 Then tot = tot + Val(Mid(Cell, 2, 1))
    Next
    logements = tot
    End Function


    Elle est à mettre dans un module : ALT+F11 pour ouvrir l'éditeur VBA - Insertion - Module -copier-coller la macro dans la fenêtre blanche

    Tu l'emploies ensuite comme n'importe quelle fonction selon la syntaxe que j'ai indiquée précédemment

    "L'imagination est plus importante que le savoir."    A. Einstein
    0
  4. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonjour à tous,

    Après avoir reformaté tes cellules fusionnées qui contenaient plusieurs valeurs (!! je ne sais pas comment tu as obtenu ce résultat!!), tu peux utiliser les formules suivantes :
    en E101, =SOMMEPROD(($C$5:$C$100<>"")*(I5:I100<>0))&"/"&SOMMEPROD(--($C$5:$C$100<>""))

    en E102, =SOMMEPROD(($C$5:$C$100<>"")*($I$5:$I$100>0)*("0"&GAUCHE(SUBSTITUE($D$5:$D$100;"T";""))))&"/"&SOMMEPROD(--("0"&GAUCHE(SUBSTITUE($D$5:$D$100;"T";""))))

    et en E103, =I103&"/100" (ça, tu t'en doutais)

    Pour les ratios, c'est trop simple pour que je te dise quoi faire.

    Le fichier : https://www.cjoint.com/c/GJymmxrScTH

    Cordialement
    0
    1. Ralph
       
      Waouh, super.
      Je vous remercie.
      0
    2. Ralph > Ralph
       
      J'ai transposé les formules dans mon tableau initial (que j'avais légèrement modifié et anonymisé) mais je ne trouve pas le bon dénominateur...

      Je trouve pour les logements 14/36 au lieu de 14/35

      =SOMMEPROD(($C$8:$C$103<>"")*($M$8:$M$103<>0))&"/"&SOMMEPROD(--($C$8:$C$103<>""))

      et pour le nombre de pièces je trouve 44/276 au lieu de 14/89

      =SOMMEPROD(($C$8:$C$103<>"")*($M$8:$M$103>0)*("0"&GAUCHE(SUBSTITUE($D$8:$D$103;"T";""))))&"/"&SOMMEPROD(--("0"&GAUCHE(SUBSTITUE($D$8:$D$103;"T";""))))

      Où est mon erreur ?
      0
    3. Ralph > Ralph
       
      Votre formule parait plus simple que celle que j'avais initialement bricolé pour calculer le nombre de logements dont la cotisation est supérieure à 2 euros ou en attente (de paiement) :
      =CONCATENER(SOMME(SOMME(NB.SI.ENS($M$8:$M$103;">=2";$C$8:$C$103;"101");NB.SI.ENS($M$8:$M$103;">=2";$C$8:$C$103;"102");NB.SI.ENS($M$8:$M$103;">=2";$C$8:$C$103;"103");NB.SI.ENS($M$8:$M$103;">=2";$C$8:$C$103;"104"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "105"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "106"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "107"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "108"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "109"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "110"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "111"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "112"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "113"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "114"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "115"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "116"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "117"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "118"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "119"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "120"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "121"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "122"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "123"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "124"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "125"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "126"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "127"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "128"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "129"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "130"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "131"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "132"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "133"); NB.SI.ENS($M$8:$M$103; ">=2";$C$8:$C$103; "134"));SOMME(NB.SI.ENS($M$8:$M$103;"en attente !";$C$8:$C$103;"101");NB.SI.ENS($M$8:$M$103;"en attente !";$C$8:$C$103;"102");NB.SI.ENS($M$8:$M$103;"en attente !";$C$8:$C$103;"103");NB.SI.ENS($M$8:$M$103;"en attente !";$C$8:$C$103;"104"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "105"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "106"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "107"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "108"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "109"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "110"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "111"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "112"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "113"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "114"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "115"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "116"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "117"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "118"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "119"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "120"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "121"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "122"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "123"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "124"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "125"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "126"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "127"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "128"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "129"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "130"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "131"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "132"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "133"); NB.SI.ENS($M$8:$M$103; "en attente !";$C$8:$C$103; "134")));"/35")

      Mais je n'avais pas trouvé comment faire pour calculer le nombre de pièces ...
      0
    4. Ralph > Ralph
       
      Je ne comprends pas pourquoi le dénominateur est différent... sachant que colonne :
      C8:C103 est celle des numéros de logements
      D8:D103 est celle des type de logements (selon le nombre de pièces)
      et M8:M103 est celle des cotisations (supérieures à "2" euros ou "en attente" (de paiement).
      0
    5. Ralph > Ralph
       
      Comme je ne comprends pas toute votre formule, JvDo, je n'arrive pas à l'adapter.
      0