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