Calculs et plages variable

zoubitom

XLDnaute Nouveau
Bonjour à tous,

J'ai beau avoir fait le tour des discussions sur le sujet, je ne comprends pas tout et n'arrive pas à adapter les différentes solutions à mon problème.
Donc merci pour votre aide.

J'ai une plage de données de 3 colonne (A,B,C) fixes avec un nombre de lignes variable suivant ce que j'importe comme données.

Je souhaite créer une 3eme colonne (E) présentant les résultat d'un calcul sur (A,B,C) avec la formule suivante:

=SI(A2-B2<0;0;(A2-B2)*C2)

D'autre part, je souhaite faire la somme de ces résultats (=somme(E2:Ex) et l'afficher dans un cellule prédéfinie d'une autre feuille: B3 de la feuille "Résultats" dans mon exemple.

Mon problème est que je ne sais pas comment faire pour que cette colonne de calcul évolue en fonction des données importées en (A,B,C). Et donc que le résultat de ma somme évolue également.

Merci encore pour votre aide, VBA reste très nébuleux pour moi...

Mon fichier exemple en pièce jointe
 

Pièces jointes

  • CalculPlageVariable.xlsm
    16.2 KB · Affichages: 47

hoerwind

XLDnaute Barbatruc
Re : Calculs et plages variable

Bonjour,

Je ne comprends pas fort bien les formules en Calcul!E:E
Pourquoi il y a-t-il "D" en E2 ?
Pourquoi il y a-t-il un saut de deux lignes à partir de E10 ?
La formule peut être simplifiée comme suit : =(A2-B2>=0)*(A2-B2)*C2

En Résultats!B3, essaie la formule : =SOMME(Calcul!E:E)
 

Efgé

XLDnaute Barbatruc
Re : Calculs et plages variable

Bonjour zoubitom, Salut hoerwind,
Je ne peux pas ouvrir les XLSX, et je pense que ma proposition n'ira pas mais je dépose un exemple par macro:
Code:
Private Sub CommandButton1_Click()
Sheets("Tableau").Range("E2:E" & Range("A" & Application.Rows.Count).End(xlUp).Row).FormulaLocal = "=SI(A2-B2<0;0;(A2-B2)*C2)"
Sheets("Résultats").Range("B3").FormulaLocal = "=SOMME(Tableau!E2:E" & Sheets("Tableau").Range("A" & Application.Rows.Count).End(xlUp).Row & ")"
End Sub
Cordialement
 

Pièces jointes

  • zoubitom (2).zip
    13.9 KB · Affichages: 19
G

Guest

Guest
Re : Calculs et plages variable

Bonjour,

Hello HoerWind,

Ci-joint le classeur où j'ai nommé "Calculs" la plage dynamique qui contient les formules.

Comme Hoerwind, pas bien compris les reférences des formules.

A+
 

zoubitom

XLDnaute Nouveau
Re : Calculs et plages variable

Bonjour à tous,
Je ne comprends pas fort bien les formules en Calcul!E:E
Comme Hoerwind, pas bien compris les reférences des formules.
En fait si la différence A-B est négative, je veux que le résultat en E soit =0
Si cette différence est positive mais que C=0, alors je veux que E soit =0
Si A-B positif et C=1 alors je veux que E=(A-B)*C

Pourquoi il y a-t-il "D" en E2 ?
C'est juste une erreur de ma part, cette cellule contient la même formule que les autre de la colonne E.
Pourquoi il y a-t-il un saut de deux lignes à partir de E10 ?
Idem que E2, c'est une erreur de copier coller.... toutes les cellules et formules dans E:E suivent le même schéma.
Je ne peux pas ouvrir les XLSX, et je pense que ma proposition n'ira pas mais je dépose un exemple par macro:
Je joints mon fichier modifié en xls.
 

Pièces jointes

  • CalculPlageVariable.xls
    32.5 KB · Affichages: 40

Efgé

XLDnaute Barbatruc
Re : Calculs et plages variable

...Peux-tu m'expliquer un peu ce code (je reste débutant...)?...
Re à tous,
Je me lance dans une explication, mais ne connaisant pas ton "niveau" je repart du début ;).
Code:
Private Sub CommandButton1_Click()
Sheets("Tableau").Range("E2:E" & Range("A" & Application.Rows.Count).End(xlUp).Row).FormulaLocal = "=SI(A2-B2<0;0;(A2-B2)*C2)"
Sheets("Résultats").Range("B3").FormulaLocal = "=SOMME(Tableau!E2:E" & Sheets("Tableau").Range("A" & Application.Rows.Count).End(xlUp).Row & ")"
End Sub
Pour copier la formule sur toutes les lignes nécessaires, il faut définir premièrement la cellule de départ et la cellule de fin :

Code:
Sheets("Tableau").Range("E2:E65536")
Mais comme on veux pas inscrire la formule plus loin que nécessaire il faut trouver la ligne de fin. Pour ce faire j'utilise la colonne A, qui, normalement, doit forcément être remplie. Donc la ligne de fin de ma copie de formule est égale à la dernière cellule remplie en colonne A:
Code:
Range("A" & Application.Rows.Count).End(xlUp).Row
Maintenant que l'on a la plage à traiter:
Code:
Sheets("Tableau").Range("E2:E" & Range("A" & Application.Rows.Count).End(xlUp).Row)
On va écrire la formule
Code:
Sheets("Tableau").Range("E2:E" & Range("A" & Application.Rows.Count).End(xlUp).Row).FormulaLocal = "=SI(A2-B2<0;0;(A2-B2)*C2)"
Pour cette étape il faut garder à l'esprit que la formule sera recopiée depuis la première cellule de la plage jusqu'a la dernière.

J'en vois qui s'agitent au fond du forum...:D

Pour la cellule B3 de la feuille Résultat:
On dit que cette cellule est égale à la somme des cellules feuille("Tableau") colonne E jusqu'à la dernière ligne de la colonne A de la feuille("Tableau")

Code:
Sheets("Résultats").Range("B3").FormulaLocal = "=SOMME(Tableau!E2:E" & Sheets("Tableau").Range("A" & Application.Rows.Count).End(xlUp).Row & ")"

En espérant que cette explication, comparable à la Une du monde, n'a pas été inutile.
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 684
Messages
2 090 918
Membres
104 700
dernier inscrit
jecusin