Faire des calcul avec VBA

Bonjour à tous,

Je souhaite multiplier les données de la colonne B (quantités) par celles de la colonne C (prix unitaires) en utilisant VBA. Je sais le faire sur Excel (=B3*C3) mais je souhaite me "former en autodidacte" sur VBA. (cf. fichier ci-joint :

https://www.excel-pratique.com/~files/doc/EpSSiExemple.xls)

Merci de m'apporter votre aide .

Bonsoir,

un exemple mais ne me demande pas trop d'explication.

Je galère,patine en VBA

https://www.excel-pratique.com/~files/doc/Multiplie.xls

A+

PMALONG a écrit :

Bonjour à tous,

Je souhaite multiplier les données de la colonne B (quantités) par celles de la colonne C (prix unitaires) en utilisant VBA. Je sais le faire sur Excel (=B3*C3) mais je souhaite me "former en autodidacte" sur VBA. (cf. fichier ci-joint :

https://www.excel-pratique.com/~files/doc/EpSSiExemple.xls)

Merci de m'apporter votre aide .

Salut

différentes instructions pour faire la même chose

vSub test()
'Déclaration ====================
Dim x As Long 'Peut aller jusqu'à la dernière ligne 65536

For x = 3 To [C65536].End(xlUp).Row
'Pour X = 3 jusqu'à (première cellule non-vide de C en partant du bas
'(ligne 65536) et en remontant)=dernière cellule non-vide en C
    Range("D" & x) = Range("B" & x) * Range("B" & x).Offset(0, 1)
    'Cellule Dx = Bx × (Bx, décalée de 0 ligne 1 colonne = Cx)
Next x
'x suivant
End Sub

A+

Merci à tous :

A l'Admin pour m'avoir indiqué comment supprimer un doublon;

A henri pour son exemple;

Et surtout à Gorfael pour ses très claires explications insérées dans le code.

Maintenant j'ai une autre préoccupation : quelle ligne de code dois-je insérer pour le calcul de la somme (total) de la colonne montant ?

PMALONG a écrit :

Merci à tous :

A l'Admin pour m'avoir indiqué comment supprimer un doublon;

A henri pour son exemple;

Et surtout à Gorfael pour ses très claires explications insérées dans le code.

Maintenant j'ai une autre préoccupation : quelle ligne de code dois-je insérer pour le calcul de la somme (total) de la colonne montant ?

Salut

avant le end sub

Range("D65536").End(xlUp).Offset(1, 0) = WorksheetFunction.Sum(Range(Range("D3"), Range("D65536").End(xlUp)))

'la première cellule non-vide en partant du bas et en remontant, décolée d'une ligne =

'équivaut à première cellule après la dernière non-vide de D =

' fonction de feuille de calcul SOMME sur la plage D3 à dernière non-vide en D

On pourrait écire en plus simple (mais moins lisible quand on débute)

[D65536].End(xlUp).Offset(1, 0) = WorksheetFunction.Sum(Range([D3], [D65536].End(xlUp)))

ou, autre solution : inscrire la formule somme dans la cellule :

Range("D65536").End(xlUp).Offset(1, 0).FormulaLocal = _

"=SOMME(" & Range(Range("D3"), Range("D65536").End(xlUp)).Address(0, 0) & ")"

FormulaLocal : permet d'inscrire la formule comme on l'utilise dans Excel, quelque soit la langue

Si on utilisait Formula à la place le texte serait "=SUM(....

que l'on lirait dans la cellule : =SOMME(....

Address(0,0) revient à écrire : Address(False,False) donnant l'adresse en relatif

ATTENTION : Excel ayant été fait pour aider l'utilisateur, le comportement des valeurs booléenne (logique) n'a pas tout à fait le même comportement sous Excel et en VBA

Sous Excel :

Faux = False = 0

Vrai = True = "nombre <> 0" (-10, -2, 1, 500, etc...

Sous VBA

False = 0

True = -1

on pourrait aussi mettre le total dans une variable ce qui donnerait la macro

Sub test()
'Déclaration ====================
Dim x As Long 'Peut aller jusqu'à la dernière ligne 65536
Dim Tot As Double

For x = 3 To [B65536].End(xlUp).Row
    Range("D" & x) = Range("B" & x) * Range("B" & x).Offset(0, 1)
    Tot = Tot + Range("D" & x)
Next x
Range("D" & x) = Tot
End Sub

On profite du fait que la boucle for next augmente la variable, et la compare au nombre à atteindre

Dans le fichier d'exemple la limite est de 8 quand xest à 8, et qu'il atteint le next, il est renvoyé à la ligne for qui lui ajoute le pas(1 ici, implicite) => X=9 il est testé X>8 => Vrai donc on va la la ligne suivant next, avec un X=9

Ce genre de fonctionnement, rapide, doit faire l'objet de raisonnement en fonction des données : si la colonne C est plus longue que B, on aura la somme en face d'une valeur en C, ce qui peut être déroutant on peut utiliser une autre formulation :

Range("D" & IIf([B65536].End(xlUp).Row >= [C65536].End(xlUp).Row), x, _

[C65536].End(xlUp).Row + 1) = Tot

A+

Merci beaucoup à toi Gorfael !

Bonnes fêtes !

A bientôt !

Rechercher des sujets similaires à "calcul vba"