IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment effectuer des calculs sous VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut Comment effectuer des calculs sous VBA
    Bonjour,
    Mon problème est Comment faire des multiplications et additions pour que le résultat du calcul soit dans une seule cellule en vba
    Je sais faire les additions, soustractions et multiplications individuellement en vba
    Du genre A*B=C, A+B= C etc…
    Mais je ne sais pas, j’ai passé des journées entières là-dessus pour essayer avoir un résultat pour avoir quelque chose (un résultat) qui provient d’une formule du type : A* (B+C)*D=E

    Je vous remercie par avance de votre aide car je bloque complètement

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peux-tu nous donner un exemple précis de ce calcul ?

    E c'est le résultat de ton opération, qu'il faut mettre dans une cellule ?

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut
    Bonjour ,
    oui E c'est le résultat qui devrait s'afficher dans la cellule (mais je n'y arrive pas)
    je vais créer un tableau "fictif "afin que ce soit plus explicite.

    Dans l'exemple ci dessous c'est un peu plus simple mas je veux pouvoir utiliser à la fois les additions et multiplications pour obtenir mon résultat.(sachant que les données changent en fonction des lignes)

    A	            B	                 C                         D	                                          E	
    produits 	quantité	         prix 	frais d'emballage/ transport                  	Résultat	
    café	           12	               1,35	                      5	                                      21,2	ici la formule  utilisée  est  
                                                                                                                 12*1,35)+5 t                                                                                   
    jus de fruit	1   8	                2,52	                     8	                                       53,36	
    Est ce un peu plus explicite?

    Je vous remercie pour votre aide

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    du coup, je me demande qu'est ce qui t'a bloqué ? c'est aussi simple qu'une vulgaire addition

    exemple détaillé, qu'il te suffit d'adapter à ton contexte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Calcul()
    Dim QT As Long 'Quantite
    Dim PU As Double ' Prix Unitaire
    Dim FE As Long 'Frais Emballage
    Dim PT As Double 'Prix Total
     
    ' je déclare les valeurs en dur
    ' mais on peut les récupérer depuis une feuille Excel
    QT = 12   ' QT = Range("A2")
    PU = 1.35
    FE = 5
    PT = QT * PU + FE   ' Range("A5") = QT * PU + FE
    MsgBox PT
     
    End Sub

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour, bonjour !

    Un code semble inutile, pourquoi ne pas utiliser directement les fonctions de feuille de calculs ?!

    Et s'il faut vraiment en passer par un code, comme les données sont dans une feuille de calculs,
    mieux vaut quand même utiliser une fonction d'Excel soit via Application.Sum soit via Evaluate

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut
    non, je ne peux pas
    on m'a demandé de la faire sous vba
    le fichier étant "lourd", je ne peux pas recopier 10 000 cellules fixes. sinon j'aurai fais une formule excel, et le tour serait joué.
    D'où le fait qu'on doit "automatiser", et après il faudrait que par la suite que j'insère des conditions par rapport à une variable.
    Ce que je dois faire est un peu plus complexe d'où le fait que je sois réellement bloquée.
    je vais tout de même tester vos conseils.
    Je vous remercie énormément de m'être venue en aide .
    en espérant que cela fonctionne

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    comment sont organisées les données ?

    Un produit par ligne, dans la Feuil1, avec par exemple :

    - désignation en colonne A
    - Quantité en colonne B
    - Prix Unitaire en colonne C
    - Frais emballage en colonne D

    le résultat doit ressortir comment ? A écrire dans une feuille excel ?

    voici un autre exemple.
    Nous avons les données configurées comme je l'ai spécifié au dessus
    nous voulons un tableau présentant pour chaque article le prix global de la commande : nous l'afficherons dans la Feuil2


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Calcul()
    Dim i As Long
    Dim Tabl()
     
    Tabl = Feuil1.Cells(1, 1).CurrentRegion.Value
    Tabl(1, 2) = "TOTAL PRODUIT"
    For i = 2 To UBound(Tabl, 1)
        Tabl(i, 2) = Tabl(i, 2) * Tabl(i, 3) + Tabl(i, 4)
    Next i
     
    Feuil2.Cells(1, 1).Resize(UBound(Tabl, 1), 2).Value = Tabl
     
    End Sub

    il n'en demeure pas moins, comme souligné par Marc-L, que la simplicité du calcul permet d'utiliser les fonction Excel, utilisables directement en VBA

  8. #8
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut
    Bonjour,
    oui le résultat doit être écrit dans une feuille excel.
    Grâce à vos réponses respectives, j'ai réussi à effectuer une petite partie que je souhaitais réaliser.
    Vous m'avez beaucoup aidé
    Je vous remercie infiniment pour votre aide et votre disponibilité. (joe.levrai, Marc-L).

    Il y a notamment une autre question que je souhaiterai vous poser.

    Sachant que je dois par la suite effectuer des conditions (pour ma part je ne connais qu'avec If - then).
    on me demande de les faire avec "Function" (car apparemment c'est plus simple), mais n'ayant jamais utilisé "Function", j'aurai voulu savoir comment il faudrait que je développe "l'écriture" de cette partie "en théorie".
    (car pour l'instant mes tests ne sont pas opérationnels )

    Encore merci

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Function n'a pas de rapport direct avec une condition !

    Commencer déjà par l'aide VBA …

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    on me demande
    Tu as pas le choix des armes?
    Grâce à Fomular1c1 tu peux écrire ta formule en une seule passe et ensuite grâce à la propriété value de l'objet range tu enlevé ta formule!

    Ainsi tout le monde est content {on me demande } est content et toi tu as ta formule!

  11. #11
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut
    Bonjour;

    Ok Marc-L ,pour l'info
    et rdurupt, malheureusement je n'avais pas le choix de la procédure à utiliser.
    Dans un premier temps j'étais passée par Fomular1c1 (pour comprendre le "fonctionnement", mais je n'avais pas utilisé la propriété value. ça me permet de comprendre d'où pouvais venir mon erreur.
    Merci pour l'info.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Pour exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    range("A2: A123").formular1c1="=""Toto""" ' ici je mets ma formule 
    Range("A2:A123").value = Range("A2:A123").value 'ici je mets la valeur de ma formule
    {on me demande } n'y verra que du feu!

  13. #13
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Function PrixGazBdB(DateDebutLivraison As Date, Instrument As String) As Single
    Dim NombreLignesBdD As Integer
    Dim NumeroLigneBdD As Integer
    Dim DateDebutLivraison As Date
    Dim DateFinLivraison As Date
    Dim ligne As Long
     
     
        NombreLignesBdD = Sheets("PrixGaz").cells(10000, 1).End(xlUp).Row
        NumeroLigneBdD = 2
        PrixGazBdB = 0
      While (NumeroLigneBdD < NombreLignesBdD And PrixGazBdB = 0)
            If (DateDebutLivraison <= Sheets("PrixGaz").cells(NumeroLigneBdD, 5) And DateFinLivraison > Sheets("PrixGaz").cells(NumeroLigneBdD, 6)) Then
                 Sheets ("ExpoGaz3).cells(ligne,16) = sens * (DateFinMtM - DateDebutMtM + 1) * QuantiteLivraisonQuotidienne * (PrixLivraison - PrixMtM) ' (1*)
            End If
            NumeroLigneBdD = NumeroLigneBdD + 1
        Wend
     
    End Function
    End Sub '(2*)
    J 'ai un nouveau problème dans l'exécution de ce cette macro. En effet, j'ai deux erreurs : une qui me dit :"séparateur de liste ou) " et une autre qui me dit"End sub attendu" (cf (1*) . sauf que je l'ai mis le End SUb
    '(cf(2*)) . J' ai mis des astériques afin que vous puissiez repérer ou se trouvent mes bugs

  14. #14
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    1) il te manque une guillemets fermante pour le nom de ton onglet ici


    2) tu est dans une Function : elle se termine par End Function
    ton End Sub n'a rien à faire dans ce code



    maintenant, une Function doit retourner un resultat, ce qui n'est pas le cas ici
    donc on est plutôt sur une Procédure "Sub" qu'une fonction "Function"


    Par ailleurs, ton argument Instrument n'est pas utilisée dans ta fonction, quelle est son utilité ?

    et plus généralement : qu'attend-tu exactement de cette fonction ? J'ai l'impression que tu mets la charrue avant les boeufs (écrire du code au lieu de réfléchir au comportement qu'elle doit adopter en premier lieu)

    tu as des variables déclarées et inutilisées ... et à l'inverse tu utilises des variables non déclarées ou non instanciées dans ton code


    reprend tout à 0 :

    1) ma fonction doit me permettre de réaliser une action standardisée : laquelle
    2) pour tourner correctement, ma fonction a besoin que je lui pose un cadre précis, que je lui transmet par des arguments : lesquels
    3) ma fonction va me retourner un résultat que ma procédure appelante utilisera : quel résultat ?


    quand tu as défini tes trois étapes, tu peux écrire ta fonction !

  15. #15
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut
    En fait par rapport à certaines conditions que j'ai posé dans ma macro soientt celles -ci (en supposant que les contraintes soient respectées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (DateDebutLivraison <= Sheets("PrixGaz").cells(NumeroLigneBdD, 5) And DateFinLivraison > Sheets("PrixGaz").cells(NumeroLigneBdD, 6))
    On prendra les données de la ligne correspondante dans la formule ci-dessous pour obtenir le résultat final
    qui est celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sheets("ExpoGaz").cells(ligne, 16) = sens * (DateFinMtM - DateDebutMtM + 1) * QuantiteLivraisonQuotidienne * (PrixLivraison - PrixMtM)
    Dans le cas contraire on prendra les données de la ligne du dessous, avec les mêmes hypothèses à effectuer, et ainsi de suite (d'où la boucle et les conditions que j'essaie de mettre dans la macro)

    Cela s'effectue entre deux onglets.

    D'où que je fais un "renvoie" à la "sheets "prixgaz".

    Ai-je été plus explicite?


    Merci encore

    et merci du conseil en espérant que je réussisse à l'exécuter correctement

  16. #16
    Invité
    Invité(e)
    Par défaut
    Ce qui me perturbe, c'est que tu utilises un macro qui me paraît bien compliqué alors qu'une formule Excel serait bien suffisante.

    {on ma dit de le faire en VBA} soit mais alors tu gagnerais du temps en utilisant FormulaR1C1 sur la totalité de la plage ta sub ne devrait faire que quelques lignes!

    Note que dans une formule Excel tu peux faire des if and Or!

Discussions similaires

  1. Comment effectuer des modification d'enregistrements sous ACCESS
    Par MichaSarah dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/10/2008, 11h13
  2. Réponses: 1
    Dernier message: 15/06/2006, 16h39
  3. Comment déplacer des fichiers sous perl ?
    Par Ickou dans le forum Langage
    Réponses: 6
    Dernier message: 10/11/2005, 12h17
  4. [NetBeans] Comment creer des Beans sous Netbeans 4.0
    Par Turtle dans le forum NetBeans
    Réponses: 2
    Dernier message: 16/01/2005, 20h44
  5. Réponses: 8
    Dernier message: 18/09/2002, 03h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo