Range dynamique vba

Fermé
Range - 21 déc. 2010 à 09:39
ccm81 Messages postés 10863 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 12 juin 2024 - 22 déc. 2010 à 22:01
Bonjour,
Je cherche à faire une macro vba pour créer un graphique.
Le problème est pour sélectionner.
Auriez vous une idée pour faire un Range((Colonne,Ligne) : (Colonne2,Ligne2)) ?
J'ai beau chercher, soit je ne suis pas doué, soit c'est que ce n'est pas clair.

11 réponses

Bonjour
tu peux essayer:

Range("A1:D6").Select

Si tu veux absolument entrer les références par N° de ligne et de colonne, le temps que je réfléchisse, quelqu'un t'auras apporter la réponse !!

Bonne journée

Edit:

Range(Cells(1, 1), Cells(4, 6)).Select
correspond peut-être plus à ton attente
0
ccm81 Messages postés 10863 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 12 juin 2024 2 410
Modifié par ccm81 le 21/12/2010 à 10:14
bonjour,
tes explications sont un peu vagues
en supposant que ton graphique est du type nuage de points et est crée voila un bour de code qui permet d'y ajouter une série en récupérant les valeurs dans les colonnes G,H,I,J et dans la ligne li

Private Sub MAJ_Graph(J) 
Const PremLigne = 7 
Dim numserie As Long 
Dim li As Long 
Dim nbseries As Long 
  nbseries = ChartObjects(1).Chart.SeriesCollection.Count + 1 
  numserie = Range("total").Value 
  li = PremLigne + numserie - 1 
  With ChartObjects(1).Chart 
    .SeriesCollection.NewSeries 
    .SeriesCollection(nbseries).XValues = Sheets("Feuil1").Range("G" & li & ":H" & li) 
    .SeriesCollection(nbseries).Values = Sheets("Feuil1").Range("I" & li & ":J" & li) 
  End With 
End Sub


pour aller plus loin il faut un cahier des charges plus explicite ou tu envoies le fichier (sans données confidentielles) sur cijoint.fr

bon courage
0
En fait, j'ai un cinquantaine de tableau. Pour chaque tableau, je dois faire soit un secteur 3D, soit un Histogramme 3D.
Je souhaiterai automatisé la manip. (juste lancer la macro qui me créerait le graphique sur une nouvelle feuille)
Voilà un exemple de tableau que je peux avoir (pour un secteur 3D) :

Répartition par pays sur la période (Du 01/02/2009 Au 10/11/2009)
B 7937,037598
L 1451,699829
I 567,5300293
NL 68,70999908
A 390,3699951
D 977,2700195
E 46,61000061
F 0
DK 0

@Paf : Range("A1:D6").Select = Range(Cells(1, 1), Cells(4, 6)).Select ?
Parceque si c'est le cas, je pourrai prendre l'enregistreur de macro et modifier juste les cellules selectionnées par des variables
Ex : A1 serait Cells(CDebutTableau,LDebutTableau).
0
oui, les deux sont équivallentes
0
J'ai besoin d'une explication.
Voila le code de l'enregistreur de macro légèrement trafiqué
Public Sub Secteur3D(CDebutTableau As Integer, LDebutTableau As Integer, CFinTableau As Integer, LFinTableau As Integer, Onglet As String, Feuille As String, Fichier As String)
'
'
    Range(Cells(LDebutTableau, CDebutTableau), Cells(LFinTableau, CFinTableau)).Select
    Charts.Add
    ActiveChart.ChartType = xl3DPieExploded
    ActiveChart.SetSourceData Source:=Workbooks(Fichier).Sheets(Feuille).Range(Cells(LDebutTableau, CDebutTableau), Cells(LFinTableau, CFinTableau)), _
        PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:= _
        Onglet
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Repartition CA"
    End With
End Sub


A partir de la ligne
ActiveChart.SetSourceData Source:=Workbooks(Fichier).Sheets(Feuille).Range(Cells(LDebutTableau, CDebutTableau), Cells(LFinTableau, CFinTableau)), _
        PlotBy:=xlColumns

La fonction saute la fin et quitte.
De plus, le graphique qui se créé à ce moment là est un secteur 3D, avec le bon nombre de parties, mais toutes les parties sont égales. Deplus ce sont des dates et non des nombres...
0
ActiveChart.SetSourceData Source:=Workbooks(Fichier).Sheets(Feuille).Range(Cells(LDebutTableau, CDebutTableau), Cells(LFinTableau, CFinTableau)), _ 
        PlotBy:=xlColumns

tu as fais 2 lignes alors que c'est la même "commande".

ActiveChart.SetSourceData _ 
Source:=Workbooks(Fichier).Sheets(Feuille).Range(Cells(LDebutTableau, CDebutTableau), Cells(LFinTableau, CFinTableau)), _ 
        PlotBy:=xlColumns


De plus il semble que Source "n'apprécie" guère le range(cells.....

Mes connaissances s'arrêtent là.

Bon courage
0

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

Posez votre question
ccm81 Messages postés 10863 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 12 juin 2024 2 410
Modifié par ccm81 le 21/12/2010 à 14:53
re
avec range, il faut donner une plage ici du type R1C1:R5C10 par exemple donc quelque chose du genre

dim plage as string
plage = "R" & LDebutTableau & "C" & DebutTableau & ":R" & LFinTableau & "C" & CFinTableau
puis
ActiveChart.SetSourceData Source:=Workbooks(Fichier).Sheets(Feuille).Range(plage)

RQ. pour alleger ton code tu peux mettre With ActiveChart après sa creation ce qui te permettrait d'éviter tous les ActiveChart qui suivent

bonne suite
0
Désormais, à partir de la ligne
 Range(plage).Select 
il m'éjecte de la fonction !
Pourtant j'ai fait comme tu m'avais dit.
Pour info, dans ma situation de test, plage = "R2C3:R19C4".
0
ccm81 Messages postés 10863 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 12 juin 2024 2 410
21 déc. 2010 à 15:43
re
que vient faire .Select ici ?
que veux tu dire par il m'éjecte de la fonction?
as tu vérifié que lors de l'exécution la valeur de plage est correcte?
pour y voir plus clair, je reviens a mon 1° post : envoies un fichier exemple (avec ta macro et sans données confidentielles) au format excel 2003 sur cijoint.fr
bonne suite
0
Alors le select, c'est pour selctionner la zone à partir de laquelle je vais monter mon tableau.
Quand je parle d'éjecter, en faisant un nouveau fichier pour tester la macro, c'est une erreur '1004' : "La méthode 'range' de l'objet '_Global' a échoué" qui ne s'affichait pas auparavant.
Voici le lien du fichier en exemple :
http://www.cijoint.fr/cjlink.php?file=cj201012/cijX9Pnhz9.xls
0
Re
Tant qu'on aborde pas des sujets trop spécifiquement graphiques, je peux t'apporter ma maigre aide.

ci dessous la modif d'une partie de ta macro:

plage = "A" & 2 & ":B" & (2 + UBound(Tableau1))

'Partie création de graphique
'Workbook(Fichier).Feuille(Feuille).Range(plage).Select
Range(plage).Select
Charts.Add
With ActiveChart
    .ChartType = xl3DPieExploded
    .SetSourceData Source:=Range(plage), PlotBy:=xlColumns
    .Location Where:=xlLocationAsNewSheet, Name:=Onglet
    .HasTitle = True
    .ChartTitle.Characters.Text = Titre
End With



Je n'ai pas utilisé la ligne workbook... puisque ça concerne le classeur et la feuille sur laquelle on est.

Bonne continuation
0
ccm81 Messages postés 10863 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 12 juin 2024 2 410
Modifié par ccm81 le 21/12/2010 à 18:50
re

pas mal de maladresses dans ton code
si j'ai bien compris tu veux

1. selectionner une plage sur la feuille1 (qui contient TOUTES les données)
2. une macro qui a partir de la plage selectionnée te fabrique un camembert sur une nouelle feuille

le pb est alors simple

Private Sub CommandButton1_Click()  
Dim plage As Range  
Dim onglet As String  
Dim nbfeuilles As Long  
  Set plage = Selection  
  nbfeuilles = Sheets.Count  
  onglet = "Feuil" & nbfeuilles + 1  
  Charts.Add  
  ActiveChart.ChartType = xl3DPie  
  ActiveChart.SetSourceData Source:=plage  
  ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=onglet  
  Sheets(onglet).Move After:=Sheets(nbfeuilles + 1)  
End Sub


tu mets un bouton sur la feuille 1
tu y affectes ce code

http://www.cijoint.fr/cjlink.php?file=cj201012/cijVywnNFu.xls

RQ. la macro ne fait pas de mise en forme sophistiquée du graphique.
Pour cela il vaudrait mieux faire une copie d'un joli graphique exécuté par exemple sur la feuille 1 sur une nouvelle feuille, et lui affecter la plage selectionnée

bonne suite

un oubli > Le titre mais ça tu sais faire ...
0
ccm81 Messages postés 10863 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 12 juin 2024 2 410
22 déc. 2010 à 22:01
re

une autre version conforme a la RQ du precedent post

http://www.cijoint.fr/cjlink.php?file=cj201012/cijYPlQAzF.xls


bon noël
0