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