Formule mathématique à trouver

Fermé
Ralph - 23 oct. 2017 à 12:15
 Ralph - 24 oct. 2017 à 15:42
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.
A voir également:

4 réponses

via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
23 oct. 2017 à 12:20
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
Via,
J'ai posté le fichier sur le lien que vous m'avez envoyé.
Pouvez-vous m'aider. merci.
Cordialement.
R
0
Voici le lien :
http://www.cjoint.com/c/GJxkTXMQ7ZR
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738 > Ralph
23 oct. 2017 à 13:11
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
Ralph > via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024
23 oct. 2017 à 13:23
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
Ralph > Ralph
23 oct. 2017 à 13:25
(il faut trouver les formules mathématiques permettant de calculet AUTOM%ATIQUEMENT les cases pour 14/35, 44/89, 40% et 49,44%)
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738 > Ralph
23 oct. 2017 à 13:38
Ok je m’absente cet après-midi, je regarde cela en rentrant
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
Modifié le 24 oct. 2017 à 14:04
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
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
24 oct. 2017 à 14:12
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
Waouh, super.
Je vous remercie.
0
Ralph > Ralph
24 oct. 2017 à 14:48
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
Ralph > Ralph
24 oct. 2017 à 14:52
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
Ralph > Ralph
24 oct. 2017 à 14:57
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
Ralph > Ralph
24 oct. 2017 à 15:10
Comme je ne comprends pas toute votre formule, JvDo, je n'arrive pas à l'adapter.
0