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