Dimensionnement de Excel à son ouverture
Bonjour,
J'ai ce problème :
Je voudrais que lorsque j'ouvre un fichier Excel il s'ouvre avec de visible uniquement la plage "A1:K20" par exemple, avec le zoom automatiquement à 100% et ce sur n'importe quel ordinateur. Si c'est possible, un code VBA est sans doute indispensable avec un module événement. Bien sûr j'ai essayé en cherchant sur internet mais je n'ai rien trouvé de probant.
Je vous remercie de vos suggestions.
Merci pour cette réponse rapide.
Malheureusement ce n'ai pas ce que je demande puisque on voit les autres colonnes et lignes alors que je voudrais qu'il n'y ai d'affiché que la plage "A1:K28".
Peut-être que chez vous c'est "OK" mais nous n'avons surement pas la même définition d'écran d'ou le un résultat différent chez moi.Je vois la plage "A1:K22" plus une portion de la colonne "L" et de la ligne "23".
Merci quand même.
Bonjour,
Ce n'est pas qu'un problème de définition d'écran : Tous les écrans n'ont pas la même proportion ; Certains ont une proportion de 2/3 d'autre 3/4 d'autres sont pleine page Tu ne peux zoomer qu'horizontalement sinon tu déformerais la hauteur de tes cellules !
A+
Bonjour à tous
Un autre essai généralisé à plusieurs feuilles si on le désire.
Tout le code est dans le module de code de ThisWorkbook.
Dans ce module trois constantes définissent les feuilles concernées, la plage concernée pour chacune des feuilles concernées et le zoom désiré pour chacune des plages (100% ou zoom adaptatif)
La procédure se trouve dans Sub Workbook_Open(). Elle ne s'exécute donc que pour la feuille active à l'ouverture du classeur (et en plus seulement si elle est concernée). Par la suite, la procédure de limitation de l'affichage n'est plus jamais exécutée. Ce choix a été fait ne pas exécuter une macro évènementielle à tout bout de champ qui annihilerai la possibilité du copier/coller.
Mais on pourrait faire en sorte de balayer toutes les feuilles concernées à l'ouverture du classeur pour leur appliquer la procédure de limitation à leur zone (il suffit de le demander gentiment
nota : dans le classeur joint, les deux feuilles concernées sont "Démo1"avec zoom à 100% et "Démo4" avec zoom adaptatif.
Le code (il est commenté) :
Const FeuillesConcernees = "Démo1/Démo2" ' les feuilles concernées séparées par un "/"
Const ZonesConcernees = "a1:k20/aa100:az125" ' les plages des feuilles concernées séparées par un "/"
Const ZoomAdaptatif = "False/True" ' le Zoom de chaque feuille concernées séparés par un "/"
' si False, zoom à 100% sinon on adapte le zoom à la plage
Private Sub Workbook_Open()
Dim NomFeuille, tabloFeuilles, tabloPlages, tabloZoom, i&
Application.ScreenUpdating = False
NomFeuille = LCase(ActiveSheet.Name) ' nom de la feuille activée
tabloFeuilles = Split(LCase(FeuillesConcernees), "/") ' tableau des feuilles concernées
tabloPlages = Split(ZonesConcernees, "/") ' tableau des plages concernées
tabloZoom = Split(ZoomAdaptatif, "/") ' tableau des zooms des feuilles concernées
For i = 0 To UBound(tabloFeuilles) ' boucle sur les feuilles concernées
If tabloFeuilles(i) = NomFeuille Then ' si la feuille est une feuille concernée
LimiterPlage ActiveSheet.Range(tabloPlages(i)), tabloZoom(i) ' on limite sa plage (avec le zoom désiré)
Exit Sub ' et on quitte la procédure SheetActivate
End If
Next i
End Sub
Sub LimiterPlage(xplage As Range, Optional ByVal AdapterZoom As Boolean = True)
Dim HautGauche As Range, BasDroite As Range
Application.ScreenUpdating = False
Application.Goto xplage, True ' on sélectionne la zone concernée (feuille et plage)
LibererPlage ' on libère une éventuelle limitation de plage
' on référence la cellule de début et de fin de la plage "xPlage" à limiter
Set HautGauche = xplage(1): Set BasDroite = xplage(xplage.CountLarge)
On Error Resume Next ' en cas d'erreur
' on masque les lignes au dessus de la plage "xPlage"
Range(Range("a1"), HautGauche.Offset(-1)).EntireRow.Hidden = True
' on masque les lignes en dessous de la plage "xPlage"
Range(BasDroite.Offset(1), Cells(Rows.Count, Columns.Count)).EntireRow.Hidden = True
' on masque les colonnes à gauche de la plage "xPlage"
Range(Range("a1"), HautGauche.Offset(, -1)).EntireColumn.Hidden = True
' on masque les colonnes à droite de la plage "xPlage"
Range(BasDroite.Offset(, 1), Cells(Rows.Count, Columns.Count)).EntireColumn.Hidden = True
xplage.Select ' sélection de la plage à zoomer
' on fixe le zoom soit à la plage soit à 100%
If AdapterZoom = True Then ActiveWindow.Zoom = True Else ActiveWindow.Zoom = 100
Application.Goto HautGauche, True ' on se place sur la 1° cellule de la plage
End Sub
Sub LibererPlage()
' procédure pour la feuille et la fenêtre active
Application.ScreenUpdating = False
ActiveWindow.Zoom = 100 ' on met le zoom à 100%
Rows.Hidden = False: Columns.Hidden = False ' on affiche toutes les lignes et colonnes
Application.Goto Range("a1"), True ' on se place en A1
End SubRe à tous
A la demande générale (
Ainsi après l'ouverture du classeur, si on sélectionne n'importe laquelle des feuilles concernées, alors cette feuille sera limitée à sa plage.
Bonjur,
Faut encore que je ramène mafraise !
Oui mais... Ce n'est pas l'appli Excel qui est dimensionné mais la visibilité des cellules !
A+
Bonjour galopin01
En Excel je connais le "Zoom" d'une fenêtre mais pas le zoom de l'application à moins que ce ne soit la propriété Application.WindowState qu'on évoque.
Et cette propriété ne peux prendre que 3 valeurs :
- xlMaximized : fenêtre Maximisée (occupe tout l'écran)
- xlMinimized : fenêtre Minimisée (n'est plus accessible que dans la barre de tâches Windows)
- xlNormal : fenêtre de taille quelconque
Pour moi, demander "avec le zoom automatiquement à 100%" exige plus d'explications...
nota : si c'est maximiser la fenêtre, une simple instruction Application.WindowState = xlMaximized ajoutée en début de code fera le travail.
Bonjour à tous.
Merci pour vos réponses en particulier à "mafraise"
Laissez moi un peu de temps pour analyser votre code (Je suis loins d'être rapide pour comprendre un code VBA, bien sympa les commentaires). De prime abort celais semble correspondre à mon problème. Je reviendrais vers vous pour vous faire part de mes résultats et/ou peut-être pour d'autres précisions
Bonjour à tous,
Malheureusement ce que vous me proposé ne correspond pas à ma demande. J'en suis désolé mais je pense que je n'ai pas été suffisamment précis lors de mon premier message. Je reformule donc ma demande en étant plus clair. Je vous prie de m'en excuser pour le travail fait, peut-être pour rien.
J'ai 2 ordis dont voici leurs caractéristiques. Tous les deux sont en 64 bits.
Bureau : 27" – LCD(FHD) – 16:9 – 1920 x 1080 – 82 ppi
Portable : 15.6" – LCD(FHD) – 16:9 – 1920 x 1080 – 142 ppi
Je voudrais que lorsque j'ouvre mon fichier Excel, sur mon ordi de "Bureau", qu'il soit cadré automatiquement que sur la plage "A1:K20". Les autres colonnes et lignes ne devront pas apparaitre. (Dans ce fichier je n'ai qu'une feuille : "Feuil1"). Bien sûr avec un seul ordi cela ne pose pas de problème : On règle les dimensions de la fenêtre avec les doubles flèche de la droite et du bas, on garde le zoom à 100% et on sauvegarde. A chaque ouverture le fichier s'ouvre comme désiré (Voir "Image CAS-1.jpg" qui illustre ma demande).
Par contre et c'est là le problème, quand j'ouvre ce même fichier Excel, sur mon "Portable", il n'est plus cadré automatiquement sur la plage "A1:K20" mais sur une plage différente (Voir "Image CAS-2.jpg").
Nota : je n'ai pas besoin de masquer les autres colonnes et lignes en dehors de la plage "A1:K10" puisqu'elles ne seront pas visibles.
J'envisage aussi sur ce même fichier Excel de masquer le ruban et d'autres choses "Par code VBA dans Private Sub Workbook_Open()". Voir "Ess.xlsm".