[Déplacé VB6 --> VBA] Macro Excel

matt014 Messages postés 2 Date d'inscription lundi 18 janvier 2010 Statut Membre Dernière intervention 18 janvier 2010 - 18 janv. 2010 à 10:12
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
matt014 Messages postés 2 Date d'inscription lundi 18 janvier 2010 Statut Membre Dernière intervention 18 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.

Cordialement,
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
Rejoignez-nous