valeurs sources dans graphique

knaekes

XLDnaute Occasionnel
Bonjour,

je souhaite créer un graphique à partir d'une macro
comment faire pour saisir les valeurs sources lorsque celles-ci sont situés dans des cellules fusionnée ?
Mon souci est que ma macro prend en compte chaque cellule individuellement
Or comme les cellules sont fusionnées une seule cellule contient une valeur, toute les autres cellules sont vides.
Par conséquent ma macro prend en compte toute les cellules vide.
La syntaxe xvalues = range .... n'est pas adaptée

Ci joint mon fichier
pour se rendre compte de mon problème il suffit de saisir les valeurs sources manuellement sans passer par la macro, on observera dès lors la différence sur l axe des abscisses.

Merci pour votre aide
 

Pièces jointes

  • graphh.xlsm
    174.4 KB · Affichages: 37

job75

XLDnaute Barbatruc
Re : valeurs sources dans graphique

Bonjour knaekes,

Créez un tableau auxiliaire constitué de cellules non fusionnées...

Vous y mettrez des formules permettant de copier les valeurs sources.

C'est ce tableau auxiliaire que vous utiliserez pour définir le graphique.

A+
 

knaekes

XLDnaute Occasionnel
Re : valeurs sources dans graphique

en fait je ne voudrais pas créer un autre tableau cela serait vraiment lourd il s'agirait de reproduire le meme schéma pour des dizaine de colonnes et des milliers de lignes

en fait je pensais plutôt créer une liste qui excluerait les valeurs vides

quelque chose du genre:
Code:
If Cells(i, 5) <> "" Then
dates = dates & Cells(i, 5) & "."
End If
Next i
xvalues = ""={" & dates & "}""
'"={1.2.3}"

de manière à reproduire un truc semblable à une saisie manuelle
Mais malheureusement la syntaxe contient une erreur que je ne trouve pas
 

job75

XLDnaute Barbatruc
Re : valeurs sources dans graphique

Re,

Oui on peut créer des listes matricielles, en procédant ainsi :

Code:
Sub CréationListes()
Dim i As Long, x(), y(), n As Long
For i = [E65536].End(xlUp).Row To 28 Step -1
  If IsDate(Cells(i, "E")) Then
    ReDim Preserve x(n)
    ReDim Preserve y(n)
    x(n) = Cells(i, "E").Text 'si l'on veut du texte
    'x(n) = Cells(i, "E").Value2 'si l'on veut le nombre
    y(n) = Cells(i, "O")
    n = n + 1
  End If
Next
'---noms définis---
ThisWorkbook.Names.Add "X", x
ThisWorkbook.Names.Add "Y", y
End Sub
Les listes sont stockées dans les noms définis X et Y, que l'on pourra ensuite utiliser comme données sources du graphique.

A+
 

kjin

XLDnaute Barbatruc
Re : valeurs sources dans graphique

bonsoir, salut Job :),
Ca sens le ça marche pas ! :D
Code:
Sub Macro1()
Dim rng As Range, rngF As Range, c As Range
Dim tabA(), tabB()
Dim i%, x%, ser As Series
On Error Resume Next
    With ActiveWorkbook
        .Names("Etiq").Delete
        .Names("Valeurs").Delete
    End With
On Error GoTo 0
With ActiveSheet
    .AutoFilterMode = False
    .Range("E5").AutoFilter Field:=1, Criteria1:="<>"
    Set rng = .AutoFilter.Range
    On Error Resume Next
    Set rngF = rng.Offset(1, 0).Resize(rng.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If rngF Is Nothing Then
        MsgBox "Pas de données !"
        Exit Sub
    End If
    ReDim tabA(rngF.Count)
    ReDim tabB(rngF.Count)
    For i = rngF.Areas.Count To 1 Step -1
        For Each c In rngF.Areas(i)
            tabA(x) = Format(c, "mmm yy")
            tabB(x) = c.Offset(0, 10)
            x = x + 1
        Next
    Next
    .ChartObjects.Delete
    ActiveWorkbook.Names.Add Name:="Etiq", RefersTo:=tabA
    ActiveWorkbook.Names.Add Name:="Valeurs", RefersTo:=tabB
    Set cht = .ChartObjects.Add(50, 50, 1500, 50)
    With cht.Chart
       .ChartType = xlColumnClustered
        Set ser = .SeriesCollection.NewSeries
        With ser
            .XValues = "='" & ActiveWorkbook.Name & "'!Etiq"
            .Values = "='" & ActiveWorkbook.Name & "'!Valeurs"
        End With
        With .Axes(xlCategory)
            .TickLabelSpacing = 1
            .TickMarkSpacing = 1
            .TickLabels.AutoScaleFont = False
            .TickLabels.Font.Size = 8
            .TickLabels.Orientation = xlUpward
        End With
        .Legend.Delete
    End With
    .AutoFilterMode = False
End With
End Sub
A+
kjin
 

Pièces jointes

  • knaekes.xls
    216.5 KB · Affichages: 34
  • knaekes.xls
    216.5 KB · Affichages: 35
  • knaekes.xls
    216.5 KB · Affichages: 32

job75

XLDnaute Barbatruc
Re : valeurs sources dans graphique

Bonjour knaekes, salut kjin,

Dans le fichier joint, le graphique ayant été créé, j'ai défini la série par cette macro :

Code:
Sub DefinirSerie()
Dim i As Long, x(), y(), n As Long
For i = 28 To [E65536].End(xlUp).Row
  If IsDate(Cells(i, "E")) Then
    ReDim Preserve x(n)
    ReDim Preserve y(n)
    x(n) = Cells(i, "E").Text 'si l'on veut du texte
    'x(n) = Cells(i, "E").Value2 'si l'on veut le nombre
    y(n) = Cells(i, "O")
    n = n + 1
  End If
Next
'---noms définis---
ThisWorkbook.Names.Add "X", x
ThisWorkbook.Names.Add "Y", y
'---Définition de la série---
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
  .XValues = "='" & ThisWorkbook.Name & "'!X"
  .Values = "='" & ThisWorkbook.Name & "'!Y"
End With
End Sub
Nota 1 : pour l'échelle de l'axe des abscisses, l'option "Abscisses en ordre inverse" est cochée.

Nota 2 : j'ai choisi le type "Histogramme" pour montrer que les graduations de l'axe ne passent pas par des points.

A+
 

Pièces jointes

  • Graph(1).xls
    234.5 KB · Affichages: 33
  • Graph(1).xls
    234.5 KB · Affichages: 41
  • Graph(1).xls
    234.5 KB · Affichages: 42

knaekes

XLDnaute Occasionnel
Re : valeurs sources dans graphique

Merci pour la réponse,

J'aimerai à terme appliquer cette macro à plusieurs colonnes.
Pour ne pas réécrire entièrement la macro je souhaite l'imbriquer dans un boucle.
Par contre je ne sais pas comment renommer les "noms de variable"
j'avais pensé à
Code:
ThisWorkbook.Names.Add "X" & d, x
mais visible cela ne fonctionne pas.
le problème se pose également lors de l'écriture de la formule qui contient cette variable
Code:
.XValues = "='" & ThisWorkbook.Name & "'! X"

comment faire ?
 

knaekes

XLDnaute Occasionnel
Re : valeurs sources dans graphique

Bonjour job75
Bonjour Kjin

Vous avez tout à fait raison, la moindre des choses est de dire merci pour un service rendu. Je m'excuse donc, pour ne pas avoir répondu plus tôt. En fait la raison est simple, je n'avais pas travaillé sur le fichier en question depuis un certains temps et par conséquent je n'avais pas testé la macro avant aujourd'hui. Par ailleurs je vous invite à consulter les précédentes discussions que j'ai ouverte sur le forum (et auxquelles vous avez entre autre pris part) pour vous rentre compte que je remercie toujours les contributeurs de ce forum. De ce fait je vous aurai remercié même si je n'avais pas eu de nouvelle question.

Comme souhaité vous trouverez ci-joint le fichier.

Merci d'avance pour votre aide
 

Pièces jointes

  • graphhh3.xlsm
    66.2 KB · Affichages: 40
Dernière édition:

job75

XLDnaute Barbatruc
Re : valeurs sources dans graphique

Re,

Bon, il n'y avait pas grand'chose à faire :

Code:
suite1:
n = 0 'RAZ, c'est essentiel
For i = 5 To [E65536].End(xlUp).Row
    If IsDate(Cells(i, "E")) Then
    ReDim Preserve x(n)
    ReDim Preserve y(n)
    x(n) = Cells(i, "E").Text 'si l'on veut du texte
    'x(n) = Cells(i, "E").Value2 'si l'on veut le nombre
    y(n) = Cells(i, xx)
    n = n + 1
  End If
Next
'---noms définis---
ThisWorkbook.Names.Add "X", x
ThisWorkbook.Names.Add "Y_" & Replace(nom, " ", "_"), y
'---Définition de la série---
'(côte à gauche, côte en haut, largeur, hauteur
Set cht = ActiveSheet.ChartObjects.Add(0, ch, 1000, 400)
With cht.Chart
    Set ser = .SeriesCollection.NewSeries
        With ser
            .Name = nom
            .XValues = "='" & ThisWorkbook.Name & "'! X"
            .Values = "='" & ThisWorkbook.Name & "'!Y_" & Replace(nom, " ", "_")
        End With
Ne pas oublier que le nom d'un nom défini ne peut pas contenir d'espace.

Et qu'il ne doit pas être une référence de cellule.

A+
 

Discussions similaires

Réponses
7
Affichages
322

Statistiques des forums

Discussions
312 241
Messages
2 086 523
Membres
103 242
dernier inscrit
Patoshick