Placer des graphiques vba (urgent)

charly -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

je souhaiterai positionné mais graphique sur un feuil sachant que le nombre de graphique dépend du choix de l'utilisateur, j'ai donc fais ce code :

Sub Dimensions_Graphiques()
Dim Nbre_Graphe As Byte
Dim x As Integer
Dim y As Integer
    x = 1
    y = 1
    For Nbre_Graphe = 1 To ActiveSheet.ChartObjects.Count
        With ActiveSheet.Shapes(Nbre_Graphe)
            .Left = Cells(y, x).Left
            .Top = Cells(y, x).Top
            .Width = 450 'la largeur voulue
            .Height = 300 'la hauteur voulue
            x = x + 8
            y = y + 25
        End With
    Next Nbre_Graphe
End Sub


Mais j'ai un message d'erreur comme quoi la méthode cells ne fonctionne pas, quelqu'un aurait une idée?

10 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Plante directement ou après en avoir positionner quelque un. ?
    Ta macro n'a pas d'erreur. Sauf que tu met tes graph en diagonale ? c'est voulu?
    Après 10 graph, si tu est en Excel 97-2003 ça plante pour dépassement capacité.

    A+
    Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
    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.
    0
  2. charly
     
    non ce n'est pas l'effet voulu ^^ je me suis rendu compte de mon erreur quand je l'ai fais foctionner. sauriez-vous coment faire pour que les graph s'affiche dans un cette ordre : le graph qui arrive en premier se positionne en haut a gauche, le 2e en haut à droite le 3e en dessou a gauche le 4e sous le 2e etc...?

    J'ai résolu l'autre problème sinon, j'ai déclarer un variable as range et je mis sheets(feuil3).cells(x,y) dans cette variable
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
        y = y + 25 : If Y > 50 then Y = 25 : x = x + 8

    Pour 2 graph par ligne
    et supprimer x=x+8
    A+

    Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
    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.
    0
  4. charly
     
    celà ne fonctionne passa place correctement le deuxieme, puis ensuite sa saute pas mal de lignes puis sa fais un ligne de 3 graphiques et sa en met ensuite un juste en dessou du graphique du milieu dans la ligne de 3
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Un peu de réflexion Stp
      Y a une erreur..
       y = y + 25 : If Y > 50 then Y = 1 : x = x + 8

      Et si ça va pas remet le code tel qu'il est maintenant.
      0
    2. charly
       
      on s'est répondu en même temps. Voir message ci-dessous
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. charly
     
    c'est bon c'est réglé vous aviez juste inversé les lignes et les colonnes, voici le code

    Dim Nbre_Graphe As Byte
    Dim x As Integer
    Dim y As Integer
    Dim caspos As Range
    
    x = 1
    y = 1
        For Nbre_Graphe = 1 To ActiveSheet.ChartObjects.Count
            With ActiveSheet.Shapes(Nbre_Graphe)
                Set caspos = Feuil3.Cells(y, x)
                .Left = caspos.Left 'position des graphiques
                .Top = caspos.Top 'position des graphiques
                .Width = 450 'la largeur voulue
                .Height = 300 'la hauteur voulue
            End With
            x = x + 8: If x > 16 Then x = 1: y = y + 25
        Next Nbre_Graphe


    mais j'ai une réaction bisarre. les deux premiers graph se placent correctement, mais je reste et décalé de 25 suivant y comme si on faisait y=y+50 au lieu de y=y+25

    en tous cas merci beaucoup!
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Comprend pas, décalage de quoi ?
    Avec le code que tu met, x = les colonnes et y = les lignes...
    les 2 premiers sur A1 et et H1
    suivant sur A25 et H25, etc..
    Edit : Et je viens de tester, ça fonctionne impec.
    Edit 2 :
    Je crois que j'ai compris.
    x = 1 
    y = 1 
        For Nbre_Graphe = 1 To ActiveSheet.ChartObjects.Count 
            With ActiveSheet.Shapes(Nbre_Graphe) 
                 
                .Left = ActiveSheet.Cells(y, x).Left 'position des graphiques 
                .Top = ActiveSheet.Cells(y, x).Top 'position des graphiques 
                .Width = 450 'la largeur voulue 
                .Height = 300 'la hauteur voulue 
            End With 
            x = x + 8: If x > 16 Then x = 1: y = y + 25 
        Next Nbre_Graphe


    quand tu met Feuil3 ?? tu travail sur quel feuille ?
    Feuil3 c'est le N° d'ordre de la feuille et Sheets("Feuil3") c'est le nom de la feuille.

    Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
    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.
    0
  8. charly
     
    Non çà devrai être A26 et H26 (car y=1 au début) sauf que mon graphique se place en A52. J'ai fais un test "step by step" et y est bien égale à 26 et pourtant le graphique se le place en A52. par contre la ligne du dessou se place bien juste après. c'est très bisarre et je ne comprends pas. je suis novice j'ai comencé VBA il y a 3 semaines au début de mon stage en entreprise.
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    C'est toi qui inverse les lignes et les colonnes..
    Prend l'exemple de mon code, il fonctionne.
    PS : Avec les dimensions que tu donne au graph le positionnement sur les lignes step by step est bon avec 25 et x avec 8
    donc, comme dis plus haut...
    les 2 premiers sur A1 et et i1
    suivant sur A25 et i25, etc..
    0
  10. charly
     
    je viends de re essayer avec votre code et je comfirme que vous inversez les ligne et les colonnes, avec votre code 2 lignes par colone or je veux 2 colonne par ligne.

    et que ce soit avec votre code ou le mien j'ai toujours ce décalage entre la 1er ligne de graphiques et la 2e
    0
  11. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Un exemple ??
    J'ai mis le raccourci Ctrl+P pour les placer.
    Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
    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.
    0