[VBA-EXCEL{DONE} faire la somme des cellules A1 de toutes les feuilles

[VBA-EXCEL{DONE} faire la somme des cellules A1 de toutes les feuilles - VB/VBA/VBS - Programmation

Marsh Posté le 10-11-2005 à 13:59:59    

http://img149.imageshack.us/img149/6114/sanstitre29qa.jpg
 
je voudrais que les cellules A1 des differentes feuilles soit additionnées et que le resultat s affiche ds la feuille "total"  
 
mais le hiq c est que les feuilles peuvent etre supprimées et que des nlles peuvent etre creés
 
merci d'avance
 
sachant que j'utilise deja cette fonction pour recuperer les noms des feuilles  
 

Code :
  1. Sub Aff_Feuilles()
  2.     Dim i
  3.      'ta variable d'array
  4.      Dim ListeFeuil() As Variant
  5.      ReDim Preserve ListeFeuil(Worksheets.Count - 1)   '(-1) car les arrays comencencent à 0 et pas 1
  6.      'remplir l'array
  7.      For i = 0 To (Worksheets.Count - 1)
  8.           ListeFeuil(i) = Sheets(i + 1).Name
  9.      Next i
  10.      'affecter l'array sur la listbox
  11.      ListBoxAccRapid.List() = ListeFeuil
  12.      ListBoxSuppr.List() = ListeFeuil
  13. End Sub


Message édité par sakuraba le 10-11-2005 à 16:50:37
Reply

Marsh Posté le 10-11-2005 à 13:59:59   

Reply

Marsh Posté le 10-11-2005 à 14:10:31    

je pense que ça serait du style
 

Code :
  1. Sheets("Total".Range("A1" ).Value =sheets(nom_de_feuille).range("A1" )+sheets(nom_des_feuille).range("A1" ) ....

Reply

Marsh Posté le 10-11-2005 à 14:25:35    

Bon tu as plusieurs mèthodes pour faire ça, je vois pas trop le rapport avec ta listbox mais bon...
Voilà la petite macro qui te permet de passer sur toutes les feuilles de ton classeur pour faire ton calcul:

Code :
  1. Sub TotalGeneral()
  2. Dim i, PrixHT
  3. PrixHT = 0
  4. For i = 2 To Worksheets.Count
  5.      PrixHT = PrixHT + Sheets(i).Range("A1" ).Value
  6. Next i
  7. Sheets("Total" ).Activate  ' Attention ta feuille total doit rester en position 1
  8. Range("A1" ).Value = PrixHT
  9. End Sub


C'est une macro que tu peut appeler de différentes manières : soit sur un commandbutton soit dans la sub worksheet_activate de ta feuille total.
A toi de voir
:)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 14:25:36    

Non! crée toi une collection de feuille, parcours la collection et hop!
ex:
Dim Mon_tot As Long     'ou autre suivant valeurs attendues
Dim Tot_exist As Boolean
For Each ws In Worksheets
    If LCase(ws.Name) <> "total" Then
    Mon_tot = Mon_tot + ws.Range("a1" )
    Else
    Tot_exist = True
    End If
Next ws
If Tot_exist Then Worksheets("Total" ).Range("A1" ).Value = Mon_tot

Reply

Marsh Posté le 10-11-2005 à 14:30:18    

Lol 1 seconde ;) le 'Non!' était pour sakuraba  :)

Reply

Marsh Posté le 10-11-2005 à 14:35:47    

Nota : sur la macro que je t'ai donné pour la listbox contenant les nom de feuilles :
 
   Tous les nom de tes feuilles sont contenu dans ListeFeuil
    Listbox.value ne renvois que le ou les nom sélectionés dans ton userform :)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 14:36:35    

dahlo a écrit :

Lol 1 seconde ;) le 'Non!' était pour sakuraba  :)


lollllllllll t'as de la chance je m'en suis doutée ;)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 14:51:10    

Code :
  1. Sub TotalGeneral()
  2. Dim i, PrixHT
  3. PrixHT = 0
  4. For i = 2 To Worksheets.Count
  5.      PrixHT = PrixHT + Sheets(i).Range("B29" ).Value
  6. Next i
  7. Sheets("Total" ).Activate  ' Attention ta feuille total doit rester en position 1
  8. Range("B29" ).Value = PrixHT
  9. End Sub


 
j'ai une erreur 13 incompatibilité de type

Reply

Marsh Posté le 10-11-2005 à 14:55:18    

desolé j'avais une erreur
 

Reply

Marsh Posté le 10-11-2005 à 14:55:36    

hummm sur kelle ligne ? J'ai aucune erreur chez moi...
 
Tu l'as placé ou ton code ?
 
 
edit : Je me disait bien aussi :) :D  :whistle:


Message édité par watashi le 10-11-2005 à 14:56:26

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 14:55:36   

Reply

Marsh Posté le 10-11-2005 à 15:02:01    

C etait dans ma cellule "maison"  
 
sinon je voudrais le faire pour toutes les cellules B5 à F27
 
tu conseilles quoi ?  
 

Reply

Marsh Posté le 10-11-2005 à 15:21:39    

Code :
  1. Dim i, x
  2.     x = 5
  3.     For i = 3 To Worksheets.Count
  4.         For x = 5 To 27
  5.             PrixHT = PrixHT + Sheets(i).Range("B" & x).Value
  6.         Next x
  7.     Next i
  8.     Sheets("Total" ).Activate
  9.     Range("B" & x).Value = PrixHT


 
perso je suis un peu perdu avec les boucles et les variables

Reply

Marsh Posté le 10-11-2005 à 15:22:16    

sakuraba a écrit :

C etait dans ma cellule "maison"


ben rajoute un controle sur le fait que la valeur soit numérique.

sakuraba a écrit :


sinon je voudrais le faire pour toutes les cellules B5 à F27
 
tu conseilles quoi ?

La tu corse le smilblick mais avec un array mouscaustaud c'est gérable en une seule macro.  
Question : tu l'as placé ou le calll TotalGeneral ?  
Edit : Tu veux un seul total pour tous les montants de la plage B5 F27 de toutes tes pages ou tu veux en b5 la somme des B5 en B6 la somme des B6....
edit 2 : je m'était trompe dans les quote


Message édité par watashi le 10-11-2005 à 15:29:12

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 15:25:20    

je veux en b5 la somme des B5 en B6 la somme des B6....
 
je l ai placé sur un bouton pour l instant apres je veux que ça se fasse à chaque modif de feuilles


Message édité par sakuraba le 10-11-2005 à 15:26:40
Reply

Marsh Posté le 10-11-2005 à 15:29:44    

pour le b j'ai fait ça qui marche  
 

Code :
  1. For x = 5 To 27
  2. Dim i, PrixHT
  3.     PrixHT = 0
  4.     For i = 3 To Worksheets.Count
  5.         PrixHT = PrixHT + Sheets(i).Range("B" & x).Value
  6.     Next i
  7.     Sheets("Total" ).Activate  ' Attention ta feuille total doit rester en position 1
  8.     Range("B" & x).Value = PrixHT
  9.     Next x

Reply

Marsh Posté le 10-11-2005 à 15:39:25    

Ok  
Pourquoi à chaque modif de feuille il n'y a aucun interet a faire recalculer 50 fois tous les totaux si tu ne les as pas en visuel. C'est pour ça que je te parlais du recalcul uniquement au réaffaichage de la page total. Penses y parce qu'avec 110 totaux de recalculés a chaque fois que tu change 1 cellules ça risque de te ralentir drôlement ton classeur...


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 15:43:45    

oui c est vrai  
 
pas contre  
 
il faudrait rajouter un for mais avec des lettres pour remplacer le B par  
 
B,C,D,E,F  
 
et ainsi obtenir ce que je veux
 

Code :
  1. Sub TotalB()
  2. Dim x, y
  3. For y = B to F
  4. For x = 5 To 27
  5.     Dim i, PrixHT
  6.         PrixHT = 0
  7.         For i = 3 To Worksheets.Count
  8.            PrixHT = PrixHT + Sheets(i).Range(y & x).Value
  9.         Next i
  10.          Sheets("Total" ).Activate  ' Attention ta feuille total doit rester en position 1
  11.          Range(y & x).Value = PrixHT
  12. Next x
  13. next y
  14. End Sub

Message cité 1 fois
Message édité par sakuraba le 10-11-2005 à 15:45:23
Reply

Marsh Posté le 10-11-2005 à 15:57:55    

Bon voilà en fait c'est puls simple que je le pensais, j'ai trouvé une méthode sans mettre en place d'array, en faisant un cacul imédiat.
Dans l'entête du module :

Code :
  1. Option Explicit
  2. Public l, c


Dans ta feuille Total (marche aussi en sub commandbutton_click) :

Code :
  1. Private Sub Worksheet_Activate()
  2. ' l est la variable pour le numéro de ligne
  3. ' pour les lignes de 5 à 27
  4. For l = 5 To 27
  5.      ' c est la variable pour toutes les colones de b à F soit de 2 à 6
  6.      For c = 2 To 6
  7.           'tu lances ta macro
  8.           Call TotalGeneral
  9.      Next c
  10. Next l
  11. End Sub


la macro elle change un peu :

Code :
  1. Sub TotalGeneral()
  2. Dim f
  3. ' f est la variable du numéro de feuille
  4. Dim PrixHT
  5. PrixHT = 0
  6. 'Pour chaque feuille de 2 à la fin
  7. For f = 2 To Worksheets.Count
  8. 'Ajout de la vérification au cas une valeur non numérique soit dans une de tes feuilles
  9.      If IsNumeric(Sheets(f).Cells(l, c).Value) Then
  10.            'La valeur est numérique
  11.            PrixHT = PrixHT + Sheets(f).Cells(l, c).Value
  12.      Else
  13.           'La valeur n'y est pas donc message :
  14.           MsgBox ("Attention dans la feuille : " & Sheets(f).Name & vbCrLf _
  15.                 & "La valeur de la cellule : " & Cells(l, c).Address & vbCrLf _
  16.                 & " n'est pas numérique." & vbCrLf & _
  17.                 "Le cacul a continué sans tenir compte de cette cellule." )
  18.      End If
  19. Next i
  20. Sheets(1).Activate  ' Attention ta feuille total doit rester en position 1
  21. Cells(l, c).Value = PrixHT
  22. End Sub


voilà
bon courage


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 16:02:05    

sakuraba a écrit :

il faudrait rajouter un for mais avec des lettres pour remplacer le B par  
 
B,C,D,E,F


 
Oui j'ai utilisé le cells(l,c) au lieu du range, range j'ai jamais su l'utiliser piour faire varier les colones, donc : cells(numéro_de_ligne, numero_de_colone)
 :sol:


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 10-11-2005 à 16:50:14    

merci bcp

Reply

Sujets relatifs:

Leave a Replay

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