Range dynamique vba

Range -  
ccm81 Messages postés 11033 Statut Membre -
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

  1. Paf
     
    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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  3. Range
     
    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
    1. Paf
       
      oui, les deux sont équivallentes
      0
  4. Range
     
    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
    1. Paf
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  7. Range
     
    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
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  9. Range
     
    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
  10. Paf
     
    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
  11. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  12. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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