Problème de positionnement de graphique sous excel en vba(URGENT) - VB/VBA/VBS - Programmation
Marsh Posté le 20-04-2004 à 12:30:19
Bonjour,
En jouant avec les parametres Top left, width et height des graphiques:
With Sheets(1)
.Shapes("Chart 1" ).Left = 0
.Shapes("Chart 1" ).Top = 0
.Shapes("Chart 2" ).Top = 0
.Shapes("Chart 2" ).Left = .Shapes("Chart 1" ).Width + 5
.Shapes("Chart 3" ).Top = .Shapes("Chart 1" ).height+ 5
.Shapes("Chart 3" ).Left = 0
.Shapes("Chart 4" ).Top = .Shapes("Chart 2" ).height+ 5
.Shapes("Chart 4" ).Left = .Shapes("Chart 3" ).Width + 5
End With
I.
Marsh Posté le 20-04-2004 à 13:44:16
Ok merci je ne savais pas que c'était shapes("nom du graphe" ), je pensais que cétait charts.
Mais le problème c'est que pour le graph 3 et le graphe 4 c'est que ils seront mis par exemple dans un mois (et ça peut-être tous les mois) par ma procédure alors comment je peux savoir le nom de mon dernier graphe et ainsi faire le Width+5
Marsh Posté le 20-04-2004 à 14:03:30
Bonjour,
Quand tu ajoutes un graphique, si c'est par VBA, nomme le immediatement:
Chart.Add
ActiveChart.name = "graph1"
Ainsi si tout les mois tu ajoute deux graphs, il te suffit d'incrementer un numeros, ou de donner comme nom la date, ou je ne sais trop quel systeme, et ca te permet ainsi de ne deplacer que les graphiques correspondant en fonction des precedents.
I.
I.
Marsh Posté le 20-04-2004 à 14:18:29
Merci Itawa j'avais mis ma ligne "ActiveChart.name=""" tout à la fin de mon truc c'est pour ça qu'il me mettait une erreur mais maintenant ça a l'air d'être bon.
Justement je ne voyais pas de systeme pour me repérer avec les graphes déjà créer. A moins qu'il soit possible de créer des variables qui ne se réinitialise pas à chaque appelle de procédure???
ET je ne peux pas mettre la date parce que l'utiliateur a aussi la possibilité de faire un graphe d'un mois de n'importe quelle année donc elle ne serait pas très indicative. Et si je mets un numéro comment savoir quel numéro j'ai mis en dernier, il faudrait que je "parcours" mes graphes jusqu'au dernier.
Donc je suis un peu bloqué sur ce problème aussi.
Marsh Posté le 20-04-2004 à 15:33:19
Petite procédure qui parcourt toutes les feuilles du classeur et tous les graphes de chaque feuille et qui renvoie le nombre de graphes du classeur. Peut-être utile...
Public Sub ScanGraph(lNbChart As Long)
Dim shTemp As Worksheet
Dim graphTemp As ChartObject
For Each shTemp In ThisWorkbook.Sheets
For Each graphTemp In shTemp.ChartObjects
lNbChart = lNbChart + 1
Next graphTemp
Next shTemp
Set shTemp = Nothing
Set graphTemp = Nothing
End Sub
Marsh Posté le 20-04-2004 à 15:49:05
en fait ITAWA : Chart.Add
ActiveChart.name = "nomgraf"
ça ne marche pas en tout cas chez moi.
Quelqu'un peut me dire comment nommer un graphique???
je cherche depuis longtemps et tout ce que j'ai trouvé ne marche pas (J'EN AI MAAAARRRRREEEE....)
Marsh Posté le 21-04-2004 à 06:53:09
Bonjour,
Excuse moi, c'est moi qui ai fait une petite faute de frappe:
Charts.Add '<<<Avec un "s">>>
ActiveChart.name = "nomgraf"
I.
Marsh Posté le 21-04-2004 à 08:06:22
En fait Itawa quand je l'avais essayé j'avais mis le 'S'. Là je viens de réessayer mais ça ne marche pas, le nom reste graphiqueXX.
Je commence à en avoir marre j'ai essayé des tas de trucs et ça ne marche pas.
Marsh Posté le 21-04-2004 à 11:45:17
JihEmAir t'as fonction est vraiment bien et j'ai voulue la changer un petit peu pour qu'elle puise traiter aussi qu'une seule feuille dont le nom est le paramètre et j'ai donc écrit:
Public Function ScanGraph(lNbChart As Integer, Optional feuille)
Dim shTemp As Worksheet
Dim graphTemp As ChartObject
If IsMissing(feuille) Then
For Each shTemp In ThisWorkbook.Sheets
For Each graphTemp In shTemp.ChartObjects
lNbChart = lNbChart + 1
Next graphTemp
Next shTemp
Set shTemp = Nothing
Set graphTemp = Nothing
ScanGraph = lNbChart
Else
With Worksheets(feuille)
For Each graphTemp In .ChartObjects
lNbChart = lNbChart + 1
Next graphTemp
End With
Set shTemp = Nothing
Set graphTemp = Nothing
ScanGraph = lNbChart
End If
End Function
et comme ça n'a pas l'air de marcher j'ai besoin d'aide. J'ai un with dans le else parce que le deboggeur m'a dit qu'il manquait un with mais sinon je ne sais pas quoi mettre pour traiter juste une seule feuille.
MERCI.
Marsh Posté le 21-04-2004 à 12:08:19
Il faut passer le nom de la feuille à traiter en paramètre à la procédure. Il n'y a pas besoin de With. Il suffit de tester si le paramètre nom_de_la_feuille (strSheetName) est vide.
Public Sub ScanGraph(lNbChart As Long, Optional strSheetName As String)
Dim shTemp As Worksheet
Dim graphTemp As ChartObject
' Teste si un nom est passé à la procédure.
' si pas de nom, on traite toutes les feuilles
If strSheetName = "" Then
For Each shTemp In ThisWorkbook.Sheets
For Each graphTemp In shTemp.ChartObjects
lNbChart = lNbChart + 1
' Ici, on remomme le graphique
graphTemp.Name = "Chart" & lNbChart
Next graphTemp
Next shTemp
Else
' Une seule feuille qu'on récupère dans shTemp
Set shTemp = ThisWorkbook.Sheets(strSheetName)
For Each graphTemp In shTemp.ChartObjects
lNbChart = lNbChart + 1
' Ici, on renomme le graphique
graphTemp.Name = "Chart" & lNbChart
Next graphTemp
End If
Set shTemp = Nothing
Set graphTemp = Nothing
End Sub
J'espère avoir aidé......
Marsh Posté le 21-04-2004 à 15:25:06
Merci JihEmAir, ça marche en fait je crois que mon ancienne version marchait quand même mais que je l'utilisait mal mais maintenant j'utilise quand même la tienne.
En plus grâce à ta fonction j'ai résolu tous mes problèmes vu que j'ai changé mon algo et donc maintenant mon problème de renommer un graphique ne me sert plus à rien.
Encore merci.
Marsh Posté le 22-04-2004 à 16:39:05
J'ai une autre question maintenant pas très en rapport avec le reste.
Alors je voudrais créer des graphiques et les mettre directement dans un autre classeur, dans une feuille donnée. Mais je ne sais pas si c'est possible dasn les options de créations du graphiques (le tout en vba évidemment).
Si c'est pas possible, j'ai essayé de couper ces graphiques et de les mettres où je voulais, mais le problème c'est qu'apparemment soit il ne sont pas collé en tant que graphique (mais en tant qu'image) soit leur nom change et donc je n'arrive pas à en faire ce que je veux après.
Quelqu'un pour m'aider????
Merci.
Marsh Posté le 20-04-2004 à 10:48:02
Bonjour,
.
Mon problème est que dans une procédure je crée deux graphiques et bien sûr ils se mettent l'un au dessus de l'autre.
Donc j'aimerais savoir comment les mettre l'un à côté de l'autres (en les mettant tous les deux à la même taille) et avec le premier tout à droite.
Comme cette procédure je la rappelle ensuite je voulais savoir comment placer les deux prochains graphiques (en les mettant l'un à côté de l'autre) juste en dessous des grafs existant ????
le tout en vba évidemment
Merci d'avance.
Message édité par Nkubi le 20-04-2004 à 13:51:48