Range dynamique vba

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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
      1. 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).
        1. oui, les deux sont équivallentes
      2. 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...
        1. 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
      3. 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
        1. 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".
          1. 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
            1. 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
              1. 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
                1. 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 ...
                  1. re

                    une autre version conforme a la RQ du precedent post

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

                    bon noël