Ajuster une feuille Excel automatiquement en fonction de la largeur des colonnes

SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 12 juin 2012 à 12:40
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 12 juin 2012 à 19:32
Bonjour le Forum,

Je rencontre de nouveau un problème "bizarre". J'ai une feuille Excel (2007) qui contient des données. Sur cette feuille je place un graphique également. Ce graphique est positionné sur une plage de cellules bien définit via VBA (cf code plus bas)

Jusque la tout va bien.

Le problème survient lorsque j'essaie de faire en sorte que la largeur de la feuille Excel remplisse le plus possible l'écran du PC. Cela m'évite ainsi de devoir ajuster manuellement le zoom pour que sa soit optimisé. Ou alors quand on change de PC que la feuille reste optimisée même si l'écran a changé.

En cherchant sur le net je suis tombé sur le code suivant :

    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = True


Et en effet ça fonctionne bien. Car la plage est zoomée au maximum de manière à ce que sa rentre dans mon écran.

Cependant...Mon graphique n'est plus centré sur les plage de cellules comme initialement demandé !!!

C'est trop moche, et je me demande quelle solution il me reste ? Le but étant donc de faire la même chose que "ActiveWindow.Zoom" mais en faisant en sorte que mon graphique reste toujours centré sur la plage de cellules.


Pour mieux illustrer mon problème, voici le code qui met en évidence ce "défaut" :

Public Sub aaaaa()
   
    Sheets.Add 'Créé toujours un onglet de départ
   
    Dim i As Long
    For i = Sheets.Count To 1 Step -1 'On supprime tous les onglets sauf un
        If Sheets(i).Name <> ActiveSheet.Name And Sheets(i).Visible = True Then
            Sheets(i).Delete
        End If
    Next
   
    Range("M5") = "MAISON"
   
    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = True '=================> CETTE LIGNE QUI POSE PROBLÈME !!!

'------------------------------------------------------------------------------------------------------------------------
                                        'Création des graphiques
'------------------------------------------------------------------------------------------------------------------------

    Range("A1:A1").Select 'GRAPHIQUE NUMERO 1
    ActiveSheet.Shapes.AddChart.Select 'Créer un graph
    ActiveChart.SetSourceData Source:=Range("A1:B1") 'Ne rien changer
    ActiveSheet.ChartObjects(1).Left = Range("F6").Left 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Top = Range("F6").Top 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Width = Range("F6:I15").Width 'Dimensionnement de la largeur
    ActiveSheet.ChartObjects(1).Height = Range("F6:I15").Height 'Dimensionnement de la hauteur

End Sub



Je reste dans les parages pour plus d'infos si besoin est.
Merci à ceux qui me proposeront leurs idées et/ou leurs conseils.

Bien cordialement,

André

14 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
12 juin 2012 à 13:45
Salut,

je ne vois pas le probleme

avec les 2 lignes suivantes tu fais un zoom qui vas bien !


    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = True '=================> CETTE LIGNE QUI POSE PROBLÈME !!!


et pourquoi ne pas le refaire en tenant compte de la plage F6:I15 qu'occupe ton graphe ?

ou alors j'ai rien compris

A+
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 14:42
Salut Bigfish_le vrai,

Les 2 lignes suivantes font bien leur travail en effet :

    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = True '=================> CETTE LIGNE QUI POSE PROBLÈME !!!


Sauf que si tu regarde plus attentivement la position qu'occupe le graphique, tu verras qu'il n'est pas superposé à la plage "F6:I15". Il est légèrement décalé à cause du fait que l'on zoom.

D'autre part, le code que je propose n'est qu'une illustration. Il faut imaginer une feuille avec des données, et plusieurs graphiques.

La cellule qui contient le mot "maison" n'est la que pour délimiter la largeur utile de ma feuille pour le zoom. Rien de plus. Je cherche donc à faire un zoom de la feuille avec le mot "maison". Sauf que je voudrais que le graphique reste centré sur sa plage d’origine. Et la il se décale à cause du "ActiveWindow.Zoom".


Je ne sais pas si je suis clair ?

Je cherche à réaliser 2 choses en même temps.

-Un zoom de la feuille (ça fonctionne bien avec "ActiveWindow.Zoom")
-Faire en sorte que le graphique ne bouge pas une fois qu'on applique le zoom. (et la ça ne fonctionne pas)


Il y a t'il une autre solution similaire à "ActiveWindow.Zoom" mais qui ne décalerais pas mon graphique ?


André
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 14:54
Je viens de faire varier manuellement le niveau de zoom avec le code suivant :

Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = 150 '=================> CETTE LIGNE QUI POSE PROBLÈME !!!




En faisant varier la valeur de zoom, je viens de me rendre compte que pour certaines valeurs, mon graphique n'est plus centré sur sa plage "F6:I15" et que pour d'autre il l'est parfaitement.

Par exemple les valeurs "130,135,140" fonctionnent tandis que la valeur 133% me fait décaler mon graphique.

????
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 14:56
Ce que je ne comprends pas, c'est que si j'impose par vba un facteur de zoom de 140% alors j'ai ma feuille qui est bien ajustée au niveau du zoom, et le graphique parfaitement centré.

Si manuellement je vais mettre la valeur du zoom de la feuille à 133%; alors le graphique reste attaché au cellules. Alors que la valeur 133% par vba décale le graphique.

C'est à ni rien comprendre. Qu'est ce qui provoque tout ça ?

André
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
12 juin 2012 à 14:58
desole mais je ne comprend toujours pas car comment veux-tu êtres centré sur le graph si celui-ci n'est pas au centre de la plage utiliser pour le zoom ?

pour cela il faudrait que "maison" soit au minimum plus loin que le coin en bas à droite du graph... non ?

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
12 juin 2012 à 15:18
je n'arrive pas à reproduire le phénomène ! Ce n'est peut être qu'un bug d'affichage d'excel !

tu peux vérifier si le graph à réellement bougé en comparant les positions du graph à l'aide de la propriété "TopLeftCell"

Msgbox ActiveSheet.ChartObjects(1).TopLeftCell.Address ' le 1 represente le premier graph de la feuille active !


A+
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 15:31
Bien je vais donc reformuler autrement mon problème.

Voici 2 procédures. Je décide d'appliquer la procédure "Numéro1", puis ensuite la procédure "Numéro2".

Public Sub Numéro1()
   
    Sheets.Add 'Créé toujours un onglet de départ
    
    Dim i As Long
    For i = Sheets.Count To 1 Step -1 'On supprime tous les onglets sauf un
        If Sheets(i).Name <> ActiveSheet.Name And Sheets(i).Visible = True Then
            Sheets(i).Delete
        End If
    Next
    
    Range("M5") = "MAISON"

    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = True

End Sub

Public Sub Numéro2()

'------------------------------------------------------------------------------------------------------------------------
                                        'Création des graphiques
'------------------------------------------------------------------------------------------------------------------------


    Range("A1:A1").Select 'GRAPHIQUE NUMERO 1
    ActiveSheet.Shapes.AddChart.Select 'Créer un graph
    ActiveChart.SetSourceData Source:=Range("A1:B1") 'Ne rien changer
    ActiveSheet.ChartObjects(1).Left = Range("F6").Left 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Top = Range("F6").Top 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Width = Range("F6:I15").Width 'Dimensionnement de la largeur
    ActiveSheet.ChartObjects(1).Height = Range("F6:I15").Height 'Dimensionnement de la hauteur
End Sub


Ma première procédure me place le mot "maison" dans une cellule, puis j'ajuste le zoom automatiquement en fonction du contenue de la feuille. Bien jusque la tout vas bien. Le zoom est automatique, tout marche bien. Nickel.


Je décide donc d'appliquer la procédure "Numéro2" qui me place un graphique dans une plage bien définie. Et ben ça ne fonctionne pas !!!
Mon graphique n'est pas superposé aux cellules alors que je lui demande de l'être justement. Et si mon graphique n'est pas superposé aux cellules c'est à cause du zoom automatique de la première procédure. Car si on ne fait pas de zoom automatique, oh miracle mon graphique est parfaitement superposé aux cellules.

Je ne sais pas si c'est plus clair cette fois ci ? N'hésite pas à me dire si ce n'est pas le cas. Je ne sais pas trop comment dire différemment la...


En tout cas, d'avance merci de bien vouloir essayer de résoudre l'affaire

André
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 15:40
Je viens d'effectuer le test que tu demandais...

Alors dans le cas ou :

    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = True


Le zoom se met automatiquement sur la valeur 133%, ce qui correspond au meilleur zoom. Mais du coup mon graphique n'est pas superposé aux cellules.

Ton test Indique la cellule "F5" !!!!


Par contre, dans le cas ou :

    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = 140


Le zoom se met automatiquement sur la valeur 140%, ce qui correspond au zoom que je demande par vba. Mais du coup mon graphique est parfaitement superposé aux cellules.

Ton test Indique la cellule "F6" !!!!


Ce n'est donc pas un simple problème d'affichage. C'est comme si le zoom automatique ne déplaçait pas mon graphique en fonction des cellules pour certaines valeurs de zoom.

Je comprends pas
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
12 juin 2012 à 15:55
essai de jouer avec la popriété "placement", propriété qui definit la liaison ou non avec les cellules :

ActiveSheet.Shapes(1).Placement = xlMoveAndSize 'autres valeurs possibles : xlMove, xlFreeFloating


A+
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 16:03
Non rien n'y fait dsl.

Encore un bug de plus je pense ;)

Bon ce n'est pas grave je vais essayer de placer mes graphiques vides sur la feuille et une fois les graphiques placés, alors je ferais le zoom automatique.

ca ne m'arrange pas du tout car je dois au préalable faire un zoom automatique, et ensuite créer mes graphiques seulement.

C'est balot^^


Merci à toi Bigfish en tout cas. Je ne vois pas trop de solutions la. Au pire je laisse ainsi et mes graphs seront un peu décalés quoi. sniff


André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 juin 2012 à 16:28
Bonjour,

Je n'ai rien testé.
Mais pourquoi ne pas "forcer la main", genre :
Public Sub Numéro1()
    Sheets.Add 'Créé toujours un onglet de départ
    Dim i As Long
    For i = Sheets.Count To 1 Step -1 'On supprime tous les onglets sauf un
        If Sheets(i).Name <> ActiveSheet.Name And Sheets(i).Visible = True Then
            Sheets(i).Delete
        End If
    Next
    Range("M5") = "MAISON"
    Range("A1:M5").Select 'Pour régler le zoom de la page pour que sa rentre complètement
    ActiveWindow.Zoom = True
    Numéro3 ' ====================  on force
End Sub

Public Sub Numéro2()
    Range("A1:A1").Select 'GRAPHIQUE NUMERO 1
    ActiveSheet.Shapes.AddChart.Select 'Créer un graph
    ActiveChart.SetSourceData Source:=Range("A1:B1") 'Ne rien changer
    Numéro3 ' ================== on force
End Sub


Public Sub Numéro3()
    ActiveSheet.ChartObjects(1).Left = Range("F6").Left 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Top = Range("F6").Top 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Width = Range("F6:I15").Width 'Dimensionnement de la largeur
    ActiveSheet.ChartObjects(1).Height = Range("F6:I15").Height 'Dimensionnement de la hauteur
End Sub




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 18:08
Bonjour Ucfoutu,


Je viens de tester ton idée (je l'avais déjà testé également). Ça ne fonctionne toujours pas.

Une fois que "ActiveWindow.Zoom = True" est exécuté, c'est trop tard on est plus sur de pouvoir insérer un graphique à un emplacement spécifique

C'est vraiment nul des fois ces petits détails^^

C'est pourquoi je demandais en début de post s'il existait une autre solution pour faire l'équivalent de "ActiveWindow.Zoom = True". Peut être le problème ne se poserait il plus.

il est d'ailleurs surprenant de noter que "ActiveWindow.Zoom = True" donne un zoom de 133% sur mon pc avec les graphiques décalés et que si je fixe le zoom avec vba pour 140% alors le graphique est bien placé ET si je met manuellement le zoom à 133% le graphique reste bien toujours bien placé. C'est avec vba que sa se décale.

Bizarre bizarre...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 juin 2012 à 18:38
Une fois que "ActiveWindow.Zoom = True" est exécuté, c'est trop tard on est plus sur de pouvoir insérer un graphique à un emplacement spécifique

C'est alors moi qui ne comprends plus !
Les 3 macros sont à exécuter dans l'ordre numero2 puis numero1, dans mon esprit
(et tant l'une que l'autre appellent la numero3)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 juin 2012 à 19:32
Et bien je viens de tester sur mon pc perso à la maison et je ne rencontre plus ce problème sur ma machine.

J'ai repris le code que j'ai posté en début d'aprèm et qui montrait le problème. Impossible de reproduire le défaut sur cette machine.

Tous mes graphs sont à leurs exactes places. Pas facile de tester dans ces conditions car tout fonctionnera forcément^^

Je ne comprends donc pas pourquoi sur certaines machines sa pose problème. Sur cette machine actuelle j'ai un écran 15.4 pouces normalement. Au boulot l'écran est beaucoup plus "rectangle".

Serait ce lié à la résolution de l'écran peut être ?

Aucune idée.

En tout cas c'est sur, au boulot, après avoir fait "ActiveWindow.Zoom = True" plus possible de placer un graphique à sa place.

André
0
Rejoignez-nous