Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb dimensionnement de ligne

5 réponses
Avatar
elect31
Bonjour à tous
Ayant récupéré sur un forum, du code pour détecter la résolution de mon
écran, je voudrais écrire une macro "hauteur_lignes()" qui adapterait la
hauteur des lignes comprises entre > 4 et < 35 à ce qui reste de la
résolution quand on y déduit les 4 premières lignes.
N'arrivant pas à faire cela d'une manière excellente, j'ai
arbitrairement déterminé la hauteur de ces 4 lignes (à préserver) à 256
points ( variable zoneHaut)
Quand je divise le reste de ma résolution (variable zone_modifiee) par
le nombre d'élèves pour trouver la hauteur des lignes que je veux
modifier, j'obtiens une hauteur de ligne qui sort de l'écran, quand
j'exécute la macro.
Bref! je patauge.
Si vous aviez une réponse... ou une astuce...
Merci d'avance
elect

PS: Je cherche à faire ça pour utiliser le fichier sur d'autres ordi qui
n'ont pas forcément la même résolution.


Option Explicit 'JCGL : Merci à la communauté XL pour ce code : je ne
sais plus où je l'ai trouvé...
Option Private Module
Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type

Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long,
rectangle As RECT) As Long
'Calcul de la resolution
Function GetScreenResolution() As String
Dim R As RECT
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
End Function


'Agrandi les lignes comprises entre 5 et 34 pour les ajuster à la résolution
Sub hauteur_lignes()
Dim Hauteur As Variant, Resolution As String, zoneHaut As Variant
Dim zone_modifiee As Variant, Nb_Eleves As Byte, Haut_Row As Double
Dim rw As Variant
Resolution = GetScreenResolution ' Récupère par API la résolution ecran
Hauteur = Mid(Resolution, 1, InStrRev(Resolution, "x") - 1) ' Prend la
hauteur
zoneHaut = 256 'zone à ne pas toucher
zone_modifiee = Hauteur - zoneHaut
Nb_Eleves = 30
Haut_Row = zone_modifiee / Nb_Eleves
For Each rw In ActiveSheet.Rows
If rw.Row > 4 And rw.Row < 35 Then
rw.RowHeight = Haut_Row
End If
Next rw
End Sub

5 réponses

Avatar
Mishell
Bonjour.
Tu peux peut-être jouer avec le Zoom offert dans le menu Affichage.

Rows("1:17").Select
ActiveWindow.Zoom = True

Mishell


"elect31" wrote in message
news:
Bonjour à tous
Ayant récupéré sur un forum, du code pour détecter la résolution de mon
écran, je voudrais écrire une macro "hauteur_lignes()" qui adapterait la
hauteur des lignes comprises entre > 4 et < 35 à ce qui reste de la
résolution quand on y déduit les 4 premières lignes.
N'arrivant pas à faire cela d'une manière excellente, j'ai arbitrairement
déterminé la hauteur de ces 4 lignes (à préserver) à 256 points ( variable
zoneHaut)
Quand je divise le reste de ma résolution (variable zone_modifiee) par le
nombre d'élèves pour trouver la hauteur des lignes que je veux modifier,
j'obtiens une hauteur de ligne qui sort de l'écran, quand j'exécute la
macro.
Bref! je patauge.
Si vous aviez une réponse... ou une astuce...
Merci d'avance
elect

PS: Je cherche à faire ça pour utiliser le fichier sur d'autres ordi qui
n'ont pas forcément la même résolution.


Option Explicit 'JCGL : Merci à la communauté XL pour ce code : je ne sais
plus où je l'ai trouvé...
Option Private Module
Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type

Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long,
rectangle As RECT) As Long
'Calcul de la resolution
Function GetScreenResolution() As String
Dim R As RECT
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
End Function


'Agrandi les lignes comprises entre 5 et 34 pour les ajuster à la
résolution
Sub hauteur_lignes()
Dim Hauteur As Variant, Resolution As String, zoneHaut As Variant
Dim zone_modifiee As Variant, Nb_Eleves As Byte, Haut_Row As Double
Dim rw As Variant
Resolution = GetScreenResolution ' Récupère par API la résolution ecran
Hauteur = Mid(Resolution, 1, InStrRev(Resolution, "x") - 1) ' Prend la
hauteur
zoneHaut = 256 'zone à ne pas toucher
zone_modifiee = Hauteur - zoneHaut
Nb_Eleves = 30
Haut_Row = zone_modifiee / Nb_Eleves
For Each rw In ActiveSheet.Rows
If rw.Row > 4 And rw.Row < 35 Then
rw.RowHeight = Haut_Row
End If
Next rw
End Sub


Avatar
MichDenis
Bonjour Elect31,

Pour te donner une idée pour retrouver quelques informations
pouvant t'aider à solutionner ton problème. Évidemment, je
n'ai pas listé toutes les propriétés de la propriété "VisibleRange"...

'-----------------------------------
Sub test()
Dim X As Double
With ThisWorkbook
.Worksheets("Feuil1").Select
With .Windows(1)
'Trouve la hauteur de toutes les lignes visibles
X = .VisibleRange.Height
'Trouve le nombre de lignes visibles
y = .VisibleRange.Rows.Count
'Trouve l'adresse de la plage affichée à l'écran
Z = .VisibleRange.Address
End With
End With
End Sub
'-----------------------------------



"elect31" a écrit dans le message de groupe de discussion :

Bonjour à tous
Ayant récupéré sur un forum, du code pour détecter la résolution de mon
écran, je voudrais écrire une macro "hauteur_lignes()" qui adapterait la
hauteur des lignes comprises entre > 4 et < 35 à ce qui reste de la
résolution quand on y déduit les 4 premières lignes.
N'arrivant pas à faire cela d'une manière excellente, j'ai
arbitrairement déterminé la hauteur de ces 4 lignes (à préserver) à 256
points ( variable zoneHaut)
Quand je divise le reste de ma résolution (variable zone_modifiee) par
le nombre d'élèves pour trouver la hauteur des lignes que je veux
modifier, j'obtiens une hauteur de ligne qui sort de l'écran, quand
j'exécute la macro.
Bref! je patauge.
Si vous aviez une réponse... ou une astuce...
Merci d'avance
elect

PS: Je cherche à faire ça pour utiliser le fichier sur d'autres ordi qui
n'ont pas forcément la même résolution.


Option Explicit 'JCGL : Merci à la communauté XL pour ce code : je ne
sais plus où je l'ai trouvé...
Option Private Module
Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type

Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long,
rectangle As RECT) As Long
'Calcul de la resolution
Function GetScreenResolution() As String
Dim R As RECT
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
End Function


'Agrandi les lignes comprises entre 5 et 34 pour les ajuster à la résolution
Sub hauteur_lignes()
Dim Hauteur As Variant, Resolution As String, zoneHaut As Variant
Dim zone_modifiee As Variant, Nb_Eleves As Byte, Haut_Row As Double
Dim rw As Variant
Resolution = GetScreenResolution ' Récupère par API la résolution ecran
Hauteur = Mid(Resolution, 1, InStrRev(Resolution, "x") - 1) ' Prend la
hauteur
zoneHaut = 256 'zone à ne pas toucher
zone_modifiee = Hauteur - zoneHaut
Nb_Eleves = 30
Haut_Row = zone_modifiee / Nb_Eleves
For Each rw In ActiveSheet.Rows
If rw.Row > 4 And rw.Row < 35 Then
rw.RowHeight = Haut_Row
End If
Next rw
End Sub
Avatar
elect31
Bonsoir Mishell
Merci de ta réponse mais le zoom ne me va absolument pas.Il me réduit
toute la zone sélectionnée, alors que je ne veux qu'adapter la hauteur
des lignes 5 à 34 à ce qui me reste d'écran, une fois déduit la zone
fixe des 4 lignes du haut. Je ne veux pas zoomer mais juste recalculer
la hauteur des certaines lignes.
elect
Mishell a écrit :
Bonjour.
Tu peux peut-être jouer avec le Zoom offert dans le menu Affichage.

Rows("1:17").Select
ActiveWindow.Zoom = True

Mishell


"elect31" wrote in message
news:
Bonjour à tous
Ayant récupéré sur un forum, du code pour détecter la résolution de mon
écran, je voudrais écrire une macro "hauteur_lignes()" qui adapterait la
hauteur des lignes comprises entre > 4 et < 35 à ce qui reste de la
résolution quand on y déduit les 4 premières lignes.
N'arrivant pas à faire cela d'une manière excellente, j'ai arbitrairement
déterminé la hauteur de ces 4 lignes (à préserver) à 256 points ( variable
zoneHaut)
Quand je divise le reste de ma résolution (variable zone_modifiee) par le
nombre d'élèves pour trouver la hauteur des lignes que je veux modifier,
j'obtiens une hauteur de ligne qui sort de l'écran, quand j'exécute la
macro.
Bref! je patauge.
Si vous aviez une réponse... ou une astuce...
Merci d'avance
elect

PS: Je cherche à faire ça pour utiliser le fichier sur d'autres ordi qui
n'ont pas forcément la même résolution.


Option Explicit 'JCGL : Merci à la communauté XL pour ce code : je ne sais
plus où je l'ai trouvé...
Option Private Module
Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type

Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long,
rectangle As RECT) As Long
'Calcul de la resolution
Function GetScreenResolution() As String
Dim R As RECT
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
End Function


'Agrandi les lignes comprises entre 5 et 34 pour les ajuster à la
résolution
Sub hauteur_lignes()
Dim Hauteur As Variant, Resolution As String, zoneHaut As Variant
Dim zone_modifiee As Variant, Nb_Eleves As Byte, Haut_Row As Double
Dim rw As Variant
Resolution = GetScreenResolution ' Récupère par API la résolution ecran
Hauteur = Mid(Resolution, 1, InStrRev(Resolution, "x") - 1) ' Prend la
hauteur
zoneHaut = 256 'zone à ne pas toucher
zone_modifiee = Hauteur - zoneHaut
Nb_Eleves = 30
Haut_Row = zone_modifiee / Nb_Eleves
For Each rw In ActiveSheet.Rows
If rw.Row > 4 And rw.Row < 35 Then
rw.RowHeight = Haut_Row
End If
Next rw
End Sub






Avatar
elect31
Merci Mich mais je ne vois pas trop à quoi pourrait bien me servir
.VisibleRange. Mais... je cherche encore...
Je 'reposte' encore pour compléter ma question en précisant que
j'utilise une procédure qui zoome la feuille, avant la sub hauteur_lignes().
Voilà cette procédure: (elle n'est pas de moi)
'Application du zoom
Sub zoom_feuille()
Dim Hauteur As Variant, Zoom As Double, Resolution As String
Const Zoom_100 As Integer = 1400 ' Constante de calcul pour le zoom

Resolution = GetScreenResolution ' Récupère par API la résolution ecran
Hauteur = Mid(Resolution, 1, InStrRev(Resolution, "x") - 1) ' Prend la
hauteur
Zoom = (128 / Zoom_100) * CDbl(Hauteur) ' Calcul le zoom
ActiveWindow.Zoom = Format(Zoom, "0") 'change le % de zoom

End Sub
Voilà!
1° sub zoom_feuille() ( en faisant appel à la fonction
GetScreenResolution()'Me permet de zoomer et d'adapter la largeur de la
feuille à la largeur de l'écran.
2° sub hauteur_lignes()' Devrait me permettre de réduire la hauteur des
lignes tout en conservant le zoom, dans le but d'adapter la hauteur de
la zone qui m'intéresse à la hauteur de l'écran.
J'espère avoir été plus clair (mais à me relire, j'en doute...)
Merci de vos réponses
elect






MichDenis a écrit :
Bonjour Elect31,

Pour te donner une idée pour retrouver quelques informations
pouvant t'aider à solutionner ton problème. Évidemment, je
n'ai pas listé toutes les propriétés de la propriété "VisibleRange"...

'-----------------------------------
Sub test()
Dim X As Double
With ThisWorkbook
.Worksheets("Feuil1").Select
With .Windows(1)
'Trouve la hauteur de toutes les lignes visibles
X = .VisibleRange.Height
'Trouve le nombre de lignes visibles
y = .VisibleRange.Rows.Count
'Trouve l'adresse de la plage affichée à l'écran
Z = .VisibleRange.Address
End With
End With
End Sub
'-----------------------------------



"elect31" a écrit dans le message de groupe de discussion :

Bonjour à tous
Ayant récupéré sur un forum, du code pour détecter la résolution de mon
écran, je voudrais écrire une macro "hauteur_lignes()" qui adapterait la
hauteur des lignes comprises entre > 4 et < 35 à ce qui reste de la
résolution quand on y déduit les 4 premières lignes.
N'arrivant pas à faire cela d'une manière excellente, j'ai
arbitrairement déterminé la hauteur de ces 4 lignes (à préserver) à 256
points ( variable zoneHaut)
Quand je divise le reste de ma résolution (variable zone_modifiee) par
le nombre d'élèves pour trouver la hauteur des lignes que je veux
modifier, j'obtiens une hauteur de ligne qui sort de l'écran, quand
j'exécute la macro.
Bref! je patauge.
Si vous aviez une réponse... ou une astuce...
Merci d'avance
elect

PS: Je cherche à faire ça pour utiliser le fichier sur d'autres ordi qui
n'ont pas forcément la même résolution.


Option Explicit 'JCGL : Merci à la communauté XL pour ce code : je ne
sais plus où je l'ai trouvé...
Option Private Module
Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type

Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long,
rectangle As RECT) As Long
'Calcul de la resolution
Function GetScreenResolution() As String
Dim R As RECT
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
End Function


'Agrandi les lignes comprises entre 5 et 34 pour les ajuster à la résolution
Sub hauteur_lignes()
Dim Hauteur As Variant, Resolution As String, zoneHaut As Variant
Dim zone_modifiee As Variant, Nb_Eleves As Byte, Haut_Row As Double
Dim rw As Variant
Resolution = GetScreenResolution ' Récupère par API la résolution ecran
Hauteur = Mid(Resolution, 1, InStrRev(Resolution, "x") - 1) ' Prend la
hauteur
zoneHaut = 256 'zone à ne pas toucher
zone_modifiee = Hauteur - zoneHaut
Nb_Eleves = 30
Haut_Row = zone_modifiee / Nb_Eleves
For Each rw In ActiveSheet.Rows
If rw.Row > 4 And rw.Row < 35 Then
rw.RowHeight = Haut_Row
End If
Next rw
End Sub



Avatar
MichDenis
Si tu veux être capable d'afficher une plage de cellule dans la partie
visible de l'application, Faut-il d'abord connaître la hauteur totale
de la plage visible disponible avant de pouvoir la distribuer selon
tes besoins. Si tu n'utilises pas ce que je t'ai donné ".VisibleRange.Height"
comment fais-tu pour savoir quelle est la hauteur de la fenêtre ?

Si tu as une meilleure façon de faire, ne te gêne pas pour l'utiliser et tu
nous diras comment tu as fait.