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 :

Somme de cellules vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Par défaut Somme de cellules vba
    Bonjour à tous,

    J'ai un fichier excel contenant plus de 65000 lignes.

    Dans la colonne A de mon fichier on retrouve
    en ligne 1 (A1): le budget
    en ligne 2 (A2) : la depense
    en ligne 3 (A3): l'ecart (qui est la difference entre le budget et la depense)

    Dans la colonne B on retrouve

    en ligne1 (B1): le nom d'une piece (en reference au budget de la piece)
    en ligne2 (B2): le nom d'une piece (en reference à la depense en colonne A)
    en ligne3 (B3): erreur ou ok en reference à l'ecart de la ligne A3

    Dans les colonnes C à U
    les valeurs du buget, de la depense et de l'ecart

    ces trois lignes sont repetés ensuite pour chaque type de piece (piece 1 => 3 lignes, piece2 => 3 lignes ainsi de suite jusqu'à la derniere piece

    Je souhaite ecrire une macro qui detecte lorque la ligne 3 l'ecart est negative. Et si l'ecart est negatif alors il calcule la somme de tous les ecarts negatifs pour chaque colonne.

    Cette somme de tous les ecarts sera mis en derniere ligne du tableau.

    Je bloque toujours sur des choses simples (enfin si ca l'est).

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 317
    Par défaut
    Bonjour,

    Si j'ai bien tout compris....

    Pour info, 0.6 seconde pour 49152 Lignes * 19 colonnes

    Le résultat est inscrit par colonne dans la 1ère cellule vide

    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
    Sub ecart()
    Dim Derlig As Long, I As Long
    Dim J As Byte
    Dim Total As Object
    Dim Tblo
    Set Total = CreateObject("Scripting.Dictionary")
    Derlig = Cells(Rows.Count, 1).End(xlUp).Row
    For J = 3 To 21
        Tblo = Range(Cells(3, J), Cells(Derlig, J)).Value
        For I = LBound(Tblo) To UBound(Tblo) Step 3
            If Tblo(I, 1) < 0 Then Total(0) = Total(0) + Tblo(I, 1)
        Next I
        Cells(Derlig + 1, J).Value = Application.Transpose(Total.Items)
        Total.RemoveAll
    Next J
    End Sub
    Bonne soirée, et Bon W-E

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Par défaut
    Salut,

    Merci pour ton aide.

    cependant quand je lance ta macro, j'ai une erreur d'execution: erreur de compatibilité sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Derlig + 1, J).Value = Application.Transpose(Total.Items)
    C'est du à quoi?

    Aussi tu peux m'expliquer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Total = CreateObject("Scripting.Dictionary")

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 317
    Par défaut
    Bonsoir,

    Effectivement, si tu n'as pas d'écart négatif dans une colonne, tu auras ce message d'erreur....

    Modifies le code ainsi :

    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
    Sub ecart()
    Dim Derlig As Long, I As Long
    Dim J As Byte
    Dim Total As Object
    Dim Tblo
    Set Total = CreateObject("Scripting.Dictionary")
    Derlig = Cells(Rows.Count, 1).End(xlUp).Row
    For J = 3 To 21
        Tblo = Range(Cells(3, J), Cells(Derlig, J)).Value
        For I = LBound(Tblo) To UBound(Tblo) Step 3
            If Tblo(I, 1) < 0 Then Total(0) = Total(0) + Tblo(I, 1)
        Next I
        If Total.Count > 0 Then
            Cells(Derlig + 1, J).Value = Application.Transpose(Total.Items)
            Total.RemoveAll
        End If
    Next J
    End Sub
    Pour ta 2ème question, j'utilise un objet "Dictionary", qui est beaucoup plus rapide qu'un objet "Collection", et qui est un tableau à 1 dimension.
    On peut obtenir une valeur par une clé.
    Cet objet est très utile notamment pour générer des listes sans doublons.

    Bon courage

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Par défaut
    Salut Mapeh,

    Merci pour ton aide!

    J'ai juste enlever le step 3 pour eviter qu'il saute à chaque fois trois colonnes.

    Un grand merci!!!!!

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

Discussions similaires

  1. [XL-2010] Code VBA: somme de cellules avec boucle unique
    Par Thomas4530 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2014, 05h16
  2. Somme des cellules non vides en VBA
    Par baldg dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/03/2008, 00h44
  3. somme conditionnelle sous VBA
    Par léclaireur dans le forum Général VBA
    Réponses: 5
    Dernier message: 26/04/2007, 10h32
  4. sommes de cellules
    Par psunk dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/09/2006, 10h49
  5. somme de cellule avec une condition
    Par fullcircle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/06/2006, 07h17

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