Faire varier le nombre d'éléments (de différents onglets) d'une addition

Le
recherche.quad
Bonjour !
J'ai essayé de faire un titre clair..raté :-(

J'ai besoin de votre aide.
Je dois faire un classeur qui résume mensuellement un autre classeur
hebdomadaire..sauf que le nombre de semaines dans chaque mois
change presque tous les ans (sorte de coutume du domaine d'activité).

Donc j'ai une case en haut de chacune de mes colonnes mensuelles du
classeur 2 dans laquelle on indique le nombre de semaines du mois (le
numéro de la première du mois est donc la somme du nb de semaines pour
chaque mois précédent plus 1 ; la dernière est donc la première plus
le nombre de semaines du mois moins 1).
J'ai aussi des onglets "sem 1", "sem 2", dans mon classeur 1.
Je dois dans certaines cellules faire la somme du mois précédent
(c'est donc un cumul mensuel) et de 4 ou 5 montants de 4 ou 5 onglets
du classeur 1


--> Pour prendre un exemple clair, il faudra que le classeur deux
donne pour avril (en admettant qu'il y a 4 semaines en avril) la somme
des semaines 13 à 16 ou 14 à 17 suivant qu'on a compté 4 ou 5 semaines
en Mars (9 à 12 ou 9 à 13).



/! Ca me parait un peu compliqué (même si j'espère avoir tort) donc
il faudra peut-être découper le problème en plusieurs morceaux réso=
lus
indépendemment /!
Donc, à moins que quelqu'un ne trouve une solution rapide, élégante et
efficace immédiatement, je propose qu'on commence par se pencher sur
le découpage qu'on pourrait faire du problème (et donc de la
solution).


Vous en pensez quoi ?
Merci pour l'aide (future) ;-)


Dites-moi si vous avez besoin d'un classeur d'exemple stocké qq part.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FFO
Le #4593531
Salut un toi
Je te propose une solution macro
Celle-ci te mets en colonne A de la feuille active les numéros de semaine et
colonne B les mois correspondant
Je suis parti du principe que tout lundi appartenant au mois inclus la
semaine correspondante à ce mois

on peux définir un autre jour de la semaine comme point de repère dans cet
esprit
A toi de me dire

On peux donner le résultat d'une maniére différente (autres cellules, sur
plusieurs feuilles) à toi de me signifier tes attentes en l'espèce

Le code :

Range("A1").Select
Année = Format(Date, "yyyy")
M = "01"
D = 0
F = 0
A = CDate("01/01/" & Année)
For i = 1 To 365
Mois = Format(A, "mm")
Jour = Format(A, "dddd")
If Mois > M Or Mois = 12 And i = 365 Then
D = F + 1
F = F + Semaine
M = Mois
Semaine = 0
ActiveCell = D & "à" & F
ActiveCell.Offset(0, 1) = Format(A - 1, "mmmm")
ActiveCell.Offset(1, 0).Select
End If
If Format(A, "dddd") = "lundi" And M = Mois Then
Semaine = Semaine + 1
End If
A = CDate("01/01/" & Année) + i
Next

Essaie en l'état cette macro avec un classeur vierge pour en apprécier le
résultat
Donnes moi les adaptations à réaliser

Dans l'attente de te lire


Bonjour !
J'ai essayé de faire un titre clair.................raté :-(

J'ai besoin de votre aide.
Je dois faire un classeur qui résume mensuellement un autre classeur
hebdomadaire.....sauf que le nombre de semaines dans chaque mois
change presque tous les ans (sorte de coutume du domaine d'activité).

Donc j'ai une case en haut de chacune de mes colonnes mensuelles du
classeur 2 dans laquelle on indique le nombre de semaines du mois (le
numéro de la première du mois est donc la somme du nb de semaines pour
chaque mois précédent plus 1 ; la dernière est donc la première plus
le nombre de semaines du mois moins 1).
J'ai aussi des onglets "sem 1", "sem 2", ... dans mon classeur 1.
Je dois dans certaines cellules faire la somme du mois précédent
(c'est donc un cumul mensuel) et de 4 ou 5 montants de 4 ou 5 onglets
du classeur 1


--> Pour prendre un exemple clair, il faudra que le classeur deux
donne pour avril (en admettant qu'il y a 4 semaines en avril) la somme
des semaines 13 à 16 ou 14 à 17 suivant qu'on a compté 4 ou 5 semaines
en Mars (9 à 12 ou 9 à 13).



/! Ca me parait un peu compliqué (même si j'espère avoir tort) donc
il faudra peut-être découper le problème en plusieurs morceaux résolus
indépendemment... /!
Donc, à moins que quelqu'un ne trouve une solution rapide, élégante et
efficace immédiatement, je propose qu'on commence par se pencher sur
le découpage qu'on pourrait faire du problème (et donc de la
solution).


Vous en pensez quoi ?
Merci pour l'aide (future) ;-)


Dites-moi si vous avez besoin d'un classeur d'exemple stocké qq part.




Daniel
Le #4593511
Bonjour.
Une autre approche. La macro suivante fait la somme sur la ligne 2 des
montant se trouvant en A1 de chaque feuille concernée.
A modifier selon la disposition de tes données et ce que tu souhaites faire.
Tu trouveras à l'adresse suivante un zip contenant Classeur1.xls (classeur
des feuilles hebdo) et Classeur2.xls, le classeur mensuel :
http://cjoint.com/?gBn7ffhA8O

Sub RecapMensuelle()
Dim Mois, SemDeb As Integer, SemFin As Integer
Workbooks("Classeur2.xls").Activate
Do
Mois = InputBox("entrez le numéro du mois à traiter")
Loop While Not IsNumeric(Mois) Or Mois < 1 Or Mois > 12
Mois = CInt(Mois)
SemDeb = Range("A1").Offset(, Mois - 1)
SemFin = Range("A1").Offset(, Mois) - 1
With Workbooks("Classeur1.xls")
For i = SemDeb To SemFin
[A2].Offset(, Mois - 1) = [A2].Offset(, Mois - 1) _
+ .Sheets("sem" & i).Range("A1")
Next i
End With
End Sub

Cordialement.
Daniel

Bonjour !
J'ai essayé de faire un titre clair.................raté :-(

J'ai besoin de votre aide.
Je dois faire un classeur qui résume mensuellement un autre classeur
hebdomadaire.....sauf que le nombre de semaines dans chaque mois
change presque tous les ans (sorte de coutume du domaine d'activité).

Donc j'ai une case en haut de chacune de mes colonnes mensuelles du
classeur 2 dans laquelle on indique le nombre de semaines du mois (le
numéro de la première du mois est donc la somme du nb de semaines pour
chaque mois précédent plus 1 ; la dernière est donc la première plus
le nombre de semaines du mois moins 1).
J'ai aussi des onglets "sem 1", "sem 2", ... dans mon classeur 1.
Je dois dans certaines cellules faire la somme du mois précédent
(c'est donc un cumul mensuel) et de 4 ou 5 montants de 4 ou 5 onglets
du classeur 1


--> Pour prendre un exemple clair, il faudra que le classeur deux
donne pour avril (en admettant qu'il y a 4 semaines en avril) la somme
des semaines 13 à 16 ou 14 à 17 suivant qu'on a compté 4 ou 5 semaines
en Mars (9 à 12 ou 9 à 13).



/! Ca me parait un peu compliqué (même si j'espère avoir tort) donc
il faudra peut-être découper le problème en plusieurs morceaux résolus
indépendemment... /!
Donc, à moins que quelqu'un ne trouve une solution rapide, élégante et
efficace immédiatement, je propose qu'on commence par se pencher sur
le découpage qu'on pourrait faire du problème (et donc de la
solution).


Vous en pensez quoi ?
Merci pour l'aide (future) ;-)


Dites-moi si vous avez besoin d'un classeur d'exemple stocké qq part.
Daniel
Le #4593501
Mort de honte... Lire "des montants"
"Daniel"
Bonjour.
Une autre approche. La macro suivante fait la somme sur la ligne 2 des
montant se trouvant en A1 de chaque feuille concernée.
A modifier selon la disposition de tes données et ce que tu souhaites
faire.
Tu trouveras à l'adresse suivante un zip contenant Classeur1.xls (classeur
des feuilles hebdo) et Classeur2.xls, le classeur mensuel :
http://cjoint.com/?gBn7ffhA8O

Sub RecapMensuelle()
Dim Mois, SemDeb As Integer, SemFin As Integer
Workbooks("Classeur2.xls").Activate
Do
Mois = InputBox("entrez le numéro du mois à traiter")
Loop While Not IsNumeric(Mois) Or Mois < 1 Or Mois > 12
Mois = CInt(Mois)
SemDeb = Range("A1").Offset(, Mois - 1)
SemFin = Range("A1").Offset(, Mois) - 1
With Workbooks("Classeur1.xls")
For i = SemDeb To SemFin
[A2].Offset(, Mois - 1) = [A2].Offset(, Mois - 1) _
+ .Sheets("sem" & i).Range("A1")
Next i
End With
End Sub

Cordialement.
Daniel

Bonjour !
J'ai essayé de faire un titre clair.................raté :-(

J'ai besoin de votre aide.
Je dois faire un classeur qui résume mensuellement un autre classeur
hebdomadaire.....sauf que le nombre de semaines dans chaque mois
change presque tous les ans (sorte de coutume du domaine d'activité).

Donc j'ai une case en haut de chacune de mes colonnes mensuelles du
classeur 2 dans laquelle on indique le nombre de semaines du mois (le
numéro de la première du mois est donc la somme du nb de semaines pour
chaque mois précédent plus 1 ; la dernière est donc la première plus
le nombre de semaines du mois moins 1).
J'ai aussi des onglets "sem 1", "sem 2", ... dans mon classeur 1.
Je dois dans certaines cellules faire la somme du mois précédent
(c'est donc un cumul mensuel) et de 4 ou 5 montants de 4 ou 5 onglets
du classeur 1


--> Pour prendre un exemple clair, il faudra que le classeur deux
donne pour avril (en admettant qu'il y a 4 semaines en avril) la somme
des semaines 13 à 16 ou 14 à 17 suivant qu'on a compté 4 ou 5 semaines
en Mars (9 à 12 ou 9 à 13).



/! Ca me parait un peu compliqué (même si j'espère avoir tort) donc
il faudra peut-être découper le problème en plusieurs morceaux résolus
indépendemment... /!
Donc, à moins que quelqu'un ne trouve une solution rapide, élégante et
efficace immédiatement, je propose qu'on commence par se pencher sur
le découpage qu'on pourrait faire du problème (et donc de la
solution).


Vous en pensez quoi ?
Merci pour l'aide (future) ;-)


Dites-moi si vous avez besoin d'un classeur d'exemple stocké qq part.




recherche.quad
Le #4593491
Merci pour ton aide, j'apprécie.
Mais j'ai dû mal m'exprimer.


En synthétisant :
J'ai deux classeurs : C1 & C2. C1 a 53 onglets (un par semaine) et C2
un seul.
Dans C2, j'ai des colonnes mensuelles et des cases à remplir avec C1.
Prenons une ligne au hasard ; dans chacune des cellules de cette
ligne, je dois calculer un montant Mi.

Pour chaque case, Mi=M(i-1)+SOMMEi. ----- Sauf en janvier où
M(janvier)=somme(janvier)
Et SOMME est la somme des 4 cases E8 (par exemple) de 4 feuilles de
C1.

LE PROBLEME, c'est SOMMEi car en fonction des années j'aurais besoin
pour certains mois de la somme de 5 E8 et non pas 4.


Voilà. Dis-moi si ça te paraît plus clair.
recherche.quad
Le #4593461
Daniel> On approche :-)
MAIS, je vais redéfinir ce que je veux.

J'ai 12 colonnes dans classeur2 et en haut de chaque colonne le nombre
de semaines du mois (4 ou 5). Ainsi on sait que la première semaine du
mois X est la somme du nombre de semaines des mois précédents plus 1.
Le numéro de la dernière semaine est celui de la première plus le
nombre de semaines du mois plus 1 (ou bien le total du nombre de
semaines jusqu'au mois en cours).

Je veux plutôt une macro qui modifierait une formule (si c'est
possible). La formule serait pour février (exemple) :
=I9+'[Suivi des Marges Hebdo 2007.xls]sem 5'!$E17+'[Suivi des Marges
Hebdo 2007.xls]sem 6'!$E17+'[Suivi des Marges Hebdo 2007.xls]sem 7'!
$E17+'[Suivi des Marges Hebdo 2007.xls]sem 8'!$E17
et pareil pour mars mais de "sem 9" à "sem 12" (OU "SEM 13" !)

Il n'y a donc normalement *pas besoin de demander le numéro du mois*
puisque la seule chose qui compte c'est *quelles semaines* seront
utilisées dans la somme et que c'est renseigné dans la première case
de chaque colonne.



J'espère que ma verve retranscrit bien ce que je souhaite ;-)
@+
FFO
Le #4593451
Rebonjours à toi
Si j'ai bien compris tu as besoin de connaitre le nombre de semaines par
mois nécessaire pour réaliser le calcule de SOMMi, i étant je suppose le
nombre de semaines

Si tu récupères cette information dans un onglet intitulé "Nombre de semaines"
que tu auras alimenté par une macro ayant ce code :

Sheets("Nombre de semaines").select
Range("A1").Select
Année = Format(Date, "yyyy")
M = "01"
D = 0
F = 0
A = CDate("01/01/" & Année)
For i = 1 To 365
Mois = Format(A, "mm")
Jour = Format(A, "dddd")
If Mois > M Or Mois = 12 And i = 365 Then
D = F + 1
F = F + Semaine
M = Mois
ActiveCell = D & " à " & F
ActiveCell.Offset(0, 1) = Format(A - 1, "mmmm")
ActiveCell.Offset(0, 2) = Semaine
Semaine = 0
ActiveCell.Offset(1, 0).Select
End If
If Format(A, "dddd") = "lundi" And M = Mois Then
Semaine = Semaine + 1
End If
A = CDate("01/01/" & Année) + i
Next

Colonne A les numéros de semaine
Colonne B les mois
Colonne C le nombre de semaines

Reste à toi de mettre en relation les cellules de la colonne C de l'onglet
"Nombre de semaines" représentant le nombre de semaine avec ta formule
Je pense qu'il y a matière à adapter ma proposition qui te donne le
paramètre attendu et ta formule

Qu'en penses tu ????

Si tu as besoins d'aide pour mettre en place la Macro fais moi signe


Merci pour ton aide, j'apprécie.
Mais j'ai dû mal m'exprimer.


En synthétisant :
J'ai deux classeurs : C1 & C2. C1 a 53 onglets (un par semaine) et C2
un seul.
Dans C2, j'ai des colonnes mensuelles et des cases à remplir avec C1.
Prenons une ligne au hasard ; dans chacune des cellules de cette
ligne, je dois calculer un montant Mi.

Pour chaque case, Mi=M(i-1)+SOMMEi. ----- Sauf en janvier où
M(janvier)=somme(janvier)
Et SOMME est la somme des 4 cases E8 (par exemple) de 4 feuilles de
C1.

LE PROBLEME, c'est SOMMEi car en fonction des années j'aurais besoin
pour certains mois de la somme de 5 E8 et non pas 4.


Voilà. Dis-moi si ça te paraît plus clair.




recherche.quad
Le #4593441
FFO> Merci encore mais......non :D

Le nombre de semaines je le connais (enfin la personne qui va utiliser
la feuille le connaît) et je le rentre (manuellement) dans mon
classeur, tout en haut de chaque colonne mensuelle (en I2, K2, M2,
etc).

Ce que je veux c'est que *la somme des cases des différents onglets de
classeur1 change en fonction du nombre de semaines de chaque mois*
(qui change chaque année) qui est précisé en haut de chaque colonne
mensuelle dans classeur2.
Daniel
Le #4593421
Il manque pas mal de données pour pouvoir répondre à coup sûr. Est-ce que I9
est une constante dans toutes les formules ?
La macro suivante remplit les cellules A2:L2 :

Sub ModifAnnuelle()
Dim c As Range, SemDeb As Integer, SemFin As Integer
Dim i As Integer, Formule As String
For Each c In Range("A2:L2")
SemDeb = Application.Sum(Range(Range("A1"), _
Range("A1").Offset(, c.Column - 1))) - c.Offset(-1) + 1
SemFin = Application.Sum(Range(Range("A1"), _
Range("A1").Offset(, c.Column - 1)))
Formule = "=I9"
For i = SemDeb To SemFin
Formule = Formule + "+'[Suivi des Marges Hebdo 2007.xls]sem " _
& i & "'!$E17"
Next i
c.Formula = Formule
Next c
End Sub

Daniel

Daniel> On approche :-)
MAIS, je vais redéfinir ce que je veux.

J'ai 12 colonnes dans classeur2 et en haut de chaque colonne le nombre
de semaines du mois (4 ou 5). Ainsi on sait que la première semaine du
mois X est la somme du nombre de semaines des mois précédents plus 1.
Le numéro de la dernière semaine est celui de la première plus le
nombre de semaines du mois plus 1 (ou bien le total du nombre de
semaines jusqu'au mois en cours).

Je veux plutôt une macro qui modifierait une formule (si c'est
possible). La formule serait pour février (exemple) :
=I9+'[Suivi des Marges Hebdo 2007.xls]sem 5'!$E17+'[Suivi des Marges
Hebdo 2007.xls]sem 6'!$E17+'[Suivi des Marges Hebdo 2007.xls]sem 7'!
$E17+'[Suivi des Marges Hebdo 2007.xls]sem 8'!$E17
et pareil pour mars mais de "sem 9" à "sem 12" (OU "SEM 13" !)

Il n'y a donc normalement *pas besoin de demander le numéro du mois*
puisque la seule chose qui compte c'est *quelles semaines* seront
utilisées dans la somme et que c'est renseigné dans la première case
de chaque colonne.



J'espère que ma verve retranscrit bien ce que je souhaite ;-)
@+
FFO
Le #4593411
Rebonjours à toi

J'ai fais une simulation avec l'enregistreur de Macro
J'ai dans une cellule établit une somme de 2 cellules appartenant à un autre
classeur et 2 onglets différents de ce classeur
J'ai obtenu le code suivant :

ActiveCell.FormulaR1C1 = _
"='[Classeur2.xls]Semaine2'!R1C1+'[Classeur2.xls]Semaine3'!R1C1"

En partant de l'idée d'un onglet "Nombre de semaines" qui porterait en
colonne A le numéro de la semaine de départ du mois et en colonne B le numèro
de la dernière semaine du mois
Avec cette formule ci-dessus tu pourrais mettre ce code :
'Pour le mois de janvier
Sheets("Nombre de semaines").Select
For i = Range("A1") to Range("B1")
S = S & "'[Classeur2.xls]Semaine" & i & "'!R1C1" & "+"
Next
Som = "=I9+" & Mid(S, 1, Len(S) - 1)
Sheets("Janvier").Select
Range("Cellule de destination").Select
ActiveCell.FormulaR1C1 = Som

Et le tour est joué
avec ma première macro corrigée pour donner :

Colonne A : le numéro de la 1° semaine
Colonne B : le numéro de la dernière semaine
Colonne C : le mois
Colonne D : le nombre de semaine

Le code :

Range("A1").Select
Année = Format(Date, "yyyy")
M = "01"
D = 0
F = 0
A = CDate("01/01/" & Année)
For i = 1 To 365
Mois = Format(A, "mm")
Jour = Format(A, "dddd")
If Mois > M Or Mois = 12 And i = 365 Then
D = F + 1
F = F + Semaine
M = Mois
ActiveCell = D
ActiveCell.Offset(0, 1) = F
ActiveCell.Offset(0, 2) = Format(A - 1, "mmmm")
ActiveCell.Offset(0, 3) = Semaine
Semaine = 0
ActiveCell.Offset(1, 0).Select
End If
If Format(A, "dddd") = "lundi" And M = Mois Then
Semaine = Semaine + 1
End If
A = CDate("01/01/" & Année) + i


Attention comme repère pour déterminer les semaines j'ai pris le Lundi
C'est à dire que le la semaine du lundi du mois est compter pour ce mois
On peux changer pour un autre jour

J'espère avoir enfin répondu à ton attente
Dis moi !!!!


FFO> Merci encore mais......non :D

Le nombre de semaines je le connais (enfin la personne qui va utiliser
la feuille le connaît) et je le rentre (manuellement) dans mon
classeur, tout en haut de chaque colonne mensuelle (en I2, K2, M2,
etc).

Ce que je veux c'est que *la somme des cases des différents onglets de
classeur1 change en fonction du nombre de semaines de chaque mois*
(qui change chaque année) qui est précisé en haut de chaque colonne
mensuelle dans classeur2.




recherche.quad
Le #4593401
I9 n'est pas une constante mais le montant du mois précédent.


--> Avec des lettres et si on prend deux mois (janvier/février) de 4
semaines chacun, ça donne :
J'ai un classeur1 avec 8 onglets (semaines) qui possèdent tous une
case "Achats machin" avec un nombre en face que l'on pourra appeler
a,b,c,d,e,f,g et h (donc a,b,c etc sont tous sur des *onglets
différents*)

J'ai un classeur2 avec deux colonnes qui ont chacune une case "Achats
machin" que l'on peut appeler A et B si l'on veut.

Ce que je veux c'est retrouver dans A une formule qui fait a+b+c+d
et dans B une formule qui fait A+e+f+g+h.




Le problème du nombre de semaines on le verra après peut-être.
Publicité
Poster une réponse
Anonyme