Range dynamique vba
Fermé
Range
-
21 déc. 2010 à 09:39
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 - 22 déc. 2010 à 22:01
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 - 22 déc. 2010 à 22:01
A voir également:
- Range dynamique vba
- Tableau croisé dynamique - Guide
- Liste déroulante dynamique excel - Guide
- Out of range - Forum Ecran
- Ecran noir avec 'out of range" sous windows 10 - Forum Ecran
- Incompatibilité de type vba ✓ - Forum Programmation
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:
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)).Selectcorrespond peut-être plus à ton attente
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
Modifié par ccm81 le 21/12/2010 à 10:14
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
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
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
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).
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).
J'ai besoin d'une explication.
Voila le code de l'enregistreur de macro légèrement trafiqué
A partir de la ligne
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...
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...
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
Modifié par ccm81 le 21/12/2010 à 14:53
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
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
Désormais, à partir de la ligne
Pourtant j'ai fait comme tu m'avais dit.
Pour info, dans ma situation de test, plage = "R2C3:R19C4".
Range(plage).Selectil m'éjecte de la fonction !
Pourtant j'ai fait comme tu m'avais dit.
Pour info, dans ma situation de test, plage = "R2C3:R19C4".
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
21 déc. 2010 à 15:43
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
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
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
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
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:
Je n'ai pas utilisé la ligne workbook... puisque ça concerne le classeur et la feuille sur laquelle on est.
Bonne continuation
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
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
Modifié par ccm81 le 21/12/2010 à 18:50
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
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 ...
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 ...
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
22 déc. 2010 à 22:01
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
une autre version conforme a la RQ du precedent post
http://www.cijoint.fr/cjlink.php?file=cj201012/cijYPlQAzF.xls
bon noël