Problème de positionnement de graphique sous excel en vba(URGENT)

Problème de positionnement de graphique sous excel en vba(URGENT) - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 20-04-2004 à 10:48:02   

Reply

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.

Reply

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

Reply

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.

Reply

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.

Reply

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


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

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....)

Reply

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.

Reply

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.

Reply

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.

Reply

Marsh Posté le 21-04-2004 à 11:45:17   

Reply

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é......


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

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.

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed