Syntaxe VBA Sheets.Range avec Range variable

[Résolu/Fermé]
Signaler
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011
-
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
-
Salut,

J'ai une ptite macro excel pour faire des graphqiues mais je bug sur un point, et j'avoue qu'apres avoir tésté maintes et maintes choses, mes nerfs commencent a lacher, j explique:

Je determine mes coordonés de la maniére suivante:

Set Coord = Range(Cells(q, 15), Cells(q, 16))

pour avoir:

ActiveChart.SetSourceData Source:=Coord

Cependant, mon Coord, va chercher le range dans la feuille ou mon graphique est crée, mais je voudrais qu'il aille chercher ce range dans une autre feuille, alors j ai vu pas mal de chose sur le forum mais je trouve toujours pas...
J ai essayer par exemple un truc du style:

Set Coord = ThisWorkbook.Sheets("Calcul").Range(Cells(q, 15), Cells(q, 16))

ou

Set Coord = ThisWorkbook.Sheets("Calcul").Range(Cells(q, 15), Cells(q, 16)).value

ou même

Set Feuille = Sheets("Calcul")
Set Coord = Feuille.Range(Cells(q, 15), Cells(q, 16))

Voir

Set Feuille = Sheets("Calcul")
Set Coord = Range(Cells(q, 15), Cells(q, 16))
avec
ActiveChart.SetSourceData Source:=Feuille.Coord

Mais toujours pas de magie....

Si qqn a la solution, il sauverait mes nerfs ;)

Merci encore a vous amis développeur pour votre disponibilité.

Cordialement


11 réponses

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Bonjour,

ActiveChart.SetSourceData Source:= Sheets("Calcul").Range("A" & q & ":B" & q)


Pas tester mais essaye.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Marche pas
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Marche pas ?????
c'est quoi qui dis ?????
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Je pensaitr avoir essayer ca mais apparement non merci encore
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Bon, si tu modifie la plage et que le graphique n'est pas actif ça marche pas bien évidement.
Tu dois connaître le nom du graphique, pour ça, tu clic droit sur le graphique >> Affecter une macro, tu devrais avoir en première ligne "Graphique XX_QuandClic" ou XX est un numéro.
Tu mémorise le N°. et...
    ActiveSheet.ChartObjects("Graphique XX").Activate 
    ActiveChart.SetSourceData Source:=Sheets("Calcul").Range("A" & q & ":B" & q)


Ça j'ai tester et ça fonctionne.

L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Tu ne crois pas que tu complique un tout petit peu ?
Voir un exemple à ma façon.
A+
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

autant pour moi, ca marche nikel merci
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Salut lermitte,

Merci pour ton ptit post qui en outre m'as été bien utile, mais j ai une petite problematique sympathique:

Mon graph se fait de la maniére suivante:

J'ai creer un userform dans lequel on a des checkbox (15 au total...)
Pour le moment, si je coche 2 check box, ma macro me sort deux graphiques ( un par check box...)
ce que je cherche a faire, c'est lorsqu'on coche deux check box, les resultat arrivent dans le même graph.
Je te balance ma macro pour que tu comprenne mieux,

Dim q As Integer
q = 1
For n = 1 To 15
q = q + 1

If Me.Controls("CheckBox" & n).Value = True Then

Dim Nom As Variant
Nom = "=Calcul!$F$3"
Dim TP As Variant
TP = "=Calcul!$O$1"
Dim TF As Variant
TF = "=Calcul!$P$1"


Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Calcul").Range("O" & q & ":P" & q)
ActiveChart.SeriesCollection(1).XValues = Nom
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graphiques"
ActiveChart.SetSourceData Source:=Sheets("Calcul").Range("O" & q & ":P" & q)
ActiveChart.PlotBy = xlColumns
ActiveChart.SeriesCollection(1).XValues = Nom
ActiveChart.SeriesCollection(1).Name = TP
'ActiveChart.SeriesCollection(2).Name = TF
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MinimumScaleIsAuto = False
ActiveChart.Axes(xlValue).MinimumScale = 0
ActiveChart.SetElement (msoElementChartTitleAboveChart)
ActiveChart.ChartTitle.Text = "Analyse du temps de travail:" & Sheets("calcul").Range("F" & q)
ActiveChart.SetSourceData Source:=Sheets("Calcul").Range("O" & q & ":P" & q)
ActiveChart.PlotBy = xlColumns
ActiveChart.SeriesCollection(1).Name = TP
ActiveChart.SeriesCollection(2).Name = TF
ActiveChart.SeriesCollection(1).XValues = Sheets("Calcul").Range("F" & q)

Else
End If

Comme tu voi, c'est bien le bordel, mais ca marche bien, je nettoyerais plus tard les lignes répétés...


Ma base de données est comme cela:

En colone F, j'ai le nom de la personne, en O, son temps de travail, et en P, le temps de travail qu'il doit efféctué... Mhmhmhmh du bon controle de gestion tu vas me dire ;)
Chaque checkbox represente un employé.


Effectivement, il va me Charts.add a chaque boucle... normal, mais je vois pas comment je pourrait eviter ca.

J'espere que je suis clair,

Si tu as une idée...

Merci
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Non seulement j'ai une idée mais je t'ai déjà donner la réponse ici
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Ouais c bien ce qui me semblait.... faut que je mette ca en place et je te tien au courant merci beaucoup
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Mais la variable q ne va t elle pas rester unique a la fin de la boucle?
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Ok, j ai reflechi.... je vais sortir le chart add et bosse sur un graph pré-concu...
Merci pour ton aide
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Mais non, c'est facile..
1°) Mettre une variable publique, par exemple NomGraph as String.
2°) Tester :
    If NomGraph = "" then 
        Charts.Add  
        NomGraph = ActiveChart.Name 
    End If 
    With ChartObjects(NomGraph ) 
       .ChartType = xlColumnClustered 
        .SetSourceData Source:=Sheets("Calcul").Range("O" & q & ":P" & q)  
        '......... la suite 
    End With
Possible qu'il faudra activer la feuille ou le graph, j'ai pas tester.
PS: Pas oublier de vider la variable NomGraph si tu delete le Graph.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Effectivement ca marche nikel comme ca.

Le problème maintenant c'est que comme je le pensait, la boucle ne garde que la dernière valeur de q, alors que j'aimerais qu'elle garde toutes les valeur en les mettant les une après les autres.
en gros me faudrait une source du style: Range("O2:P2,O4:P4,O7:P7")
dois-je utiliser une boucle? ou y a t'il un autre moyen de faire ca.
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
1°) pourquoi mettre cette ligne 3 x ???
.SetSourceData Source:=Sheets("Calcul").Range("O" & q & ":P" & q)

2°) A chaque passage de ta boucle tu modifie le SetSourceData ??
Dis-toi bien qu'il n'y aura que la dernière valeur qui sera activée.
3°) Met ton classeur sur CiJoint.fr, (éventuellement avec des données modifiées), je verrais comment tu veux faire ça.
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Je te passe le fichier, ca se passe dans l onglet Graphiques, quand tu clique sur modifier parametres, tu peux choisir les employees que tu veux analyser...
J'ai nettoyer le code ;)
Mais tu va voir c pas encore fini...

http://www.cijoint.fr/cjlink.php?file=cj201102/cijUXDGneu.xlsm
Messages postés
54
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
9 février 2011

Mon cher lermitte,

Je part en reunion, je revient demain, merci encore pour ta patience et ton aide.