matt014
Messages postés2Date d'inscriptionlundi 18 janvier 2010StatutMembreDernière intervention18 janvier 2010
-
18 janv. 2010 à 10:12
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
18 janv. 2010 à 16:49
Bonjour,
Un grand besoin d'aide ! Je dois rendre pour ce soir des macro pour créé un graphique. J'ai commencer, passer des heures a rechercher des infos sur tous les topics, mais la je sèche ...
Le contexte : J'ai un tableau généré par un logiciel, donc de taille variable. Je dois pouvoir selectionné deux colonnes pour pouvoir faire le graphique. Le premier problème est que la première colonne doit ètre le référentiel temps, et correspondre à l'axe des absisses.
Le deuxième problème, plus simple, et que je n'arrive pas a selectionné deux colonnes de taille variable pour la plage de donnée du graphique...
Voila, je vous remercie d'avance !!
Mon début de code :
Private Sub CommandButton1_Click()
Dim finLigne As Integer
finLigne = 4
Range("D4").Activate
Do While VarType(ActiveCell.Value) <> 0
finLigne = finLigne + 1
Cells(finLigne, 4).Activate
Loop
ActiveSheet.Name = "Données"
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets("Données").Range("A:A, D:D"), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphique"
With ActiveChart
ActiveChart.HasLegend = False
.HasTitle = True
.ChartTitle.Characters.Text = "Graphique du Ping"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Temps de réponse (en ms)"
End With
ActiveSheet.Deselect
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 18 janv. 2010 à 11:28
Salut
Sais-tu le faire à la main ?
Je pense que oui, alors il te suffit d'enregistrer une macro.
La première partie est étrange :
- VarType dans le Do-While ? pourquoi VarType ? '0' serait-il un type de variable ?
- Pour rechercher une cellule vide dans une colonne, il y a plus efficace que de faire une incrémentation :
Range("D1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Le pire dans tout ça, c'est que tu recherches une cellule mais que tu ne t'en sers pas après, dans le graphique.
On a vraiment l'impression que tu as mis du code pour faire joli !
Pour quelqu'un qui a recherché des heures, ça ne fait pas sérieux.
Une fois le graphique généré, pour inverser l'absisse/ordonnée, il te suffit de faire un clic-droit sur le graphique + "Données source" et, dans l'onglet "Série", d'aller intervertir la définition de plage des X et des Y.
Il va falloir apprendre à chercher avant d'apprendre à programmer ...
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
matt014
Messages postés2Date d'inscriptionlundi 18 janvier 2010StatutMembreDernière intervention18 janvier 2010 18 janv. 2010 à 12:06
Bonjour,
1) Oui je sais me servir de l'enregistreur, mais il ne prend pas en compte les tableau variable, il me semble.
2) Oui je ne me sers pas de la cellule variable obtenu par "finLigne", car justement je n'y arrive pas, raison de mon post. Pour être plus précis, il faudrai que la plage de donnée du graphique soit du genre : Range("A4:A" & finLigne, "D4:D" & finLigne) mais ceci ne fonctionne pas. J'ai aussi essayer avec "Union" mais je n'ai pas eu plus de succès.
3) Concernant l'absisse, ce que je souhaitais est un écar proportinelle aux donnée.
Ex : A4=Sunday, January 10, 2010 01:00:00
A5=Sunday, January 10, 2010 02:00:00
A6=Sunday, January 10, 2010 04:00:00
Il faudra un écart sur le graphique correspondant a l'interval de temps.
Voila, mes recherches ont peut-être été mal faite, ou on manqué de "serieux", mais j'avais fait mon possible.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 18 janv. 2010 à 16:49
Re
1) Lors d'un enregistrement, en effet, les zones sont nommées en dur. (ou je n'ai pas saisi le sens de "tableau variable")
2) C'est pourtant par là qu'il va falloir passer.
Il te suffit de bien respecter la syntaxe : il manque la virgule de séparation des zones
Range("A4:A" & finLigne, ",
D4:D" & finLigne)
3) Nouvelle question ?
Ce n'est qu'une question de format.
Ton principal problème est que ces dates ne sont pas dans le même langage que celui de Excel.
Du coup, Excel ne reconnait pas January ni Sunday.
Donc, dans un premier temps, il va falloir faire du Find and Replace de tous ces termes (en respectant les accents et pas de majuscules) :
January --> janvier, February --> février ...
Monday --> lundi ...
Ensuite seulement, tu pourras demander à Excel de changer le format des cellules pour n'afficher que l'heure.
[Quelques minutes plus tard]
Bof, Excel ne reconnait pas ce format date, même en inversant le n° du jour et le mois, à la française.
Il va falloir revoir la méthode d'importation : Vois si tu peux découper les chaines avant import pour ne garder que l'heure.
Sinon, il va falloir le faire par code :
- Boucle d'énumération de chaque cellule du Range de tes cellules "date"
- Dans cette boucle, isoler le dernier paquet de lettres
- et voir ce qu'il reste dans la cellule
Dim maCell As Object
Dim aTableau() As String
For Each maCell In Range("A1:A4012")
aTableau = Split(maCell.Value, " ")
maCell.Value = aTableau(UBound(aTableau))
Next
Le problème suivant sera les horaires à cheval entre deux journées ...
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)