Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Calcul à réaliser en fonction d'une ou plusieurs cellules vides

66alex66

XLDnaute Nouveau
Bonjour,

J'aimerais qu'une formule donnée s'appliquer en fonction d'une ou plusieurs cellule vides.
La formule permettant de calculer le nombre d'unités est déjà créée et présente dans la cellule C5 (voir fichier annexé). Elle calcule le nombre d'unités présent entre deux dates sur base d'un tableau de référence (colonne M) repris ci-dessous :



Voici le rendu que j'aimerais obtenir :



J'aimerais que cette formule d'addition d'unités, intègre dans la colonne C, le nombre d'unités repris entre deux dates situées de part et d'autre des cellules vides.

Dans le cas présent, la somme d'unités entre le 01/06/2019 et le 01/01/2021 est de 3366,8584.
J'aimerais donc que cette somme s'intègre tant dans la cellule C5 que C6.

Ensuite, pour les dates allant du 01/01/2021 au 07/04/2022, la somme d'unité est de 3476,23462 devrait s'intégrer en cellule C8.

La formule de calcule est créée, mais je ne trouve pas la condition me permettant de générer ce résultat...

D'avance un tout grand merci.
 

Pièces jointes

  • calcul-unite.xlsm
    17.2 KB · Affichages: 11
Solution
Bon si l'on tient à éviter les divisions par zéro ça se passe ici, fichier (4) :
VB:
ElseIf choix = 3 Then
    If colRef(c.Row) <> "" Then Res = colRef(c.Row) Else If c(1, -2) = 0 Then Res = colRef(deb) Else Res = c(1, 0) * c(1, -1) / c(1, -2) + colRef(deb)
ElseIf choix = 4 Then
    If colRef(c.Row) = "" Then CalculUnités = "=SI(C" & c.Row & "=0;B" & deb & ";E" & c.Row & "*D" & c.Row & "/C" & c.Row & "+B" & deb & ")"
    Exit Function
Bonne nuit.

66alex66

XLDnaute Nouveau
Magnifique merci beaucoup !

J'ai juste un petit souci avec la formule lorsque, par exemple je supprime l'index en cellule B2.



Etant donné qu'il s'agit d'une division par zéro, il m'affiche une erreur.
En réalité lorsque la cellule E est égale à 0, le résultat en cellule F devrait être de la même valeur que l'index de la date précédente.

Et donc obtenir ceci :



Est-ce possible ?

Merci encore
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir 66alex66, job75,

la formule en F2 est : =E2*D2/C2+B1 ; c'est D2/C2 qui provoque une erreur de division par zéro quand C2 vaut 0 ; il y a deux solutions possibles pour l'éviter : formule en F2 :

=SI(C2=0;"";E2*D2/C2+B1) OU =SIERREUR(E2*D2/C2+B1;"")



@job75 : je pense qu'alex a seulement été un peu perturbé par les autres éléments de la formule qui sont de part et d'autre de la division : E2* et +B1 : ça l'a un peu dérouté, c'est tout.

soan
 

soan

XLDnaute Barbatruc
Inactif
@job75

Salut soan, faut suivre : on utilise une fonction.

oh, moi j'ai écrit mon post #21 par rapport au texte vert de la colonne G (images du post #17) ; ainsi qu'à la valeur d'erreur #VALEUR! de la cellule F2. (1ère image du haut, du post #17 aussi)



Quand une formule renvoie une erreur le plus simple est de vivre avec sinon utiliser SIERREUR.

moi aussi je trouve que SIERREUR() est bien pratique ! surtout quand il est combiné avec RECHERCHEV() pour éviter les affichages de #N/A quand rien n'est trouvé ! malgré ça, quand il s'agit d'éviter une simple erreur de division par 0, je préfère utiliser =SI(C2=0;"";E2*D2/C2+B1) plutôt que =SIERREUR(E2*D2/C2+B1;"") pour cette raison :

à la seule lecture de la 1ère formule, on voit plus clairement qu'on veut éviter le cas où C2 = 0 car c'est écrit explicitement dans la formule ; par contre, dans la 2ème formule avec SIERREUR(), comme cette fonction peut servir pour n'importe quelle erreur, c'est moins évident de savoir que c'est une erreur de division par 0 qu'on veut éviter ; mais bien sûr, tu n'es pas obligé de faire comme moi : si tu préfères utiliser SIERREUR(), c'est ton choix.

d'une façon plus générale, chacun est libre de coder à sa façon ; je veux dire : ce n'est pas une obligation de suivre à tout prix des règles fixes ou immuables ; et puis, si tout l'monde codait pareil, en suivant les mêmes « stéréotypes de programmation », ça serait moins amusant et plus monotone...

soan
 
Dernière édition:

AtTheOne

XLDnaute Accro
Supporter XLD
Bonsoir
Oups ! je n'avais pas vu que les formules n'étais pas homogènes ... Cent fois sur le métier je remets mon ouvrage sans doute matriciel cette fois...

Pour en finir, après apéro et un bon repas me voici de retour avec mes formules matricielles :
en F1 : =B1
à partir de F2 (à valider par CTRL MAJ ENTREE) et à tirer vers le bas :
VB:
=SI(B2="";SI(C2=0;F1;E2*(D2/C2)+INDEX($B$1:$B$10;MAX(SI(B$1:B2<>"";LIGNE(B$1:B2);0))));B2)
Amicalement
Alain
 

Pièces jointes

  • calcul-unite.xlsm
    18.7 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bon si l'on tient à éviter les divisions par zéro ça se passe ici, fichier (4) :
VB:
ElseIf choix = 3 Then
    If colRef(c.Row) <> "" Then Res = colRef(c.Row) Else If c(1, -2) = 0 Then Res = colRef(deb) Else Res = c(1, 0) * c(1, -1) / c(1, -2) + colRef(deb)
ElseIf choix = 4 Then
    If colRef(c.Row) = "" Then CalculUnités = "=SI(C" & c.Row & "=0;B" & deb & ";E" & c.Row & "*D" & c.Row & "/C" & c.Row & "+B" & deb & ")"
    Exit Function
Bonne nuit.
 

Pièces jointes

  • calcul-unite(4).xlsm
    21.2 KB · Affichages: 4

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…