Macro excel

delphine -  
herve_D62 Messages postés 11 Statut Membre -
Bonjour,
j'ai un petit souci!

j'ai un tableau excel à partir duquel je génère automatiquement un histogramme. (en abscisse: les mois et en ordonnées: des pourcentages).
je souhaite que mon abscisse soit réajuster à chaque fois que l'on change de mois!
je m'explik! si on est en février, je veux ke l'abscisse soit: de Fév 07 à Jan 08, et lorsque l'on est en mars, que l'abscisse soit de Mars 07 à Février 08
en gros que mon échelle soit tjs de 12 mois mais que le dernier mois afficher soit le mois précédent!

est-ce possible avec une macro?

merci beaucoup pour votre aide!!

j'espere avoir ete assez claire...
Configuration: Windows XP
Internet Explorer 6.0

9 réponses

  1. Fxbrg Messages postés 715 Statut Membre 199
     
    Regarde ici l'utilisation de la fonction DECALER, ça devrait le faire :-)

    http://www.excelabo.net/excel/graphmaj.php

    :-)
    0
  2. delphine
     
    désolé mais j'ai carrément du mal à comprendre ce qu'il fo faire!!! lol
    je dois vraiment etre une quiche mais bon!
    0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. delphine
     
    c pa possible de faire une macro ki regarde le mois en cours et ki modifie l'échelle en fonction?
    je peu pa le mettre en ligne! désolé!
    0
  5. Fxbrg Messages postés 715 Statut Membre 199
     
    Le problème n'est pas de mettre l'échelle "en fonction", c'est de faire un graphique "flottant"...

    Est-ce que le "mois en cours" a une valeur dans ton tableau? On peut faire une recherche de la dernière valeur et faire un tableau avec les 12 valeurs précédentes...

    Sinon, si tu veux le faire en fonction de la date du jour, on peut bien sûr analyser la dite date, trouver quel mois on est. Par contre il faut que dans ton tableau, les mois soient identifiables...

    Tu peux pas en extraire un petit bout, même tout petit, pour voir à quoi ça ressemble? pas simple sans savoir :-)
    0
  6. delphine
     
    en fait c compliqué à extraire car mon tableau est super compliqué!
    il est enorme! en fait, je fais d stats! je crée un Tableau de bord!
    dc ds mon tableau g pa mal de ligne et chacune me génère un graphique

    pour répondre à ta kestion, le mois en cours je n'ai pa de valeur car com c d stats, et ba le pourcentage pour le mois en cours il n'est calculé qu'au début du mois précédent!
    pour l'instant ce que j'avai fai pour voir a koi ressemblerait ma macro, j'ai modifier l'echelle de mon graphique en faisan com si je changeait de mois et voila le code ke j'ai eu:

    Sub Echelle()

    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.Axes(xlCategory).Select
    With ActiveChart.Axes(xlCategory)
    .MinimumScale = "01/03/2007"
    .MaximumScale = "01/02/2008"
    .BaseUnitIsAuto = True
    .MajorUnitIsAuto = True
    .MinorUnitIsAuto = True
    .Crosses = xlAutomatic
    .AxisBetweenCategories = True
    .ReversePlotOrder = False
    End With
    End Sub

    maintenant ce ke cherchai à faire c mettre une condition sur MinimumScale et MaximumScale !!!
    c un peu plus clair? j'espere
    0
  7. Fxbrg Messages postés 715 Statut Membre 199
     
    :-)

    Franchement pas certain qu'il suffise changer maximumscale et minimum scale sur ton graphique pour avoir ce que tu veux... :-)
    Néammoins, pour faire ça, tu peux utiliser des variables : (tu peux mettre un bouton dans ta feuille et tu mets ce code derrière...)

    Dim maxs, mins As String
    maxs = "01/" & Right(Date, 7)
    mins = "01/" & Right((Date - 11 * 30), 7)

    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.Axes(xlCategory).Select
    With ActiveChart.Axes(xlCategory)
    .MinimumScale = mins
    .MaximumScale = maxs
    .BaseUnitIsAuto = True
    .MajorUnitIsAuto = True
    .MinorUnitIsAuto = True
    .Crosses = xlAutomatic
    .AxisBetweenCategories = True
    .ReversePlotOrder = False
    End With

    Dis voir si ça fonctionne :-)
    0
  8. herve_D62 Messages postés 11 Statut Membre
     
    Bonsoir
    En fait en modifiant la zone de données ton échelle va se mettre à jour
    J'ai eu un graphique modulable aussi à faire , sauf que le point de départ était fixe
    Il faudra donc ajouter des variables pour le début ( genre offset...)

    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("B5:B10," & N_col & "5:" & N_col & "10"), _
    PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil2"
    ActiveSheet.ChartObjects(ActiveChart.Parent.Name).Name = "Graph_1"

    les données étaient en "Feuille1" , le graph en 2
    Donc je partais be B5:B10 jusqu'au dernier mois connu , donc les abscisses s'allongent chaque mois ( c'était mensuel)
    Si le dernier mois connu était en "F" , N_col a pour valeur "F" donc cela faisait : "F5:F10" , il y a du traitement avant, bien sûr !
    donc "bidouiller" "B5:B10" avec des variables qui recherchent la position que tu veux , puis celle de Fin !
    Nomme en "dur" ton graphe ( ici "Graph_1" ) sinon il va s'incrémenter à chaque lancement "graphe1" , 2, .....100
    0