XL 2016 VBA - Mise à jour dynamique des graphiques

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Heodrene

XLDnaute Occasionnel
Bonjour à tous,

J'aimerais à partir du classeur ci-joint automatiser l'algorithme suivant :

SI (année en cours & "S" & semaine en cours) > dernière valeur de l'abscisse) ALORS
(dernière valeur de l'abscisse) = (année en cours & "S" & semaine en cours)​
FIN SI

Faire de même avec les valeurs en ordonnées.

L'idée est d'automatiser la mise à jour du graphique au fur et à mesure que les semaines s'écoulent sans être obligé d'éditer à la main les données pour incrémenter chaque semaine les plages de valeurs.

Le fichier joint est livré sans code macro, c'est normal 😉

Merci de votre aide,

Héodrène
 

Pièces jointes

Solution
Bonsoir Heodrene, Modeste geedee, chris,

Voyez le fichier joint, la formule volatile en E2 permet de lancer cette macro :
Code:
Private Sub Worksheet_Calculate()
Dim ligmini&, nbsem&, dat As Date, sem$, ligfin As Variant, ligdeb&, P As Range, n As Byte
ligmini = 22 'modifiable
nbsem = 34 'modifiable
dat = Date 'modifiable pour tester
sem = Year(dat) & "S" & Format(Application.WeekNum(dat), "00")
ligfin = Application.Match(sem, [A:A])
If IsError(ligfin) Then ligfin = ligmini
ligdeb = ligfin - nbsem + 1
If ligdeb < ligmini Then ligdeb = ligmini
Set P = Range("A" & ligdeb & ":A" & ligfin)
With ChartObjects(1).Chart
    For n = 1 To 3
        .SeriesCollection(n).XValues = P
        .SeriesCollection(n).Values = P.Offset(, n)...
Bonsour®
B

L'idée est d'automatiser la mise à jour du graphique au fur et à mesure que les semaines s'écoulent sans être obligé d'éditer à la main les données pour incrémenter chaque semaine les plages de valeurs.
déjà un peu de cohérence ...
calculer le numéro de semaine dynamiquement
=ENT(MOD(ENT((unedate-2)/7)+3/5 ; 1461/28))+1
pour cela utiliser des dates...
ne pas afficher le cumul réalisé pour les dates non échues !!!
ensuite l'utilisation de la fonction DECALER permettra de ne prendre en compte automatiquement que les lignes concernées
 
Bonsoir Heodrene, Modeste geedee, chris,

Voyez le fichier joint, la formule volatile en E2 permet de lancer cette macro :
Code:
Private Sub Worksheet_Calculate()
Dim ligmini&, nbsem&, dat As Date, sem$, ligfin As Variant, ligdeb&, P As Range, n As Byte
ligmini = 22 'modifiable
nbsem = 34 'modifiable
dat = Date 'modifiable pour tester
sem = Year(dat) & "S" & Format(Application.WeekNum(dat), "00")
ligfin = Application.Match(sem, [A:A])
If IsError(ligfin) Then ligfin = ligmini
ligdeb = ligfin - nbsem + 1
If ligdeb < ligmini Then ligdeb = ligmini
Set P = Range("A" & ligdeb & ":A" & ligfin)
With ChartObjects(1).Chart
    For n = 1 To 3
        .SeriesCollection(n).XValues = P
        .SeriesCollection(n).Values = P.Offset(, n)
    Next
End With
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
659
Réponses
24
Affichages
2 K
Réponses
21
Affichages
2 K
Retour