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