[VBA Excel]

Résolu
caribou65 Messages postés 9 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 12 juin 2008 - 3 juin 2008 à 00:09
caribou65 Messages postés 9 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 12 juin 2008 - 7 juin 2008 à 00:56
Salut à tous
Tout d'abord un grand merci à tous les contributeurs de ce forum, qui m'ont été d'une aide précieuse lors de la réalisation de mes macros. Je m'y suis collé en état de débutant total, et ça commence à  rentrer :D

Mais là je coince un peu. J'ai fait une macro qui me sort des graphiques en fonction d'une colonne date et d'un paramètre. Il peut y avoir une multitude de paramètres donc comptage des colonnes et boucles.
En fait j'ai bien le bon nombre de graphiques, le premier est bon, mais le second affiche le premier graphe également, le troisième affiche le second...

voici mon code :

Sub graf()
'
' graf Macro
'
Dim nbparam As Integer
Dim i As Integer
Dim haut As Integer
Dim haut2 As Integer

    ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
    Application.ScreenUpdating = False
    
    'compter paramètres
    nbparam = Sheets("Feuil2").UsedRange.Columns.Count
    
    'boucle de traitement
    haut = 2    For i 1 To nbparam - 1 'car premiere colonnedate
    Sheets("Feuil2").Activate
    Range(Columns(1), Columns(i + 1)).Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range(Columns(1), Columns(i + 1))
    ActiveChart.ChartType = xlLine
    'positionnement des graphes
    With ActiveChart
        ActiveSheet.ChartObjects(i).Left = Range("I2").Left
        ActiveSheet.ChartObjects(i).Top = Range("I" & haut).Top
        ActiveSheet.ChartObjects(i).Width = 640
        ActiveSheet.ChartObjects(i).Height = 270
    End With
    haut = haut + 20
    Sheets("Feuil2").Select
    Next i
End Sub

Premier graphe: OK

2nd graphe: ça coince

Et le dernier, c'est carrément illisible

les quelques valeurs aberrantes qui apparaissent sont simplement dues à un disfonctionnement des capteurs ;)

Ma question est toute simple : Comment faire en sorte que mes graphes ne soient en fonction d'un et d'un seul paramètre ? (airtemp, pressure, ou autre...)

Merci d'avance 8-)

7 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
6 juin 2008 à 18:28
...

voila plus qu'a essayer

Sub graf()
'
' graf Macro
'
Dim nbparam As Integer
Dim i As Long
Dim haut As Integer
Dim haut2 As Integer
Dim LastValue As Long
Dim MaFeuil As Worksheet
Dim MaPlage As Range
    ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
    Application.ScreenUpdating = False
   
    Set MaFeuil = Sheets("Feuil2")
    With MaFeuil
        'compter paramètres (les points a la ligne suivante sont O B L I G A T O I R)
        nbparam = .UsedRange.Columns.Count
        LastValue = .UsedRange.Rows.Count
        'boucle de traitement
        haut = 2        For i 2 To nbparam '2 car premiere colonnedate
            'les points a la ligne suivante sont O B L I G A T O I R ils permetent d'associer a les fonctions a MaFeuil via le with
            Set MaPlage = .Range(.Cells(2, i), .Cells(LastValue, i))
            Charts.Add
            With ActiveChart
                .ChartType = xlLine
                .SeriesCollection.NewSeries
                .SeriesCollection(1).XValues = MaPlage 'valeur axe X
                .SeriesCollection(1).Values = MaFeuil.Range("A2:A" & LastValue) 'Valeur axe Y
                .SeriesCollection(1).Name = MaFeuil.Cells(1, i).Text 'nom de la serie
                .Location Where:=xlLocationAsObject, Name:=MaFeuil.Name
            End With
            With ActiveChart
                .HasTitle = True
                .ChartTitle.Characters.Text = MaFeuil.Cells(1, i).Text 'nom du graph
            End With
            'positionnement des graphes
            With .ChartObjects(i - 1)
                .Left = Range("I2").Left
                .Top = Range("I" & haut).Top
                .Width = 640
                .Height = 270
            End With
            haut = haut + 20
        Next i
    End With
    MaFeuil.Activate 'on a besoin d'activé la feuille sinon la ligne suivante (bizzarement)s'appliquera au dernier graph
    Application.ScreenUpdating = True
End Sub

et en prime

Sub GraphEffacerTout()
    Dim MonGraph As ChartObject
    For Each MonGraph In ActiveSheet.ChartObjects
        MonGraph.Delete
    Next
End Sub

A+
3
caribou65 Messages postés 9 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 12 juin 2008
7 juin 2008 à 00:56
Résolu en rajoutant dans With ActiveChart au sein de la boucle :
.SetElement (msoElementLegendNone)

héhé
merci encore bigfish !
3
caribou65 Messages postés 9 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 12 juin 2008
3 juin 2008 à 00:17
comment puis-je éditer mon message ? j'ai oublier de titrer correctement mon post
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
3 juin 2008 à 04:58
Salut,

cela vient clairement de ta boucle et peut etre plus particulierement de cette ligne :

  ActiveChart.SetSourceData Source:=Range(Columns(1), Columns(i + 1))

mais le pb est que sans le tableau cela vas pas etre simple, le mieux serait que tu nous montre a quoi ressemble ton tableau.

A+
0

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

Posez votre question
caribou65 Messages postés 9 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 12 juin 2008
3 juin 2008 à 08:49
Salut Bigfish et merci, je perdais espoir, après une nuit de prise de tête...

je me suis aussi dit que le souci venait de ce coté-là, j'ai testé avec ActiveChart.SeriesCollection(i).Xvalues   et la même en Values mais ça coince avec le i...

exemple de tableau

<col style=\"width: 93pt;\" width=\"124\" /><col style=\"width: 60pt;\" span=\"5\" width=\"80\" />----
DATE-TIME, AIRTEMP, PRESSURE, WINDDIR, WINDVEL,            RH, ----
01/01/2008 01:00, -1,05, 720,23, 69,77, 2,12, 17,77, ----
01/01/2008 02:00, -1,56, 719,77, 288,92, 2,44, 18,67, ----
01/01/2008 03:00, -1,1, 719,44, 301,67, 2,64, 17,17, ----
01/01/2008 04:00, -1,3, 718,82, 292,42, 4,19, 16,33, ----
01/01/2008 05:00, -1,39, 718,42, 161,08, 3,72, 15,42, ----
01/01/2008 06:00, -1,92, 718,15, 192,25, 3,1, 15,83, ----
01/01/2008 07:00, -2,25, 717,87, 265,58, 3,8, 16,5, ----
01/01/2008 08:00, -2,36, 717,64, 129,92, 4,69, 13,75, ----
01/01/2008 09:00, -1,93, 717,53, 132,17, 5,19, 14,42, ----
01/01/2008 10:00, -1,65, 717,57, 322,92, 5,52, 14

le tout sur environ 3000 lignes. Ici il y a 5 paramètres, c'est vraiment le cas maximal
0
caribou65 Messages postés 9 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 12 juin 2008
5 juin 2008 à 12:41
up
0
caribou65 Messages postés 9 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 12 juin 2008
6 juin 2008 à 19:52
c'est nickel !
j'ai jsute eu à inverser MaPlage et MaFeuil.Range("A2:A" & LastValue)  dans Xvalues et values pour avoir vraiment ce que je voulais, et j'ai retiré la ligne Application.ScreenUpdating = True juste avant le End Sub.

C'est vrai que pour les points je m'en serais pas aperçu tout seul, merci !

bon il reste un petit souci mais rien de bien méchant, je planche dessus, maintenant que le match est terminé...
A partir du second graphique, j'ai une deuxième série de valeurs, qui vient de je ne sais ou mais qui ne dérange en rien le graphe, ça fait juste désordre...
par ici

si tu as une idée, je la prends volontiers, mais tu en as déjà fait beaucoup, je t'en remercie !

bonne soirée
0
Rejoignez-nous