Menu

Consolidate Sources:=

Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
- - Dernière réponse : hmcirta
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
- 7 janv. 2019 à 11:27
Bonjour,

Faisant suite à mon sujet resté sans réponse https://www.commentcamarche.net/forum/affich-34908413-consolider-plusieurs-feuilles-simultanement-partie-2?full%2C= , je relance la discussion mais pour modifier un code que j'ai trouvé sur le net pour l'adapter à mon cas.

Voilà ce que j'ai trouvé :

Sub Consolidate_Totals()
Dim ws As Worksheet
Dim sArray As Variant, i As Integer
ReDim sArray(1 To 1)

'---Make Array with Named Ranges to be Consolidated
For Each ws In ActiveWorkbook.Worksheets
If ws.Visible And ws.Name <> "Sheet1" Then
i = i + 1
ReDim Preserve sArray(1 To i)
sArray(i) = ws.UsedRange.Address(ReferenceStyle:=XlReferenceStyle.xlR1C1, external:=True)
End If
Next ws
If i = 0 Then Exit Sub

'---Consolidate using the Array
Sheets("Sheet1").Range("A1").Consolidate Sources:=(sArray), _
Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:=False
End Sub



Comme vu le voyez ce code consolide toutes les cellules contenant des données ou ayant une mise en forme des feuilles visibles uniquement du classeur actif.

Ce que je veux c'est :
Consolider telle ou telle plage de cellule qui est la même pour toutes les feuilles.
Indiquer à Excel les feuilles que je veux consolider (sachant que ces feuilles se suivent)

Si j'insiste sur ça c'est que j'en ai vraiment besoin car ça me fera gagner énormément de temps et ça rendra la tache beaucoup moins pénible.


Merci d'avance.


Configuration: Windows 7 ultimate
Afficher la suite 

Votre réponse

7 réponses

Messages postés
371
Date d'inscription
samedi 28 juillet 2012
Statut
Membre
Dernière intervention
4 mars 2019
31
0
Merci
Bonjour,

Quelles feuilles souhaites tu consolider (noms des feuilles) et quelle plage?
Dans quelle feuille la consolidation doit-elle être effectué?

Si tu pouvais nous joindre un exemple de ton fichier ce serait beaucoup pour facile de t'aider.

Jc
Commenter la réponse de titeufdu89
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
25
0
Merci
Bonjour,

Voici un exemple très réduit de mon fichier.

https://www.cjoint.com/c/HLdqn47idVe

Les plages que je veux consolider sont coloriées. Elles seront consolidées séparément et au besoin.
Ce fichier est un rapport journalier rédigé par des ingénieurs et peut contenir entre 50 et 200 feuilles qui peuvent être nommées différemment. Mais du moment que le format de ce rapport est fixe les plages ne sont pas modifiables.

La consolidation sera faite dans un classeur à part.

Le nombre de feuilles à consolider varie entre 7 (une semaine min) et 31 (un mois max).

Voila, j’espère que j'ai su vous expliquer ce que je veux faire.

Merci de votre aide.
hmcirta
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
25 -
Une petite correction :
Le nombre de feuilles varie entre 2 et 31 et non pas 7 et 31
Commenter la réponse de hmcirta
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
25
0
Merci
Salut,

j'ai remplacé dans

sArray(i) = ws.UsedRange.Address(ReferenceStyle:=XlReferenceStyle.xlR1C1, external:=True)

UsedRange.Adress par Range("O15:Y47").Address pour consolider la plage en rose par exemple et ça a marché.

il ne reste plus qu'a indiquer a Excel les N feuilles concernées par la consolidation.

Si mon classeur contient les feuilles DMR01, DMR02, DMR03, ... , DMRX comment indiquer a Excel de consolider les plages O15:Y47 en rose par exemple des feuilles DMR12 a DMR20 en suite de consolider les plages O49:Y53 en orange par exemple des feuilles DMR59 a DMR77.

Cordialement
Commenter la réponse de hmcirta
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
25
0
Merci
Bonjour,

Mon problème restera t-il sans solution ??
titeufdu89
Messages postés
371
Date d'inscription
samedi 28 juillet 2012
Statut
Membre
Dernière intervention
4 mars 2019
31 -
Bonjour hmcirta,

Désolé mais je ne vois pas comment mettre en place ta consolidation étant donné que tes feuilles et plages ne sont pas clairement définies.

Peut-etre devrait tu essayer de répertorier toutes les feuilles concernées dans une nouvelle feuille reprenant par exemple
- ligne 2 : les noms de tes feuilles,
- ligne 3 : les adresses des plages à consolider sur chacune des feuilles,
- ligne 4 : une validation par exemple avec un "x" pour indiquer si la feuille est à consolider ou non

Ensuite créer une macro qui consolidera selon les éléments de cette feuille...
Sinon en boite de dialogue avec des inputbox mais ça risque d'être plus laborieux à mettre en place

Jc
Commenter la réponse de hmcirta
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
25
0
Merci
Bonjour titeufdu89

Merci de m'avoir repondu ...

Que veux tu dire par : tes feuilles et plages ne sont pas clairement définies. ?
et comment les definir ?
titeufdu89
Messages postés
371
Date d'inscription
samedi 28 juillet 2012
Statut
Membre
Dernière intervention
4 mars 2019
31 -
Bonsoir,

Tu dis je te cite :
"comment indiquer a Excel de consolider les plages O15:Y47 en rose par exemple des feuilles DMR12 a DMR20 en suite de consolider les plages O49:Y53 en orange par exemple des feuilles DMR59 a DMR77"

Tes informations ne sont donc pas fixes, ça dépend des feuilles, c'est pourquoi à ta place je mettrai en place une table de concordance qui donnerait l'information à une macro des plages à consolider dans les différentes feuilles de ton classeur.
Ton objectif final c'est quoi au juste? Une somme de toutes les données de tes feuilles par produit, une moyenne? Tu as différentes plages, est-ce qu'elles contiennent toutes les mêmes types d'info ou souhaites tu 2 consolidations différentes?

Voici une exemple de table de concordance à laquelle je pensais :
https://www.cjoint.com/c/HLsu147ydaN

Ensuite un code vba analyse la table de concordance et ajoute les feuilles et les plages programmées à la consolidation. Mais je n'ai pas créer le code car je comprends pas ton objectif final.

Jc
Commenter la réponse de hmcirta
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
25
0
Merci
Bonjour,

Désole pour le retard, mais j'ai eu une semaine chargée.

Merci de ta réponse titeuf, j’espère apporter plus d'explications dans ce qui suit.

J'avais déjà fait un travail dans le sens de ton idée de table de concordance, mais il est resté au stade de brouillon et inachevé, et ne consolide que 7 feuilles (ni plus ni moins). J'aimerai donc pouvoir le terminer pour consolider autant de feuilles que je veux.

Voici une copie de ce que j'ai fait si ça peut aider.
https://www.cjoint.com/c/HLAsobGMZLV

Comme je l'avais dit, c'est un brouillon et tout est encore très mal organisé. Je n'est pas encore mis le code cité en haut dans mon 1er poste.
La feuille "Objectif" est celle a laquelle je veux arriver.

Voila, j’espère que ça va aider pour trouver une solution.

Merci de votre aide.
Commenter la réponse de hmcirta
Messages postés
176
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
7 janvier 2019
25
0
Merci
Bonjour,

En faisant des recherches sur le net je suis tombé sur ce petit bout de code :
Les lignes intéressantes de ce code sont en gras.

Sub onglet()
Dim Feuil, i
'Feuil est le nom de l'array
Feuil = Array(Sheets(1).Name)
'redimensioner l'array pour qu'il contienne le nombre de données
'correspondant au nombre d'onglets voulus
'Valeur - 1 car array commence à 0
ReDim Preserve Feuil(Sheets(1).Range("B5" ).Value - 1)
'Ajout des données dans l'array
For i = 1 To Sheets(1).Range("B5" ).Value
Feuil(i - 1) = Sheets(i).Name
Next i
'Selection pour remplissage
Sheets(Feuil).Select
Sheets(1).Activate
Range("B6" ).Select
ActiveCell.Formula = Sheets(1).Range("A5" ).Value
End Sub


Peut-on exploiter ce code pour au lieu d'avoir
For i = 1 To Sheets(1).Range("B5" ).Value

on aura
For i = Sheets(1).Range("B5" ).Value To Sheets(1).Range("C5" ).Value


Merci d'avance
Commenter la réponse de hmcirta