Utilisateur anonyme
-
7 mars 2009 à 13:55
Utilisateur anonyme -
9 mars 2009 à 09:36
Bonjour à tous !
Mon problème ne me semble pas compliqué mais je suis novice en VB
et je n'arrive pas à m'en sortir, même après moulte recherche...
Je désire créer un graphique (type nuage de points) à partir d'une série de données contenu dans un tableau de taille variable
je voudrais que le graphique soit contenu dans la feuille active et
placé à une position donné , qu'il porte un nom (pour pouvoir l'effacer
à l'aide d'une autre fonction)ainsi qu'un titre en X et en Y .
J'ai enregistré une macro, mais elle nomme automatiquement le
tableau à chaque fois que je l'appel. Mon tableau n'a donc pas de nom
précis graph1, puis 2.... il n'a donc pas d'attribut spécifique pour le
supprimer.
De plus lorsque j'exécute cette macro je sélectionne la totalité de
la colonne où sont contenu mes valeurs... ce n'est pas vraiment
variable
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 9 mars 2009 à 08:58
Cette erreur est normale, zuba.
Ta macro crée un Shape et lui donne un nom ; tu ne peux pas relancer une deuxième fois la macro car elle va essayer de créer un deuxième Shape sous le même nom, et cela génère une erreur au moment de renommer le nouveau contrôle.
C'est la raison pour laquelle, lorsque tu crées un Shape auquel tu donnes un nom précis, tu dois d'abord voir si un Shape existe déjà sous ce nom. Voici une fonction qui retourne True si le Shape (dont le nom est passé en argument) existe.
Private Function ShapeExiste(nomShape As String) As Boolean
Dim s as Shape
ShapeExiste = False
For Each s In ActiveSheet.Shapes
If s.Name = nomShape Then
ShapeExiste = True
Exit For
End If
Next
End Function
Pour appeler cette fonction depuis la macro test(), tu peux placer l'une ou l'autre des deux instructions suivantes au début de la macro test() ; si monGraphique existe déjà, il sera supprimé ou bien la macro test() ne sera pas exécutée, selon l'instruction que tu choisis :
1) If ShapeExiste("monGraphique") Then ActiveSheet.Shapes("monGraphique").Delete' monGraphique est supprimé
2) If ShapeExiste("monGraphique") Then Exit Sub' la macro test() n'est pas exécutée
J'espère avoir été assez clair dans mes explications. Bon courage.
voila j'ai cherché sur le web anglais et j'ai reussi a trouver qq fonction qui m'aide
mon code ressemble donc à ça maintenant
:
With ActiveSheet.ChartObjects.Add _
(Left:=450, Width:=375, Top:=200, Height:=225)
.Chart.Parent.Name = "Histogramme de répartition fréquentielle"
.Chart.SetSourceData Source:=Sheets("Feuil1").Range("Feuil1!$T:$T")
.Chart.ChartType = xlXYScatter
.Chart.Legend.Delete
End With
Call graph
Call Macro1
End Sub
Sub graph()
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.ChartTitle.Text = "Histogramme de répartition fréquentielle"
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.PlotArea.Select
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleRotated)
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Nombre de particules"
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.PlotArea.Select
Range("A1").Select
End Sub
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Distance(m)"
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.ChartArea.Select
Range("A1").Select
End Sub
j'ai donc un affichage où je veux tout est bien
j'ai une chose qui marche mal c'est l'affichage des noms X et Y j'ai fais un enregistrement de macro pour ça, mais ça marche tres mal, surtout le X qui ne veux pas se renomer
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 7 mars 2009 à 22:34
Salut
Je voulais répondre à ton premier message, mais j'ai eu une interruption d'internet. Je donne quand même ma solution, si ça peut servir.
Bonjour
Tu t'es trompée de thème ; pour Excel et les autres applications VBA, le bon thème est Visual Basic/Langages dérivés/VBA.
Le plus simple est de créer ton graphique dans une fenêtre graphique, puis de l'incorporer par la méthode Location : ton graphique devient une forme de ta feuille de calcul, comme dans l'exemple suivant :
Sub test()
Application.Charts.Add
With ActiveChart
.SetSourceData Source:=Range("Feuil1!$T:$T")
.ChartType = xlXYScatter
.Location Where:=xlLocationAsObject, Name:="Feuil1" ' incorpore le graphique
End With
ActiveWindow.Visible = False ' masque la fenêtre graphique
Selection.Name = "monGraphique" ' renomme la forme
With ActiveSheet.Shapes("monGraphique") ' positionne la forme puis la supprime
.Left = 10
.Top = 40
.Delete
End With
End Sub
"Que veux tu dire par noms X et Y ? le titre des axes ?" :
le code que j'ai mis arrive a mettre le titre du graphique et le titre de l'axe Y, cependant la modification du titre de l'axe X me renvoi systématiquement une erreur
je pense que ça viens du fait que je ne défini pas de colonne pour X. Je fais un graphique type nuage de point et j'affecte la colonne T, cependant pour les valeur de X c'est des valeur par default et je pense que ça pose problème.
J'ai essayé ton code il fonctionne bien mais il me renvoi une erreur '450' "nombre d'arguments incorrect ou affection de propriétés incorrect" :(
et le debugger se place au niveau de Selection.Name = "monGraphique"
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 8 mars 2009 à 12:16
- Hum, je ne sais pas trop pourquoi mon code plante, car je n'ai pas ce problème chez moi. Peux-tu insérer les deux lignes ci-dessous juste avant Selection.Name = "monGraphique" ?
j'ai essayer tout le nouveau code que vous m'avez copier, l'axe des x fonctionne sans pb, et le graphique se creer sans pb quand j'éxecute la macro une fois
quand je la relance j'ai une nouvelle fois la même erreur...
de plus j'ai remarqué que le nom du graphique n'est pas "mon graphique" mais le nom par default excel "graph 1" puis 2 etc...