Formule mathématique à trouver
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.
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
Résumé de la discussion
Calculer automatiquement le nombre de logements et le nombre de pièces comptant au moins un adhérent, dans un ensemble de 35 logements répartis en F1 à F4 et 89 pièces au total. Plusieurs solutions ont été proposées, notamment des formules SOMMEPROD après défusion des cellules fusionnées, ou une fonction personnalisée pour compter uniquement les logements et les pièces occupés. L'objectif reste d'utiliser les dénominateurs corrects — 14 logements sur 35 et 44 pièces sur 89 — afin d'obtenir les pourcentages correspondants et les résultats attendus. D'autres échanges portent sur l'ajustement des données et les pièges liés à l'agrégation des T1/T2/T3/T4 et au calcul des cellules vides.
-
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
-
Via,
J'ai posté le fichier sur le lien que vous m'avez envoyé.
Pouvez-vous m'aider. merci.
Cordialement.
R-
-
@RalphOk 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 -
@via55En 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 -
@Ralph(il faut trouver les formules mathématiques permettant de calculet AUTOM%ATIQUEMENT les cases pour 14/35, 44/89, 40% et 49,44%)
-
@RalphOk je m’absente cet après-midi, je regarde cela en rentrant
-
-
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 -
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-
-
@RalphJ'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 ? -
@RalphVotre 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 ... -
@RalphJe 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). -
@RalphComme je ne comprends pas toute votre formule, JvDo, je n'arrive pas à l'adapter.
-