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 :

Calcul d'une somme en VBA [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Par défaut Calcul d'une somme en VBA
    Bonjour, je débute dans le VBA et j'aimerais faire un calcul de somme.
    Néanmoins, j'ai un document Excel avec deux colonnes. La première avec le "Montant des opérations" et la deuxième avec "La date des opérations".

    L'idéal serait de pouvoir calculer la somme de toutes les opérations effectuées la même année. Donc en rentrant 2009 par exemple, le programme sélectionnera toutes les cases avec 2009 dans la colonne "Date des opérations" ensuite, il additionnera les cellules correspondantes dans la colonne "Montant des opérations"
    Le résultat final sera noté dans une seconde feuille du classeur excel.

    Voici le code VBA que j'ai pour l'instant, mais je n'arrive pas à la faire fonctionner.

    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
    21
    22
    Sub resultat()
     
    Dim annee As String
    Dim somme As Integer
    Dim i As Integer
    Dim z As Integer
     
    While ThisWorkbook.Worksheets("feuille1").Cells(b, i)
    i = i + 1
    Wend
     
    annee = Mid(Range("bi"), 7, 4)
    MsgBox "L'année dérisrée est " & annee
     
    If annee = InputBox("L'année dérisrée est : ") Then
    Worksheets("Ventes").Range("Di").Select = z
    somme = somme + z
    End If
     
    Worksheets("feuille2").Range("a5").Value = somme
     
    End Sub
    Pouvez-vous m'aider en me donnant quelques conseils?

    En vous remerciant d'avance!

    Ps: j'ai mi mon document Excel en pièce jointe pour plus de compréhension
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    Sans vba
    en Feuil2 tu as tes données:
    A2:A100: les dates des opérations
    B2:B100: les montants correspondants

    en A1 de Feuil1 tu mets l'année
    en B1 la formule suivante qui te donnera le cumul pour l'année:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((ANNEE(Feuil2!A2:A100)=A1)*(Feuil2!B2:B100))
    Sinon, un tableau croisé dynamique avec groupement sur les années te donnera le résultat.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Par défaut
    Bonsoir et merci pour la réponse.

    C'est en effet plus facile sans Vba, mais j'aimerais bien lier le programme à un commandebouton qui permettrait de:
    - En le lançant, il demanderait l'année à la personne qui utilise le programme
    - Le programme calcul la somme et finalement la donne.

    Mais comme c'est pas toujours moi qui utiliserai cette application, ce serait plus facile de le faire en vba je pense.

    Il y a moyen de faire un tableau croisé dynamique avec groupement sur les années sur vba? Si oui, comment est-ce que je pourrais le faire?

    Merci encore pour la réponse très rapide

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut,concernant les TCD pour 200 7 http://silkyroad.developpez.com/excel/tcd/
    sinon dans la FAQ http://excel.developpez.com/faq/?page=TCD
    voire même http://excel.developpez.com/sources/...tTableUserForm

    Tout cela en utilisant l'enregistreur de macros te permettra de créer ton TCD

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    Si tu tiens au vba pour cette simple action, je traduis en vba la formule donnée précédemment (en fait l'évaluation de la formule)

    sur le même principe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click()
    Dim Annee As Variant
     
    Annee = InputBox("L'année désirée est: ")
    If Val(Annee) > 0 Then
        With Sheets("Feuil1")
            .Range("A1").Value = Annee
            .Range("B1").Value = Evaluate("SUMPRODUCT((YEAR(Feuil2!A2:A100)=" & Annee & ")*(Feuil2!B2:B100))")
        End With
    End If
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses!

    J'ai essayé votre code VBA dans mon documents, mais malheureusement il n'arrive pas à calculer la somme des montants dans la première colonne...
    Est-ce que j'ai mal adapté le code à mon document?

    Est-ce qu'avec un code comme celui-ci, ça irait mieux? Celui-ci fonctionne pas non plus mais je pense que ça vient de la fonction Mid...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With Worksheets("Feuil1")
    For i = 2 To n
          If Mid(.Range("Bi", 7, 4)) = Annee Then
          somme = somme + Val(.Cells(A, i))
          End If
       Next i
     
    End With
     
    With Sheets("Feuil2")
            .Range("A1").Value = Annee
            .Range("B1").Value = somme
    End With
    Merci encore pour vos précédentes réponses!

    Nishruu
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    Bien sûr tu n'as pas adapté à tes colonnes de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click()
    Dim Annee As Variant
     
    Annee = InputBox("L'année désirée est: ")
    If Val(Annee) > 0 Then
        With Sheets("Feuil2")
            .Range("A1").Value = Annee
            .Range("B1").Value = Evaluate("SUMPRODUCT((YEAR(Feuil1!B2:B100)=" & Annee & ")*(Feuil1!A2:A100))")
        End With
    End If
    End Sub
    PS: Il est souhaitable d'éviter les boucles s'il y a une méthode directe.


    EDIT:

    Pour ton code en boucle, regarde ceci
    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
    21
    Private Sub CommandButton1_Click()
    Dim Annee As Variant
    Dim Somme As Double
    Dim i as Long
     
    Annee = InputBox("L'année désirée est: ")
    If Val(Annee) > 0 Then
        With Worksheets("Feuil1")
            For i = 2 To 100
                If Mid(CStr(.Range("B" & i)), 7) = Annee Then
                    Somme = Somme + Val(.Range("A" & i))
                End If
            Next i
     
        End With
        With Sheets("Feuil2")
            .Range("A1").Value = Annee
            .Range("B1").Value = Somme
        End With
    End If
    End Sub

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Par défaut
    Merci beaucoup, tout fonctionne!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Calcul d'une Somme en VBA
    Par IronBibs dans le forum Excel
    Réponses: 2
    Dernier message: 03/11/2009, 15h21
  2. [Excel] Calcul d'une somme sous condition
    Par netsabes dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/08/2006, 16h09
  3. Calcul d'une somme dans Excel ??
    Par LaVaZza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/06/2006, 22h55
  4. [TCP/IP][CRC] Calcul d'une somme XOR
    Par cyrdec dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 29/05/2006, 17h42
  5. access : calcul d'une somme de 0 sans valeur par défaut
    Par ericbelgium dans le forum Access
    Réponses: 6
    Dernier message: 06/10/2005, 09h05

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