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 en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Par défaut somme en VBA
    Bonjour,
    je dois faire des sous totaux dans un tableau. Ma colonne A de libellés n'est pas construite avec des cellules contigues (question de présentation).
    Voici le code que j'ai fais, seulement, il ne marche pas, le resultat affiché n'est pas correct.

    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
     
    Dim LigneTotal, colTotal As Variant
    LigneTotal = Range("A65536").End(xlUp).Address
    LigneTotal = Range(LigneTotal).Row
    For col = 2 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
    If Cells(4, col) = "2006" Or Cells(4, col) = "2007" Then 'le sous totaux ne se font que sur les colonnes "2006" et "2007"For Rw = 5 To LigneTotal - 1
    If Cells(Rw, 1) Like "Total*" Then 'pour repérer la ligne où il faut mettre le résultat du ss totalFor LigneNonVide = 5 To LigneTotal - 1
    If Not IsEmpty(Cells(LigneNonVide, 1)) Then
    Cells(Rw, col) = Cells(Rw, col) + Cells(LigneNonVide, col).Value
    End If
    Next LigneNonVide
    End If
    Next Rw
    End If
    Next col
    Je ne comprends pas pourquoi le code me donne des résultats faux, si qqun peut m'aider...

    Merci d'avance,

    Livet

  2. #2
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 36
    Par défaut

    pour plus de lisibilité, j'ai repris exactement ton code en y ajoutant des lignes vides et des indentations (et je t'invite à utiliser ce type de présentation du code pour qu'on te lise mieux) :
    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
     
    Dim LigneTotal, colTotal As Variant
     
    LigneTotal = Range("A65536").End(xlUp).Address
    LigneTotal = Range(LigneTotal).Row
     
    For col = 2 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
       If Cells(4, col) = "2006" Or Cells(4, col) = "2007" Then 'le sous totaux ne se font que sur les colonnes "2006" et "2007"For Rw = 5 To LigneTotal - 1
          If Cells(Rw, 1) Like "Total*" Then 'pour repérer la ligne où il faut mettre le résultat du ss totalFor LigneNonVide = 5 To LigneTotal - 1
             If Not IsEmpty(Cells(LigneNonVide, 1)) Then
                Cells(Rw, col) = Cells(Rw, col) + Cells(LigneNonVide, col).Value
             End If
             Next LigneNonVide
          End If
          Next Rw
       End If
    Next col
    => à quelles instructions for se rapportent les instructions Next LigneNonVide et Next Rw ?
    @+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 95
    Par défaut
    ha ouai lol, c'est beaucoup plus frappant les next qu'il ne devrai pas y avoir après que tu t'en sois occupé.
    Merci parce que je n'avait pas franchement envie de déchiffrer le code.

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Par défaut
    Mince, le message a été envoyé avant que je ne le termine...

    Voici le code présenté comme il faut:

    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
     Dim LigneTotal, colTotal As Variant
    LigneTotal = Range("A65536").End(xlUp).Address
    LigneTotal = Range(LigneTotal).Row
    For col = 2 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
        If Cells(4, col) = "2006" Or Cells(4, col) = "2007" Then
            For Rw = 5 To LigneTotal - 1
                If Cells(Rw, 1) Like "Total*" Then
                    For LigneNonVide = 5 To LigneTotal - 1
                        If Not IsEmpty(Cells(LigneNonVide, 1)) Then
                        Cells(Rw, col) = Cells(Rw, col) + Cells(LigneNonVide, col).Value
                        End If
                    Next LigneNonVide
                End If
            Next Rw
        End If
    Next col
    et voici le code avec la déclaration d'une plage de cellules:

    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
     For col = 2 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
        If Cells(4, col) = "2006" Or Cells(4, col) = "2007" Then
            For Rw = 5 To LigneTotal - 1
                If Cells(Rw, 1) Like "Total*" Then
                    For LigneNonVide = 5 To LigneTotal - 1
                        Do While Range("A" & LigneNonVide) <> ""
                        Set PlageNonVide = Range(" & col & " & " & LigneNonVide & ")
                        Loop
                    ssTot = Application.ActiveSheetFunction.Sum(PlageNonVide)
                    Cells(Rw, col).Value = ssTot
                    Next LigneNonVide
                End If
            Next Rw
        End If
    Next col
    Aucun des deux ne marche, et la solution dépasse peut être mes compétences actuelles

    J'espère que les codes sont clairs, et que vous pourriez m'éclairer.

    Merci d'avance,

    Livet

  5. #5
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 36
    Par défaut
    Bonjour,
    J'ai fait tourner ton code, il ne plante pas.
    Maintenant si tu considère qu'il ne remplit pas la fonction voulue, c'est un problème de conception de ton algo
    A+

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Par défaut
    oui, effectivement, il ne plante pas (sauf pour le deuxième chez moi), mais il marche pas pour autant. Dans le premier code, la somme affichée n'est pas correcte, et je comprends pas quels chiffres il (le programme) prend pour faire la somme...

    Merci bcp pour cette précision!!
    Et dans l'idée, c'est donc possible d'additionner toutes les cellules contenues dans une même plage de données? (la valeur des cellules, leur contenu)

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par dam2p Voir le message
    Bonjour,
    J'ai fait tourner ton code, il ne plante pas.
    Je te crois puisque je n'ai pas testé et c'est très étonnant.
    Essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Plage
    Col = 1
    Set Plage = Worksheets("Feuil1").Range(Cells(1, Col), _
                   Cells(10, Col))
    sstot = Application.WorksheetFunction.Sum(Plage)
    Cells(25, 1) = sstot
    Et ce n'est pas ActiveSheetFunction mais WorksheetFunction

    Edit
    Où Range(Cells(1, Col), Cells(10, Col)) désigne la plage entre la ligne 1 et 10 dont tu veux le sous-total

Discussions similaires

  1. Somme Produit VBA
    Par askan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/02/2010, 14h56
  2. [XL-2007] Calcul Somme en VBA
    Par IronBibs dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/11/2009, 15h30
  3. [XL-2007] Calcul d'une Somme en VBA
    Par IronBibs dans le forum Excel
    Réponses: 2
    Dernier message: 03/11/2009, 15h21
  4. Nombre arguments formule SOMME en VBA
    Par Mickael Scofild dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/09/2009, 18h00
  5. Somme colonne VBA sans boucle
    Par sissi00000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2008, 10h44

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