Graphique: Macro glissement de 7 lignes au niveau des séries

Résolu
Yrmouf Messages postés 141 Statut Membre -  
Yrmouf Messages postés 141 Statut Membre -
Bonjour,

J'écris ce post car je souhaiterais avoir une possibilité de décaler de 7 lignes mon graphique. En effet, c'est quelque chose d'hebdomadaire.

Pour le moment j'utilise une macro vraiment pas pratique qui est:
Sub Remplacer()
'
' Remplacer
'
ActiveSheet.ChartObjects("Graphique 2").Activate
ActiveChart.SeriesCollection(1).XValues = "='N+PRINT'!$A$44:$B$72" ActiveChart.SeriesCollection(1).Values = "='N+PRINT'!$C$44:$C$72" ActiveChart.SeriesCollection(2).Values = "='N+PRINT'!$D$44:$D$72"
ActiveChart.SeriesCollection(3).Values = "='N+PRINT'!$E$44:$E$72"
ActiveChart.SeriesCollection(4).Values = "='N+PRINT'!$G$44:$G$72"
ActiveChart.SeriesCollection(5).Values = "='N+PRINT'!$H$44:$H$72"
ActiveChart.SeriesCollection(6).Values = "='N+PRINT'!$I$44:$I$72"
ActiveChart.SeriesCollection(7).Values = "='N+PRINT'!$J$44:$J$72"
ActiveChart.SeriesCollection(8).Values = "='N+PRINT'!$K$44:$K$72"

End sub

Comme vous le voyez j'ai 8 séries, et pour décaler de 7 lignes je remplace chaque semaine les lignes par une addition de 7 c'est à dire ici c'est 44, semaine prochaine je mettrais 53 et 79 à la place de 72.

C'est assez rapide de faire un ctrl+F et remplacer les valeurs mais il existe très certainement un raccourci pour cela.

Faire un graphique glissant sur 29 jours avec la fonction décaler marcherait bien. Toutefois, les données du tableau ne sont pas remplies par mois mais par une kyrielle de personnes, ce qui fait qu'il existe des prévisions sur plusieurs jours qui ne sont pas encore arrivés, et qui engendre donc un décalage non souhaité.

Auriez-vous une idée de comment réaliser le décalage de +7 dans la macro s'il vous plaît?

Merci par avance à ceux qui répondront.

Bonne journée à vous tous! :)

3 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    une possibilité
    https://www.cjoint.com/c/CHArMVJuFtD

    Bonne suite
    1
    1. Yrmouf Messages postés 141 Statut Membre 5
       
      Bonjour, merci pour la réponse, cela fonctionne partiellement, je ne suis pas sûr de comprendre l'erreur, cela m'indique "Erreur d'exécution 9: L'indice n'appartient pas à la sélection"

      Par ailleurs je cherche à comprendre le code:

      Public Function Deca7(ByVal ss As String) As String
      Dim t
      t = Split(ss, "$") 'Séparation au niveau du $ mais que représente ss?
      t(2) = Left(t(2), Len(t(2)) - 1) + 7 'Rajout de +7 aux lignes mais que le (2)?
      t(4) = t(4) + 7 'Que représente le (4)?
      Deca7 = t(0) & "$" & t(1) & "$" & t(2) & ":$" & t(3) & "$" & t(4) 'Compilation des nouvelles lignes
      End Function

      Private Sub btDec7_Click()
      Dim ser As String, nuser As Long, nbser As Long, ts
      With ActiveSheet.ChartObjects(1).Chart
      nbser = .SeriesCollection.Count 'nb séries, compte le nombre de séries pour pouvoir faire décaler autant de séries qu'il y en a dans le graphique
      For nuser = 1 To nbser 'nuser représente toutes les séries qui existent
      ser = .SeriesCollection(nuser).FormulaLocal 'Récupération de la formule de =serie
      ts = Split(ser, ";") 'séparation au niveau de la sélection des cellules pour obtenir les lignes
      ts(1) = Deca7(ts(1)) 'utilisation de la macro plus haut pour décaler de 7 la première partie de séparation
      ts(2) = Deca7(ts(2)) 'utilisation de la macro plus haut pour décaler de 7 la deuxième partie de séparation
      ser = ts(0) & ";" & ts(1) & ";" & ts(2) & ";" & ts(3) 'compilation
      .SeriesCollection(nuser).FormulaLocal = ser
      Next nuser
      End With
      End Sub


      Est-ce que cela est juste? Pourriez-vous apporter plus de précisions s'il vous plaît? Si vous voulez bien bien sûr.

      Cordialement
      0
    2. Yrmouf Messages postés 141 Statut Membre 5
       
      Je viens de trouver mon erreur, mes excuses, merci beaucoup! Mais je veux bien une petite explication si vous avez le temps haha!
      0
  2. Yrmouf Messages postés 141 Statut Membre 5
     
    J'ai essayé comme piste:

    Sub Remplacer()
    '
    ' Remplacer
    '
    Dim i
    i = Range("AQ1").value+ 1 ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.SeriesCollection(1).XValues = "='N+PRINT'!$A$:$B$" &i
    ActiveChart.SeriesCollection(1).Values = "='N+PRINT'!$C$:$C$"&i
    ActiveChart.SeriesCollection(2).Values = "='N+PRINT'!$D$:$D$"&i
    ActiveChart.SeriesCollection(3).Values = "='N+PRINT'!$E$:$E$"&i
    ActiveChart.SeriesCollection(4).Values = "='N+PRINT'!$G$:$G$"&i
    ActiveChart.SeriesCollection(5).Values = "='N+PRINT'!$H$:$H$"&i
    ActiveChart.SeriesCollection(6).Values = "='N+PRINT'!$I$:$I$"&i
    ActiveChart.SeriesCollection(7).Values = "='N+PRINT'!$J$:$J$"&i
    ActiveChart.SeriesCollection(8).Values = "='N+PRINT'!$K$:$K$"&i
    End Sub

    Mais bon fonctionne seulement en rajout de lignes mais pas en décalage :(
    0
  3. foo
     
    bonjour

    un idée mettre une varriable

    Nsem = 44
    ou
    Nsem = Range("A1").Value

    "='N+PRINT'!$A$" & Nsem & ":$B$72"

    A+
    Maurice
    0
    1. Yrmouf Messages postés 141 Statut Membre 5
       
      Bonjour,

      Visiblement il y a une rupture d'instructions au niveau de ":$B$72", merci tout de même
      0