[Catégorie modifiée .Net --> VBA] Faire des calculs sous VBA avec Excel 2007 [Résolu]

Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
- - Dernière réponse : jordane45
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
- 6 juil. 2010 à 15:10
Bonjour à tous,

je cherche à créer un outil rapide pour faire des petits calculs sous VBA avec excel 2007.

l'exemple de calcul :

consommation*distance*facteur d'émission

Ce que je souhaite, c'est que l'utilisateur rentre ces informations de type string dans une feuille excel et qu'ensuite le resultat soit stocké dans la même feuille excel et que le résultat apparaisse avec une message box.

Quelqu'un peut-il m'aider?

J'y connais absolument rien en VBA, surtout la synthaxe.
Afficher la suite 

20/28 réponses

Meilleure réponse
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
3
Merci
je t'en prie.
il faut bien commencer par quelque chose...
Si je n'avais pas poser de questions quand je m'y suis mis... ben.. je n'aurais jamais appris.

N'hésites pas à nous recontacter en cas de soucis;

Penses aussi a regarder sur d'autres sites (il en existe quelques uns qui explique comment utiliser le VBA).

Par contre, penses à passer le sujet en résolu si la réponse te convient.

Bonne journée.

Cordialement,
Jordane,

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
3
Merci
je ne comprend pas vraiment ce que tu demande :
and j'ouvre une feuille excel et qu'ensuite j'ouvre la macro, je voudrais que les données écrites s'insère automatiquement.

Tes données se trouvent déjà sur ta feuille excel non ?

ensuite :
dans le code, chaque lecture de donnée se fait en intégrant le numéro de cellule, ce que je voudrais, c'est pouvoir faire une sélection automatique en fonction de ce qu'il y a devant.

tu veux dire que tu as un intitulé devant tes cellules D10 D11 etc ?
Si tel est le cas, tu peux utiliser des conditions ( IF..then..else.. end if ou sinon des "select case..")
par exemple:
sub PRINCIPALE ()
'si C10 = "toto" alors je vais dans la sub Multiplication_fretroutier_cas2
' sinon je vais dans la sub Multiplication_fretroutier_cas1
if range("C10").value = "toto" then
    call Multiplication_fretroutier_cas2
else
    call Multiplication_fretroutier_cas1
end if
end sub


Si tu veux, tu peux nous mettre un fichier à dispo qu'on regarde ce que ça donne
> tu peux le mettre sur le site : cijoint.fr et ensuite tu poste le lien ici.

Cordialement,
Jordane,

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
3
Merci
par exemple:
Private Sub Workbook_Open()
' ceci te permet de déclencher des actions à l'ouverture de ton classeur
' Ecriture dans la Feuille1 du classeur actif dans la cellule C10 de "TOTO"
Activeworkbook.sheets(1).range("C10").value = "TOTO"
' Activeworkbook => classeur actif
' Sheets(1) : Feuille1. on peut aussi écrire le nom de la feuille. Si la feuille se nomme par exemple : Ma_Feuille )> Shetts("Ma_Feuille")
' Range("C10").value = "TOTO" > Ecriture de la chaine de caracteres TOTO dans la cellule C10.
End Sub



Cordialement,
Jordane,

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
3
Merci
pour effacer la feuille tu as une instruction du genre :
 Sheets(1).cells.clear


Donc 1 - effacer le contenu des cellules
2 - Ecrire les données voulues

Cordialement,
Jordane,

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
3
Merci
Bonjour,

première chose: Comment éffacer les objets dans une feuille? =>
Un bouton est une forme (Shapes en anglais).

Pour tous les effacer tu peux faire un code comme celui-ci :
Sub Suppr_button()
' Suppr_button Macro
' Macro enregistrée le 06/07/2010 par j_reynet
Dim Sh As Shape
For Each Sh In ActiveSheet.Shapes 'pour chaque "forme" dans la feuille active
    Sh.Delete ' suppression de la forme
Next
End Sub



Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Salut
Plus que de l'aide, c'est de la formation dont tu aurais besoin.
Ce que tu cherches à faire n'est pas compliqué, même pas besoin de coder, à part si tu insiste pour ta MsgBox !

Si tu mets le chiffre équivalent à "consommation" dans la cellule A1
Si tu mets le chiffre équivalent à "distance" dans la cellule B1
Si tu mets le chiffre équivalent à "facteur d'émission" dans la cellule C1
le résultat peut-être affiché dans D1 avec la formule secrète :
= A1 * B1 * C1

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
0
Merci
Bonjour,
Jack a raison, par formule tu peux tout a fait réaliser ta multiplication.

Si toutesfois tu désires quand même le faire par macro, tu peux utiliser un code que celui-ci:
Sub Multiplication()
'definition de la plage contenant les données à multiplier
Dim Ma_plage As Range
    Set Ma_plage = Range("A1:A3")
' Variable contenant le resultat de la mutliplication
Dim Resultat As Variant
    Resultat = 1

For Each cell In Ma_plage        'pour chaque cellule de ma plage....
Resultat = Resultat * cell.Value 'multiplication des valeurs
Next

'recopie dans la feuille Excel
Sheets(1).Range("D1").Value = Resultat

'affichage dans msgbox
MsgBox Resultat

End Sub



Cordialement,
Jordane,
Commenter la réponse de jordane45
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
merci Jordane,

oui je cherchais à coder absolument parce que j'ai une base sous VBA. Je suis capable de lire un programme sans souci mais incapable d'en imaginer un.

merci à toi aussi Jack. En fait je voulais du visuel plus que du calcul Excel. Ce que tu m'a mis en post, je le savais.

Merci beaucoup à vous deux pour vos réponses super rapides.
Commenter la réponse de kikinou765
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
c'est de nouveau moi, comment fait on pour faire la formule suivante de la même manière que le code précédemment demandé :

(A+(B-A)*C/D*E

une boucle est impossible dans ce cas et donc je voudrais bien savoir comment faire

Merci d'avance
Commenter la réponse de kikinou765
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
0
Merci
re,

Si tes données sont dans une feuille Excel : en fait pour lire une cellule il existe plusieurs solutions :
Par exemple : Range("A1").value ou encore : Cells(1,"A").value
exemple : pour ta première valeur (si elle est en A1 )
A = range("A1").value

puis idem pour B C D etc...

Si tes données ne sont pas dans une feuille mais directement dans ton code, tu utilises des variables:
A = 1
B = 5
C = 22
etc...


et ensuite tu mets ta formule :
Resultat = (A+(B-A)*C/D*E



Cordialement,
Jordane,
Commenter la réponse de jordane45
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
merci beaucoup
je suis vraiment dsl de demander des choses aussi basiques mais comme ça je vais apprendre

merci beaucoup
Commenter la réponse de kikinou765
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
Re jordane,

bon en fait le code fonctionne mais je voudrais l'améliorer.

Je voudrais tout d'abord pouvoir charger les données directement sur la feuille excel.

en gros, quand j'ouvre une feuille excel et qu'ensuite j'ouvre la macro, je voudrais que les données écrites s'insère automatiquement. Je crois qu'il faut passer par le workbook mais je n'y connais rien.

Ensuite, dans le code, chaque lecture de donnée se fait en intégrant le numéro de cellule, ce que je voudrais, c'est pouvoir faire une sélection automatique en fonction de ce qu'il y a devant.

par exemple :

si je veux la distance dans mon calcul, je ne veux pas la lire en intégrant manuellement la cellule mais de manière automatique.

je te met le code que j'ai déjà.

Peux-tu m'aider de nouveau.

Sub Multiplication_fretroutier_cas1()
'definition de la plage contenant les données à multiplier
Dim Ma_plage As Range
Set Ma_plage = Range("D3:D5")
' Variable contenant le resultat de la mutliplication
Dim resultat As Variant
resultat = 1

For Each cell In Ma_plage 'pour chaque cellule de ma plage....
resultat = resultat * cell.Value 'multiplication des valeurs
Next

'recopie dans la feuille Excel
Sheets(1).Range("D6").Value = resultat

'affichage dans msgbox
MsgBox (" La quantité de CO2 émise sur le trajet est de " & resultat & " kg ")


End Sub

Sub Multiplication_fretroutier_cas2()
'défnition des variables
Dim emetmoy, emetmax, tonnage, moytonne, distance As String
Dim resultat As Variant


'lecture des données

emetmoy = Range("D10").Value
emetmax = Range("D11").Value
tonnage = Range("D12").Value
moytonne = Range("D13").Value
distance = Range("D14").Value

'calcul des émissions de CO2
A = emetmax - emetmoy
B = tonnage / moytonne

resultat = (emetmoy + (A * B)) * distance

'recopie dans la feuille Excel

Sheets(1).Range("D15").Value = resultat

'affichage dans msgbox

MsgBox (" La quantité de CO2 émise sur le trajet est de " & resultat & " kg ")

End Sub
Commenter la réponse de kikinou765
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
Bonjour Jordane,

donc en fait ce que je voudrais c'est que à partir d'une feuille excel vide, quand je lance la macro, que les cellules vides se remplissent automatiquement des données écrites.

Par exemple, quand je lance la macro, je veux que toto s'inscrive automatiquement dans la cellule.

ensuite, à partir de là, je veux pouvoir faire les calculs de manière automatique avec les données relatives.

je te laisse le fichier excel avec.

En gros, ce que j'ai déjà mis, je veux qu'en lancant la macro ca s'inscrive tout seul dans la feuille et qu'après, les calculs de la macro se fasse sans que j'ai besoin dans le code de dire : je prend ("D10") et je la multiplier avec "D11"
ca je veux que cela se fasse selon l'intitulé de la case avant (en colonne)

je t'ai laisser le lien où j'ai déposé le fichier

http://www.cijoint.fr/cjlink.php?file=cj201007/cijs5aJOAr.xlsm

merci d'avance et bonne journée
Commenter la réponse de kikinou765
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
0
Merci
hello,

quand je lance la macro, je veux que toto s'inscrive automatiquement dans la cellule.


Pour réaliser cette action, tu dois utiliser la gestion des évènements.

Dans l'éditeur de macro, tu va sur ton objet "Workbook" et en haut à droite tu as une liste déroulante dans laquelle tu selelctionne OPEN.
Ca va te générer automatiquement un sub :
Private Sub Workbook_Open()
' ceci te permet de déclencher des actions à l'ouverture de ton classeur
' Par exemple: un message
    Mess = MsgBox("Le classeur est ouvert ^^ ")
End Sub



je veux qu'en lancant la macro ca s'inscrive tout seul dans la feuille


Comment tu choisis ce que tu vas ecrire dans la feuille ?
Les informations à écrire sont où ? dans le code ?


je veux que cela se fasse selon l'intitulé de la case avant (en colonne)

Pour cette partie, j'y ai répondu hier : Il faut que tu utilises les conditions.


@+

Cordialement,
Jordane,
Commenter la réponse de jordane45
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
en fait les informations à écrire sont sur la feuille excel que je t'ai passé
Commenter la réponse de kikinou765
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
de plus, je viens de relire le code d'hier que tu m'as laissé

j'ai compris le principe mais encore une fois, il faut rentrer le nom de la cellule ("C10") hors ce que je souhaite c'est que le programme reconnaisse le nom de la cellule et exécute le calcul
Commenter la réponse de kikinou765
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
0
Merci
Re,

en fait les informations à écrire sont sur la feuille excel que je t'ai passé

Dans ce cas, pourquoi désires tu "Ecrire" les données à l'ouverture du fichier puisqu'elles y sont déjà. Je ne comprend pas.


il faut rentrer le nom de la cellule ("C10") hors ce que je souhaite c'est que le programme reconnaisse le nom de la cellule et exécute le calcul

"Reconnaisse" ? ..; peux tu essayer de mieux m'expliquer ? Tes données sont toujours au même endroit ou c'est justement que tu ne sais pas à l'avance où elle vont se trouver ?
Tu me parles du "Nom de la cellule" ..; tu veux dire Sa valeur non ?




Au cas où, voici de quoi te former sur le VBA :
http://excel.developpez.com/cours/?page=prog



Cordialement,
Jordane,
Commenter la réponse de jordane45
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
en fait je vais garder le fait de dire telle cellule = truc

dans le programme je vais laisser le nom des "C10" etc pour lire les cellules et faire le calcul

par contre pour faire apparaitre les écritures direct dans les cellules en ouvrant la macro je fais comment??

les écritures sont dans le fichier excel que je t'ai donné, en gros comment tu fais pour écrire ce que j'ai écris a la main de manière automatique quand tu ouvre une feuille vierge?
Commenter la réponse de kikinou765
Messages postés
22
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
0
Merci
cool merci c'est ce que je voulais savoir

merci beaucoup Jordane.

je reviendrai certainement vers toi pour d'autre question programme mais déjà j'ai pas mal progressé rien qu'en une journée avec toi
Commenter la réponse de kikinou765
Messages postés
26292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
314
0
Merci
Je t'en prie.
Bon courage .


Cordialement,
Jordane,
Commenter la réponse de jordane45