Redimensionnement graphiques

eside

XLDnaute Nouveau
Bonjour,

Je vous expose un peu mon problème. Je possede des graphiques sur une page que j'aimerais bien pouvoir repositionner, redimensionner pour qu'ils se trouvent par 6 sur une page A4 en format portrait. J'ai déjà créé une subroutine qui va les grouper par 6 (ou moins s'il y en a moins de 6) et les placer sur une page A4. Pour celà je récupère la taille de la page grâce aux saut de page (voir code ci-dessous).
Tout marche bien lorsque je le fait pas à pas grâce au debugger mais lorsque tout s'effectue d'une traite, les graphiques ne sont pas du tout à la bonne taille (en fait ils sont beaucoup plus grand). Tout à l'air de bien se dérouler jusqu'à la dernière boucle for.
J'ai même essayé de mettre un sleep avant le redimensionnement mais rien n'y a fait, j'en fait donc appel à vous et vos idées quelles qu'elles soient :)

Code:
Sub tri_graphe()
    Dim ch As ChartObject
    Dim Grap As String
    Dim Hauteur As Long
    Dim Largeur As Long
    Dim X As Long
    Dim Y As Long
    Dim graphe_count As Integer
    
    X = 0
    Y = 0
    graph_count = 0
    largeur_page = 0
    hauteur_page = 0
    
    'La variable count nous permet de replacer différement un graphique sur deux
    Count = 0
    
    For Each ch In ActiveSheet.ChartObjects
        Grap = ch.Name
        
        Hauteur = ActiveSheet.Shapes(Grap).Height
        Largeur = ActiveSheet.Shapes(Grap).Width
        
        'On test si on est en fin de groupe de 2
        If Count = 1 Then
            ActiveSheet.Shapes(Grap).Left = Y 'redéfinir position dans feuille
            ActiveSheet.Shapes(Grap).Top = X 'redéfinir position dans feuille

            X = X + Hauteur + 0
            Y = 0
        Else
            ActiveSheet.Shapes(Grap).Left = Y 'redéfinir position dans feuille
            ActiveSheet.Shapes(Grap).Top = X 'redéfinir position dans feuille
            
            Y = Y + Largeur
        End If
        
        'On incrémente le compteur
        If Count = 1 Then
            Count = 0
        Else
            Count = Count + 1
        End If
        graph_count = graph_count + 1
         
    Next ch
    
    Sheets(2).Select
    arrondi_nbre_graphique = Application.WorksheetFunction.RoundDown(graph_count / 6, 0)
    j = 0
    Do While j < arrondi_nbre_graphique
        ActiveSheet.Shapes.Range(Evaluate("transpose(ROW(" & (j * 6) + 1 & ":" & (j * 6) + 6 & "))")).Select
        Selection.ShapeRange.Group.Select
        graph_count = graph_count - 6
        j = j + 1
    Loop
    If graph_count <> 0 Then
        ActiveSheet.Shapes.Range(Evaluate("transpose(ROW(" & j + 1 & ":" & j + graph_count & "))")).Select
        Selection.ShapeRange.Group.Select
        j = j + 1
    End If
    
    Dim nbre_groupe As Integer
    nbre_groupe = j
    
    ActiveSheet.PageSetup.Orientation = xlPortrait
    ActiveSheet.PageSetup.PaperSize = xlPaperA4
    ActiveSheet.PageSetup.CenterHorizontally = True
    
    CibleV = ActiveSheet.VPageBreaks(1).Location.Column - 1 ' nombre de colonnes dans la 1ere page
    CibleH = ActiveSheet.HPageBreaks(1).Location.Row - 1 ' nombre de ligne dans la 1ere page
    
    For i = 1 To CibleV
        largeur_page = largeur_page + Cells(1, i).Width ' calcul largeur premiere page imprimable
    Next i
    For i = 1 To CibleH
        hauteur_page = hauteur_page + Cells(i, 1).Height ' calcul largeur premiere page imprimable
    Next i
    
    Do While hauteur_page = 0
    Loop
    
    Do While largeur_page = 0
    Loop
    
    For i = 1 To (nbre_groupe)
        With ActiveSheet.Shapes(i)
            .Width = largeur_page
            .Height = hauteur_page
            .Top = 0
        End With
    Next i
    
End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87