sommer des blocs dan un bloc

sommer des blocs dan un bloc - VB/VBA/VBS - Programmation

Marsh Posté le 28-02-2011 à 12:01:51    

Bonjour,  
 
Je ne suis pas très à l'aise avec VBA.
Je cherche à sommer des tableaux excel entre eux.
Concrètement (et en simplifiant) j'ai un tableau sur feuille 1, par exemple de A1 à D6.
Et je veux que A1 soit la somme des cases A1 des autres feuilles du workbook.
Et que A2 soit la somme des cases A1 des autres feuilles du workbook.
Et ainsi de suite jusqu'à D6.
J'y arrive avec deux boucles encastrées "pour chaque cellule du range considéré" faire "pour chaque feuille du fichier excel" la somme... Ca marche mais c'est très long et poas forcément très propre comme code.
Je me demandais s'il existait quelque chose pour traiter ce genre de cas ? avec des formulaR1C1 ou d'autres astuces dans le genre...
 
Si vous pouviez me donner un petit coup de pouce, ce serait vraiment génial.
 
Merci d'avance.

Reply

Marsh Posté le 28-02-2011 à 12:01:51   

Reply

Marsh Posté le 02-03-2011 à 10:12:55    

Hello
 
Pour moi ce qu'il y a de plus simple c'est un truc comme ca :

Code :
  1. Function zcoquelicot(Cell As Range, OngletCalc)
  2. 'Cell la cellule a sommer, OngletCalc l'onglet _
  3. sur lequel on va sommer, histoire de l'exclure des calculs
  4. 'Pour que ca se recalcule si tu changes les valeurs des autres onglets
  5.     Application.Volatile
  6. 'on compte le nb d'onglet du classeur en cours
  7.     NbSheet = ActiveWorkbook.Worksheets.Count
  8. 'on passe sur chaque onglet et on somme les valeurs de Cell. _
  9. A toi de rajouter des tests au cas où tu ai du texte etc.
  10.     For x = 1 To NbSheet
  11. 'Si l'onglet est different de celui sur lequel doit apparaitre la somme
  12.         If ActiveWorkbook.Worksheets(x).Name <> OngletCalc Then
  13. 'on somme
  14.             Som = Som + ActiveWorkbook.Worksheets(x).Range(Cell.Address)
  15.         End If
  16.     Next
  17.    
  18.     zcoquelicot = Som
  19. End Function


 
Sur ta feuille où tu veux ton calcul des A1 tu saisis :
=zcoquelicot (A1;"Nom_De_Ta_Feuille_Ou_Tu_Veux_Ton_Calcul" )
 
Je ne passe pas par un ActiveSheet car si tu changes le A1 d'une feuille, le Volatile refait passer par la fonction, et l'ActiveSheet se retrouve etre l'autre onglet.


Message édité par SuppotDeSaTante le 02-03-2011 à 10:14:22

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-03-2011 à 13:37:52    

Bonjour dje69r
 
Merci de m'avoir répondu.
Ta réponse revient un peu au même que ma solution : dans le fonction on boucle sur les onglets et il faut appeler cette fonction en bouclant sur les cellules du range.
 
Il se trouve que finalement je n'ai pas besoin de cette manip donc ce n'est pas très important, à part pour satisfaire ma curiosité...

Reply

Marsh Posté le 02-03-2011 à 13:54:13    

Tu ne boucles pas sur le range puisque c'est un parametre de la fonction.
Une copie incrementielle et pas besoin de boucle.
Quant a passer par des Formula, le jour ou tu ajoutes un onglet c'est dead.
 
Ou alors je ne pige pas ou tu veux en venir...


---------------
Soyez malin, louez entre voisins !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed