Calcul sur plage de cellule sélectionnée

Bonjour à tous,

dans un fichier excel je souhaite créer une macro pour réaliser des calculs sur une plage de cellules que j'ai sélectionnée et rendre le résultat sur la ligne qui suit la sélection.

les deux colonnes sont C et D

C represente une quantité de produits

D un prix

le résultat de la macro sera le cout d'une maintenance mensuelle d'un produit avec ou sans option. Ce cout est de 7% du prix total d'un produit avec ses options.

exemple je sélectionne les cellules C18 à D21

Une fois que j'active la macro :

Je souhaite que sur C22 j'ai C18*12

Je souhaite que sur D22 j'ai =somme(D18:D21)*0,07/12

Si vous avez des pistes, je seche completement !

Merci !

Bonjour Revers, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim PL As Range 'déclare la variable PL (PLage)
Dim LD As Integer 'déclare la variable LD (Ligne du Début)
Dim LF As Integer 'déclare la variable LF (Ligne de Fin)
Dim CD As Integer 'déclare la variable CD (Colonne du début)
Dim CF As Integer 'déclare la variable CF (Colonne de Fin)

Set PL = Selection 'définit la plage PL
LD = PL.Cells(1, 1).Row 'définit la ligne du début LD
LF = PL.SpecialCells(xlCellTypeLastCell).Row 'définit la ligne de fin LF
CD = PL.Cells(1, 1).Column 'définit la colonne du début CD
CF = PL.SpecialCells(xlCellTypeLastCell).Column 'définit la colonne de fin CF
Cells(LF + 1, CD).Value = 12 * PL.Cells(1, 1) 'renvoie dans la première cellule vide en de la colonne de début, la valeur de la première cellule de la plage multipliée par 12
'renvoie dans la première cellule vide en de la colonne de fin, le calcul de la somme x 0,07 /12
Cells(LF + 1, CF).Value = Application.WorksheetFunction.Sum(Range(Cells(LD, CF), Cells(LF, CF))) * 0.07 / 12
End Sub

Salut,

fais ta selection puis lance ce code

Sub test()
celldeb = Split(Selection.Address, ":")(0)
cellfin = Split(Selection.Address, ":")(1)

coldeb = Split(celldeb, "$")(1)
colfin = Split(cellfin, "$")(1)
linedeb = Split(celldeb, "$")(2)
linefin = Split(cellfin, "$")(2)

Cells(linefin + 1, coldeb) = Application.WorksheetFunction.Sum(Range(coldeb & linedeb).value) * 12
Cells(linefin + 1, colfin) = Application.WorksheetFunction.Sum(Range(colfin & linedeb & ":" & colfin & linefin).value) * 0.07 / 12

End Sub

Bonjour,

et pourquoi pas pas formule ?

Mauvaise conception de la feuille ou difficulté autre ?

eric

Salut Nono78 et ThauThème

Vos deux propositions fonctionnent.

Mais je ne sais pas pourquoi mais celle de ThauThème qui fonctionne parfaitement dans une feuille de calcul vierge, renvoie les résultats sur des cellules qui ne sont pas celles souhaitées. Nono78 à peut être la réponse pour t'aider à comprendre.

La version de Nono78 marche à la perfection !

Merci à vous 2 !

Re,

Content d'avoir pu t'aider.

Attention à la méthode Range.Spécialcells je n'aime pas trop cette méthode parce qu'elle inclue les cellules fantômes.

C'est pour ça que ça marche pas sur une feuille renseignée et que ça marche sur une feuille vierge.

mince j'ai oublié une chose.

C'est que le nombre d'option doit être multiplié au prix de l'option

donc je souhaite que le résultat en D22 prenne en compte la multiplication de C19 par D19 et C20 par D20 etc.

En D22 ça donnerai ça :

=(D18+C19*D19+C20*D20)*0,07/12

en revanche il est possible que le produits soit vendu sans option et que la macro doit marcher sur une seule ligne.

Re,

Essayes ça mais je n'ai pas compris la dernière phrase

Sub test()
celldeb = Split(Selection.Address, ":")(0)
cellfin = Split(Selection.Address, ":")(1)

coldeb = Split(celldeb, "$")(1)
colfin = Split(cellfin, "$")(1)
linedeb = Split(celldeb, "$")(2)
linefin = Split(cellfin, "$")(2)

Cells(linefin + 1, coldeb) = Application.WorksheetFunction.Sum(Range(coldeb & linedeb).value) * 12
Cells(linefin + 1, colfin) = Application.WorksheetFunction.SumProduct(Range(coldeb & linedeb & ":" & coldeb & linefin), Range(colfin & linedeb & ":" & colfin & linefin)) * 0.07 / 12

End Sub

PARFAIT !!

Un grand merci Nono78 ! la grande classe !

On est là pour ça

nono78 a écrit :

On est là pour ça

mince la ligne 1 ne doit pas être multiplié pour le total

=(D18+C19*D19+C20*D20)*0,07/12

j'ai fait un exemple pour comprendre un peu la chose

3classeur17.xlsx (19.20 Ko)

Re,

Sub test()

celldeb = Split(Selection.Address, ":")(0)

cellfin = Split(Selection.Address, ":")(1)

coldeb = Split(celldeb, "$")(1)

colfin = Split(cellfin, "$")(1)

linedeb = Split(celldeb, "$")(2)

linefin = Split(cellfin, "$")(2)

Cells(linefin + 1, coldeb) = Application.WorksheetFunction.Sum(Range(coldeb & linedeb).value) * 12

Cells(linefin + 1, colfin) = Application.WorksheetFunction.SumProduct(Range(coldeb & linedeb + 1 & ":" & coldeb & linefin), Range(colfin & linedeb + 1 & ":" & colfin & linefin)) * 0.07 / 12

Cells(linefin + 1, colfin) = Cells(linefin + 1, colfin) + Range(colfin & linedeb).value * 0.07 / 12

End Sub

Encore un grand merci Nono78 ! excellent

Nono tu vas pas le croire dans le cas ou la sélection est sur une seule ligne ça renvoi une erreur

Sub test()
celldeb = Split(Selection.Address, ":")(0)
cellfin = Split(Selection.Address, ":")(1)

coldeb = Split(celldeb, "$")(1)
colfin = Split(cellfin, "$")(1)
linedeb = Split(celldeb, "$")(2)
linefin = Split(cellfin, "$")(2)

Cells(linefin + 1, coldeb) = Application.WorksheetFunction.Sum(Range(coldeb & linedeb).value) * 12

If linefin - linedeb > 0 Then
    Cells(linefin + 1, colfin) = Application.WorksheetFunction.SumProduct(Range(coldeb & linedeb + 1 & ":" & coldeb & linefin), Range(colfin & linedeb + 1 & ":" & colfin & linefin)) * 0.07 / 12
    Cells(linefin + 1, colfin) = Cells(linefin + 1, colfin) + Range(colfin & linedeb).value * 0.07 / 12
Else
    Cells(linefin + 1, colfin) = Range(colfin & linedeb).value * 0.07 / 12
End If

End Sub

Un grand merci Nono78 maintenant je suis comblé.

Excuse le temps de réaction pour les remerciements j'étais débordé !

ça fait chaud au coeur de voir tant d'entraide !

MERCI !

Pas de problèmes bon courage!

Rechercher des sujets similaires à "calcul plage selectionnee"