Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1643 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1243162
sakuraba
Posté le 10-11-2005 à 13:59:59  profilanswer
 

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
mood
Publicité
Posté le 10-11-2005 à 13:59:59  profilanswer
 

n°1243171
sakuraba
Posté le 10-11-2005 à 14:10:31  profilanswer
 

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" ) ....

n°1243187
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 14:25:35  profilanswer
 

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 ;-)
n°1243188
dahlo
Posté le 10-11-2005 à 14:25:36  profilanswer
 

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

n°1243193
dahlo
Posté le 10-11-2005 à 14:30:18  profilanswer
 

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

n°1243199
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 14:35:47  profilanswer
 

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 ;-)
n°1243200
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 14:36:35  profilanswer
 

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 ;-)
n°1243216
sakuraba
Posté le 10-11-2005 à 14:51:10  profilanswer
 

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

n°1243221
sakuraba
Posté le 10-11-2005 à 14:55:18  profilanswer
 

desolé j'avais une erreur
 

n°1243223
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 14:55:36  profilanswer
 

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 ;-)
mood
Publicité
Posté le 10-11-2005 à 14:55:36  profilanswer
 

n°1243234
sakuraba
Posté le 10-11-2005 à 15:02:01  profilanswer
 

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

n°1243267
sakuraba
Posté le 10-11-2005 à 15:21:39  profilanswer
 

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

n°1243271
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 15:22:16  profilanswer
 

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 ;-)
n°1243276
sakuraba
Posté le 10-11-2005 à 15:25:20  profilanswer
 

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
n°1243280
sakuraba
Posté le 10-11-2005 à 15:29:44  profilanswer
 

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

n°1243295
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 15:39:25  profilanswer
 

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 ;-)
n°1243302
sakuraba
Posté le 10-11-2005 à 15:43:45  profilanswer
 

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
n°1243318
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 15:57:55  profilanswer
 

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 ;-)
n°1243321
watashi
La démotivation : JAMAIS !
Posté le 10-11-2005 à 16:02:05  profilanswer
 

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 ;-)
n°1243361
sakuraba
Posté le 10-11-2005 à 16:50:14  profilanswer
 

merci bcp


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
Excel VBA configuration des margesouvrir un fichier excel depuis Access en VBA, encore une petite chose
[VBA-EXCEL 2003] recuperer le nom de tous les feuilles dans une listbx[VBA] afficher un graphique dans un "form"
[VBA-EXCEL 2003][resolu] suppression des feuilles contenant le motcompression automatique d'image dans excel
HELP : VB6 / Excel => COMPATIBILITE / DEPLOIEMENTMettre en ligne un fichier excel
Plus de sujets relatifs à : [VBA-EXCEL{DONE} faire la somme des cellules A1 de toutes les feuilles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR