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...
A voir également:

9 réponses

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
delphine
 
je vais regarder merci!
0
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
Fxbrg Messages postés 715 Statut Membre 199
 
tu peux mettre tout ou partie de ton fichier en ligne (sur https://www.cjoint.com/ par exemple...)?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
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
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