Une Classe pour redimensioner facilement les objets d'une feuille
Le source complet converti en html avec VBinHTML:
Option Explicit
Private Const MargeConst = 99999
Public MargeParDefaut As Long
Public HauteurMini As Long
Public LargeurMini As Long
'==================================================================================
'
'==================================================================================
Public Sub ReDimensione(UnObjet As Object, DansUnAutre As Object, _
ByVal Verticalement As Boolean, ByVal Horizontalement As Boolean, _
Optional ByVal MargeHaut As Long = MargeConst, Optional ByVal MargeGauche As Long = MargeConst, _
Optional ByVal MargeBas As Long = MargeConst, Optional ByVal MargeDroite As Long = MargeConst, _
Optional ByVal Visible As Boolean = False)
Dim MargeH As Long
Dim MargeB As Long
Dim MargeD As Long
Dim MargeG As Long
If Not Visible Then UnObjet.Visible = False
If MargeHaut = MargeConst Then
MargeH = MargeParDefaut
Else
MargeH = MargeHaut
End If
If MargeBas = MargeConst Then
MargeB = MargeParDefaut
Else
MargeB = MargeBas
End If
If MargeDroite = MargeConst Then
MargeD = MargeParDefaut
Else
MargeD = MargeDroite
End If
If MargeGauche = MargeConst Then
MargeG = MargeParDefaut
Else
MargeG = MargeGauche
End If
On Error Resume Next
If Verticalement Then
UnObjet.Top = MargeH
UnObjet.Height = Max(DansUnAutre.ScaleHeight - MargeH - MargeB, HauteurMini)
If Err.Number <> 0 Then
UnObjet.Height = Max(DansUnAutre.Height - MargeH - MargeB, HauteurMini)
Err.Clear
End If
End If
If Horizontalement Then
UnObjet.Left = MargeG
UnObjet.Width = Max(DansUnAutre.ScaleWidth - MargeG - MargeD, LargeurMini)
If Err.Number <> 0 Then
UnObjet.Width = Max(DansUnAutre.Width - MargeG - MargeD, LargeurMini)
Err.Clear
End If
End If
If Not Visible Then UnObjet.Visible = True
End Sub
'==================================================================================
'
'==================================================================================
Public Sub AligneEnDessous(UnObjet As Object, ParRapportA As Object, _
Optional ByVal MargeBas As Long = MargeConst, _
Optional ByVal MemeLeft As Boolean = False, _
Optional ByVal MemeLargeur As Boolean = False)
Dim MargeB As Long
If MargeBas = MargeConst Then
MargeB = MargeParDefaut
Else
MargeB = MargeBas
End If
UnObjet.Top = ParRapportA.Top + ParRapportA.Height + MargeB
If MemeLeft Then UnObjet.Left = ParRapportA.Left
If MemeLargeur Then UnObjet.Width = ParRapportA.Width
End Sub
'==================================================================================
'
'==================================================================================
Public Sub AligneAuDessus(UnObjet As Object, ParRapportA As Object, _
Optional ByVal MargeHaut As Long = MargeConst, _
Optional ByVal MemeLeft As Boolean = False, _
Optional ByVal MemeLargeur As Boolean = False)
Dim MargeH As Long
If MargeHaut = MargeConst Then
MargeH = MargeParDefaut
Else
MargeH = MargeHaut
End If
UnObjet.Top = ParRapportA.Top - UnObjet.Height - MargeH
If MemeLeft Then UnObjet.Left = ParRapportA.Left
If MemeLargeur Then UnObjet.Width = ParRapportA.Width
End Sub
'==================================================================================
'
'==================================================================================
Public Sub AligneAdroite(UnObjet As Object, ParRapportA As Object, _
Optional ByVal MargeDroite As Long = MargeConst, _
Optional ByVal MemeTop As Boolean = False, _
Optional ByVal MemeHauteur As Boolean = False)
Dim MargeD As Long
If MargeDroite = MargeConst Then
MargeD = MargeParDefaut
Else
MargeD = MargeDroite
End If
UnObjet.Left = ParRapportA.Left + ParRapportA.Width + MargeD
If MemeTop Then UnObjet.Top = ParRapportA.Top
If MemeHauteur Then UnObjet.Height = ParRapportA.Height
End Sub
'==================================================================================
'
'==================================================================================
Public Sub AligneAGauche(UnObjet As Object, ParRapportA As Object, _
Optional ByVal MargeGauche As Long = MargeConst, _
Optional ByVal MemeTop As Boolean = False, _
Optional ByVal MemeHauteur As Boolean = False)
Dim MargeG As Long
If MargeGauche = MargeConst Then
MargeG = MargeParDefaut
Else
MargeG = MargeGauche
End If
UnObjet.Left = ParRapportA.Left - UnObjet.Width - MargeG
If MemeTop Then UnObjet.Top = ParRapportA.Top
If MemeHauteur Then UnObjet.Height = ParRapportA.Height
End Sub
'==================================================================================
'
'==================================================================================
Public Sub PlaceEnBasAdroite(UnObjet As Object, DansUnAutre As Object, _
Optional ByVal MargeBas As Long = MargeConst, _
Optional ByVal MargeDroite As Long = MargeConst)
Dim MargeB As Long
Dim MargeD As Long
If MargeBas = MargeConst Then
MargeB = MargeParDefaut
Else
MargeB = MargeBas
End If
If MargeDroite = MargeConst Then
MargeD = MargeParDefaut
Else
MargeD = MargeDroite
End If
UnObjet.Top = DansUnAutre.ScaleHeight - UnObjet.Height - MargeB
UnObjet.Left = DansUnAutre.ScaleWidth - UnObjet.Width - MargeD
End Sub
'==================================================================================
'
'==================================================================================
Public Sub PlaceEnBas(UnObjet As Object, DansUnAutre As Object, _
Optional ByVal MargeBas As Long = MargeConst)
Dim MargeB As Long
If MargeBas = MargeConst Then
MargeB = MargeParDefaut
Else
MargeB = MargeBas
End If
UnObjet.Top = DansUnAutre.ScaleHeight - UnObjet.Height - MargeB
End Sub
'==================================================================================
'
'==================================================================================
Public Sub PlaceAdroite(UnObjet As Object, DansUnAutre As Object, _
Optional ByVal MargeDroite As Long = MargeConst)
Dim MargeD As Long
If MargeDroite = MargeConst Then
MargeD = MargeParDefaut
Else
MargeD = MargeDroite
End If
UnObjet.Left = DansUnAutre.ScaleWidth - UnObjet.Width - MargeD
End Sub
'==================================================================================
'
'==================================================================================
Public Sub SplitAdroite(ObjetGauche As Object, ObjetDroit As Object, SplitBar As Object, _
ByVal Valeur As Long, Optional ByVal Visible As Boolean = True)
If Not Visible Then
ObjetDroit.Visible = False
ObjetGauche.Visible = False
End If
If Valeur > 0 Then
If ObjetDroit.Width - Valeur > LargeurMini Then
ObjetGauche.Width = ObjetGauche.Width + Valeur
ObjetDroit.Left = ObjetGauche.Left + ObjetGauche.Width + SplitBar.Width
ObjetDroit.Width = ObjetDroit.Width - Valeur
SplitBar.Left = ObjetGauche.Left + ObjetGauche.Width
End If
End If
If Not Visible Then
ObjetDroit.Visible = True
ObjetGauche.Visible = True
End If
End Sub
'==================================================================================
'
'==================================================================================
Public Sub SplitAGauche(ObjetGauche As Object, ObjetDroit As Object, SplitBar As Object, _
ByVal Valeur As Long, Optional ByVal Visible As Boolean = True)
If Not Visible Then
ObjetDroit.Visible = False
ObjetGauche.Visible = False
End If
If Valeur > LargeurMini Then
ObjetDroit.Width = ObjetDroit.Width + (ObjetGauche.Width - Valeur)
ObjetGauche.Width = Valeur
ObjetDroit.Left = ObjetGauche.Left + ObjetGauche.Width + SplitBar.Width
SplitBar.Left = ObjetGauche.Left + ObjetGauche.Width
End If
If Not Visible Then
ObjetDroit.Visible = True
ObjetGauche.Visible = True
End If
End Sub
'==================================================================================
'
'==================================================================================
Public Sub SplitEnBas(ObjetHaut As Object, ObjetBas As Object, SplitBar As Object, _
ByVal Valeur As Long, Optional ByVal Visible As Boolean = True)
If Not Visible Then
ObjetHaut.Visible = False
ObjetBas.Visible = False
End If
If Valeur > 0 Then
If ObjetBas.Height - Valeur > HauteurMini Then
ObjetHaut.Height = ObjetHaut.Height + Valeur
ObjetBas.Top = ObjetHaut.Top + ObjetHaut.Height + SplitBar.Height
ObjetBas.Height = ObjetBas.Height - Valeur
SplitBar.Top = ObjetHaut.Top + ObjetHaut.Height
End If
End If
If Not Visible Then
ObjetHaut.Visible = True
ObjetBas.Visible = True
End If
End Sub
'==================================================================================
'
'==================================================================================
Public Sub SplitEnHaut(ObjetHaut As Object, ObjetBas As Object, SplitBar As Object, _
ByVal Valeur As Long, Optional ByVal Visible As Boolean = True)
If Not Visible Then
ObjetHaut.Visible = False
ObjetBas.Visible = False
End If
If Valeur > HauteurMini Then
ObjetBas.Height = ObjetBas.Height + (ObjetHaut.Height - Valeur)
ObjetHaut.Height = Valeur
ObjetBas.Top = ObjetHaut.Top + ObjetHaut.Height + SplitBar.Height
SplitBar.Top = ObjetHaut.Top + ObjetHaut.Height
End If
If Not Visible Then
ObjetHaut.Visible = True
ObjetBas.Visible = True
End If
End Sub
'==================================================================================
'
'==================================================================================
Private Function Max(ByVal a As Long, ByVal b As Long) As Long
If a > b Then Max = a Else Max = b
End Function