MsgBox Somme de cellules différentes sur plusieurs feuilles

schdr

XLDnaute Nouveau
Bonjour à tous,

Je m'arrache les cheveux depuis ce matin pour créer une macro de vérification:

Je souhaiterai additionner les dernières cellules remplies (Total) dans plusieurs feuilles de mon classeur (mais pas toutes), et faire apparaitre le total dans un MsgBox. Les cellules sont toutes dans la même colonne, mais pas sur la même ligne.

Par ailleurs (en bonus), je souhaiterai pouvoir afficher les totaux de plusieurs colonnes dans la MsgBox:
ex: Salaire: x€
Prime: x€
etc...

Je joint un petit fichier: il s'agit de faire la somme d'une part de la colonne C, d'autre part de la colonne D, sur les feuilles A et B (mais pas sur la C). Sachant que sur le fichier d'origine, le nombre de feuilles est appelé à changer.

J'ai pensé à faire une boucle, mais ça ne garde pas la cellule de la feuille précédente en mémoire...

Pouvez-vous m'aider ?

Merci !
 

Pièces jointes

  • exemple.xlsx
    18.6 KB · Affichages: 49
  • exemple.xlsx
    18.6 KB · Affichages: 54

youky(BJ)

XLDnaute Barbatruc
Re : MsgBox Somme de cellules différentes sur plusieurs feuilles

Bonjour,
Voici une petite macro
Qu'importe le nombre d'onglets seul le dernier n'est pas comptabilisé
Bruno
Code:
Sub addition()
For onglet = 1 To Sheets.Count - 1 ' -1 pour pas prendre le dernier onglet
With Sheets(onglet)
salaire = salaire + .Cells(.[C65000].End(3).Row, 3)
' .[C65000].End(3).Row   renvoie la derniere lig de col C
prime = prime + .Cells(.[D65000].End(3).Row, 4)
End With
Next
MsgBox "Salaires: " & salaire & " €" & vbCr & "Primes : " & prime & " €", vbInformation, "INFORMATION"
End Sub
 

Modeste

XLDnaute Barbatruc
Re : MsgBox Somme de cellules différentes sur plusieurs feuilles

Bonjour schdr,

Les cellules sont toutes dans la même colonne, mais pas sur la même ligne.
On devrait donc pouvoir écrire quelque chose comme:
VB:
Sheets("le_nom_de_la_feuille").Cells(Rows.Count, 3).End(xlUp)
... qui donnerait la valeur de la dernière cellule non-vide, en colonne C

les feuilles A et B (mais pas sur la C). Sachant que sur le fichier d'origine, le nombre de feuilles est appelé à changer
Et donc, en clair, tu veux une boucle sur toutes les feuilles sauf la feuille "C" ... ou tu veux passer en revue une série de feuilles du classeur, dont la liste serait inscrite dans le code, sous forme d'un Array?
Dans le premier cas, on pourrait faire:
VB:
for each sh in worksheets
    if sh.name<>"C" then (le reste du code)
next sh

dans le second:
VB:
TabloFeuilles=array("A", "B")
for i=0 to ubound(tabloFeuilles)
    'l'accès à chaque feuille se faisant par:
    sheets(tabloFeuilles(i)) ...
next i

Salut Bruno :)
 
Dernière édition:

schdr

XLDnaute Nouveau
Re : MsgBox Somme de cellules différentes sur plusieurs feuilles

Merci à tous les deux pour vos réponses,

youky, j'ai testé ton code (un peu adapté), mais la somme est égale à 0 (ce qui n'est pas possible).

mais peut-être ai-je fait une erreur ?

Code:
Sub addition()

For i = 1 To Sheets.Count 
Sheets(i).Activate
'exclusion des feuilles non concernées
If Sheets(i).Name <> "TABLE TX CHANGE & CHARGES" And _
    Sheets(i).Name <> "SORTIES" Then
With Sheets(i)
salaire2014 = salaire2014 + .Cells(.[aj65000].End(3).Row, 3)
' .[C65000].End(3).Row   renvoie la derniere lig de col C
salaire2015 = salaire2015 + .Cells(.[am65000].End(3).Row, 3)
End With
End If
Next i

MsgBox "salaire 2014: " & salaire2014 & " €" & vbCr & "salaire 2015 : " & salaire2015 & " €", vbInformation, "INFORMATION"

End Sub

Merci
schdr
 

youky(BJ)

XLDnaute Barbatruc
Re : MsgBox Somme de cellules différentes sur plusieurs feuilles

Le 3 à la fin de la ligne correspond au N° de colonne soit 3
La colonne AJ est 36 donc remplacer 3 (tout à la fin) par 36


salaire2014 = salaire2014 + .Cells(.[aj65000].End(3).Row, 3)
et AM à 39


Je pense que c'est bon
Bruno
 

Discussions similaires

Statistiques des forums

Discussions
315 088
Messages
2 116 089
Membres
112 658
dernier inscrit
doro 76