Consolidation Excel

Consolidation Excel - Logiciels - Windows & Software

Marsh Posté le 07-11-2008 à 10:18:19    

Bonjour,  
 
J'ai un problème sur Excel......Je réalise tous les mois des classeurs Excel contenant un nombre variable de feuilles (de ±20 a....200 voir +)  
A chaque fin de mois je crée une feuille que je nomme CONSO pour consolider toutes les données de mes feuilles.  
Je récupere donc sur chaque feuille la meme plage de donnée sauf que lorsque je me retrouve avec 200feuilles a cliquer pour les inclure dans la fonction consolidation ça me prend un temps fou sans compter que parfois j'en oublie.  
Je cherche donc a creer une macro ou autre qui pourrait prendre en compte le nombre de feuille (variable tous les mois) et consolider la mm plage de donnée de toutes ces feuilles automatiquement........AIDEZ MOI !!!!!  
Merci d'avance

Reply

Marsh Posté le 07-11-2008 à 10:18:19   

Reply

Marsh Posté le 07-11-2008 à 11:29:48    

Quand tu dis "consolidation"... tu fais quoi sur cette feuille... une somme des cellules de chacun des autres feuilles par exemple ?
 
En fait, il va te falloir surtout connaître le nb de feuille...

'Récup du nombre de feuilles
NombreDeFeuilles = ActiveWorkbook.Sheets.Count


Puis ensuite, le mieux, c'est de balayer chaque feuille pour récupérer ce que tu veux...
 

For i = 1 To NombreDeFeuilles
    Sheets(i).Select
...
Next i


 
Après... tu peux aussi générer une variable qui va cumuler "en temps réel" ce qu'il y a sur tes autres feuilles
-> tu crées une chaine qui vient faire au final : sheet(1).cell(x,y).value + sheet(2).cell(x,y).value... + sheet(NombreDeFeuilles -1).cell(x,y).value, et tu affectes ensuite ça comme formule de ta cellule de la feuille conso.
(j'ai mis -1 parce qu'on veut probablement prendre la feuille "CONSO" )

Reply

Marsh Posté le 07-11-2008 à 15:40:50    

En fait "consolidation" est une fonction d'Excel tu la trouve dans donnée/consolidation et je consolide une plage de données fixe sur toutes mes feuilles pour recuperer les valeurs sauf que cette fonction necessite de clique sur chacune de mes feuilles et valider la selection.
Le prob et que je cherche une fonction qui me trouve le nombre de feuille, et qui lance ou realise l'equivalent de la fonction consolidation....je sais pas si je suis assez clair.....en + j'y connais quasi rien en VBA

Reply

Marsh Posté le 07-11-2008 à 16:14:24    

Ta consolidation n'est qu'un moyen pour simplifier ce que tu peux faire sur plusieurs champs...
 
Et dans ta consolidation, tu dis aussi si tu fais une somme, une moyenne, un écart type, etc...
Je suppose que ta consolidation est plutôt une moyenne ??? tu fais ça sur toute une plage de cellules ??
 
Donne un peu plus de précisions.
 
Côté macro, il est assez facile d'avoir le nb de feuilles (comme je te l'indique plus haut).
 
Maintenant, pour la fonction de consolidation "pure"... voilà le code VBA (un semble enregistrement de macro te donne ça !)
 
Selection.Consolidate Sources:=Array("[Classeur1]Feuil1!R1C1:R1C4", _
        "[Classeur1]Feuil2!R1C1:R1C4" ), Function:=xlSum, TopRow:=False, LeftColumn :=False, CreateLinks:=False
 
Voilà... ceci fait la somme des cellules 1 à 1 de mes plages A1:D1 sur 2 feuilles...
en modifiant le param Function de xlSum à autre chose, tu choisira le type de consolidation...
 
À toi de jouer !

Reply

Marsh Posté le 07-11-2008 à 16:23:18    

Ca y est j'ai la soluce........ pour info et pour ceux qui comprennent (moi perso je pige pas tout mais ça marche)
Voila le code VBA à taper pour réaliser une macro qui vous fera une consolidation sans prob et a la vitesse grand V
 
Sub consolider()
Dim Arr(), I As Byte, sh As Worksheet
I = 1
  ReDim Arr(1 To Sheets.Count - 1)
  For Each sh In Sheets
  If sh.Name <> "conso" Then
    Arr(I) = sh.Name & "!R12C1:R52C5" 'correspond à la plage A12:E52
    I = I + 1
    End If
Next sh
  Sheets("conso" ).[A1].Consolidate Sources:=Arr(), Function:=xlCount, TopRow:=True, LeftColumn _
        :=False, CreateLinks:=True
End Sub
 
A + tt le monde pour de nouveaux probleme a resoudre

Reply

Sujets relatifs:

Leave a Replay

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