Rechercher : dans
Par :

VBA : problème Range sur plage dynamique

Dernière réponse le 5 oct 2008 à 10:37:09 chronicle13, le 4 oct 2008 à 09:33:25 
 Signaler ce message aux modérateurs

Bonjour à tous.

Je suis nouveau en programmation sur Excel et je n'ai pas pu résoudre mon problème alors je m'adresse à vous.

Je cherche à générer des graphiques de manière automatique. Pour cela je range les plages qui seront les axes de X et des Y.
j'utilise :

 XderLigne = Range(Range("B7"), Range("B7").End(xlDown))


Cela marche quand j'inscrit en "dur" les inputs. Le range marche et prend la plage de la 1ere cellule à la dernière non-vide


Pour mes besoins, je dois générer ces inputs via une fonction. Et la la fonction range ne marche plus du tout. Il semble que la 1ere cellule renvoyée soit OK mais me ressort -4161 pour la derniere cellule.

C'est à n'y rien comprendre. Il doit me manquer une étape à effectuer

Par avance merci si vous avez une idée!!




Dim Numéro_Simulation As Single

Cells(1, 2).Clear
ActiveSheet.Range("B7:IV17").ClearContents

For Numéro_Simulation = 1 To Cells(3, 2).Value
Cells(1, 2).Value = Cells(1, 2).Value + 1
Cells(7, 1 + Numéro_Simulation).Value = Cells(1, 2).Value
Cells(8, 1 + Numéro_Simulation).Value = Cells(2, 2).Value

Next

XderLigne = Range(Range("B7"), Range("B7").End(xlToRight))

Range("B8").Select
YderLigne = Range(Selection, Selection.End(xlToRight))



Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("D22")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = XderLigne
ActiveChart.SeriesCollection(1).Values = YderLigne
ActiveChart.SeriesCollection(1).Name = "=""Premium"""

ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "test"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveWindow.Visible = False
Windows("Classeur1.xls").Activate
Range("J4").Select
End Sub

Meilleures réponses pour « VBA : problème Range sur plage dynamique » dans :
[VBA] Détection de modification de cellule VoirExemple pour une MFC avec plus de 3 conditions. Private Sub Worksheet_Change(ByVal Target As Range) Dim Cel As Range For Each Cel In Target 'Adapter la/les plages. If Not Intersect(Cel, Range("B1:B30,D1:D30")) Is Nothing...
[VBA] Supprimer un mot dans une plage de cellule VoirSi on veut supprimer un mot dans une phrase il suffit de faire une petite macro qui supprime le mot recherché. Là où ça se corse c'est que le mot recherché pourrait être, par exemple "LEMOT" ou "LeMot" ou "lemot" ou encore "LeMot" etc.. Cette...

1

lermite222, le 4 oct 2008 à 11:28:58

Bonjour,
A première vue !
dans tes sérieColection() tu doit donner une plage et pas le bout de la plage.
Dim XderLigne as string
XderLigne = Range(Range("B7"), Range("B7").End(xlToRight)) .address
sinon tu donne le contenu.

Tu dit
A+ L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

2

chronicle13, le 4 oct 2008 à 19:17:10

Merci pour ta réponse, mais elle ne semble pas fonctionner.

Effectivement, elle me renvoie la plage de cellule en notation Excel (B7:CW7) et c'est tel quel qu'elle apparait sur l'axe des abscisses de mon graph. Ce n'est donc pas exploitable tel quel

Répondre à chronicle13

3

lermite222, le 5 oct 2008 à 07:04:21
  • +2

Re,
Je ne vois pas où est l'erreur, voir avec ce code, seule remarque, tu ne spécifie pas que les données sont en lignes et il est possible que par défaut ce soit en colonne

Sub AjouteGraph()
Dim XderLigne As String
Dim YderLigne As String

    XderLigne = Range(Range("B7"), Range("B7").End(xlToRight)).Address
    YderLigne = Range(Range("B8"), Range("B8").End(xlToRight)).Address

    Charts.Add
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("F28"), PlotBy:= _
        xlRows
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = Sheets("Feuil1").Range(XderLigne)
    ActiveChart.SeriesCollection(1).Values = Sheets("Feuil1").Range(YderLigne)
    
    Range("I14").Select
End Sub

A+ L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

4

 chronicle13, le 5 oct 2008 à 10:37:09

Super ca marche !!

Merci beaucoup pour ton aide !!!

Répondre à chronicle13
Collection CommentÇaMarche.net