Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Utilisation de .automargins dans une procedure VBA

  • Initiateur de la discussion Initiateur de la discussion golden
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

G

golden

Guest
Bonjour à tous,

J'essaye de modifier les marges intérieurs d'une boite de texte au moyen d'une routine VBA.

Cette possibilité existe manuellement (case à cocher sur l'onglet "margins" dans les propriétés de la boite - j'utilise excel 2003 version US), mais semble être inaccessible via VBA. Si j'entµregistre une macro et que je coche la case, rien n'est enregistré, et si j'essaye de programmer la ligne manuellement, VBA se plante.

Quelqu'un a-t-il déjà rencontré se problème, et existe-t-il une parade ?

Merci
Christopher
 
Re : Utilisation de .automargins dans une procedure VBA

Bonjour Golden,

Essaye le code suivant (en changeant le nom):

Code:
With ActiveSheet.Shapes("Testshape").TextFrame
    .AutoMargins = False
    .MarginLeft = 9.92
    .MarginRight = 9.92
    .MarginTop = 6.52
    .MarginBottom = 6.52
End With

@+

Gael
 
Re : Utilisation de .automargins dans une procedure VBA

Bsr à tous


Avec une zone de texte pré-existante nommée ici Text Box 2

Code:
Sub testTBX()
Dim shp As Shape
Set shp = ActiveSheet.Shapes("Text Box 2")
    With shp.TextFrame
        .AutoMargins = False
        .MarginLeft = 9.92
        .MarginRight = 9.92
        .MarginTop = 6.52
        .MarginBottom = 6.52
        .Characters.Text = "TEXTE POUR TEST"
    End With
End Sub

Cela fonctionne.


A+
 
Dernière édition:
Re : Utilisation de .automargins dans une procedure VBA

Bonsoir à tous,

Chez moi, cela fonctionne sans problème (avec XL2003). J'ai retesté avec une nouvelle forme vierge et sans aucun texte, lancé la macro qui ne contient que le code envoyé précédemment après avoir remplacé le nom dans la macro par le nom par défaut "Zone de texte 7".

Les marges ont été correctement appliquées et l'option marges automatiques décochée.

@+

Gael
 
Re : Utilisation de .automargins dans une procedure VBA

Merci Gael et vbacrumble, je vais essayer votre code pour voir ce que ca donne.

Pour info, voici mon code:

Code:
Option Explicit

Sub DrawBoxes()

    Dim l As Integer        ' left
    Dim t As Integer        ' top
    Dim w As Integer        ' width
    Dim h As Integer        ' height
    Dim text As String      ' texte
    Dim fg As Long          ' foreground, couleur d'avant-plan
    Dim bg As Long          ' background, couleur d'arrière-plan
    
    Dim n As Integer        ' numéro de ligne en cours
    
    InitColours
    
' draw on new sheet
    Sheets.Add
    
    n = 2
    
    Do
    
        l = Sheets("boxes").Cells(n, 1).Value
        t = Sheets("boxes").Cells(n, 2).Value
        w = Sheets("boxes").Cells(n, 3).Value
        h = Sheets("boxes").Cells(n, 4).Value
        text = Sheets("boxes").Cells(n, 5).Value
' ================================================================================================================================
' premier problème: ces deux lignes ne fonctionnent pas. Elles retournent la couleur désiré sous forme de chaine ("RED"), et je
' n'arrive pas à évaluer l'indirection afin de récupérer la valeur numérique de la variable (RED=RGB(255,0,0)).
'        fg = Sheets("boxes").Cells(n, 6).Value
'        bg = Sheets("boxes").Cells(n, 7).Value
' j'ai donc du mettre les couleurs sur une feuille, créer une fonction utilisateur (car RGB() est une fonction VBA), et faire une
' vlookup sur cette feuille.
' ================================================================================================================================
        fg = Application.WorksheetFunction.VLookup(Sheets("boxes").Cells(n, 6).Value, Sheets("colours").Range("A:B"), 2, False)
        bg = Application.WorksheetFunction.VLookup(Sheets("boxes").Cells(n, 7).Value, Sheets("colours").Range("A:B"), 2, False)

        DrawBox l, t, w, h, text, fg, bg
        
        n = n + 1
        
    Loop Until Sheets("boxes").Cells(n, 1).Value = ""
    
    Cells(1, 1).Select
        
End Sub

Private Sub DrawBox(l As Integer, _
                 t As Integer, _
                 w As Integer, _
                 h As Integer, _
                 text As String, _
                 fg As Long, _
                 bg As Long)

    ActiveSheet.Shapes.AddShape(msoShapeRectangle, l, t, w, h).Select
    
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Fill.ForeColor.RGB = bg
    Selection.ShapeRange.Fill.Transparency = 0#
    
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoFalse
    
    Selection.Characters.text = text
    
    Selection.font.Name = "arial"
    Selection.font.size = 2 * h / 3
    Selection.font.bold = False
    Selection.font.Color = fg
    Selection.HorizontalAlignment = xlCenter
    Selection.VerticalAlignment = xlCenter
    Selection.AutoSize = False
    
' ================================================================================================================================
' premier problème: cette ligne plante, alors qu'elle est donée en exemple dans l'aide, et que si on ne la mets pas, les 4 lignes
' suivantes ne servent à rien. Ceci pose un problème lorsque le texte est trop grand pour rentrer correctement dans la boite.
'    Selection.ShapeRange.TextFrame.AutoMargins = True
' ================================================================================================================================
    Selection.ShapeRange.TextFrame.MarginLeft = 0#
    Selection.ShapeRange.TextFrame.MarginRight = 0#
    Selection.ShapeRange.TextFrame.MarginTop = 0#
    Selection.ShapeRange.TextFrame.MarginBottom = 0#
    
    Selection.Placement = xlFreeFloating
    Selection.PrintObject = True

End Sub

Je parle de deux problèmes, car j'ai un autre pb d'évaluation de chaine texte que j'ai posté dans un autre message.

Si besoin, je vais poster mon fichier.
 
Re : Utilisation de .automargins dans une procedure VBA

Bonsoir Golden, VBACrumble,

Ci-joint ton exemple modifié.

La couleur de la police sera celle de la cellule contenant le texte (E2) et la couleur de fond définie par le chiffre en cellule (F2) qui correspond à la palette de couleurs.

Pour les marges, j'ai mis le bout de code envoyé précédemment avec une définition du nom préalable et ça marche bien.

@+

Gael
 

Pièces jointes

Dernière édition:
Re : Utilisation de .automargins dans une procedure VBA

Re,

Exemple amélioré, les couleurs du rectangle (remplissage et police) seront les mêmes que celles attribuées à la cellule E5.

@+

Gael
 

Pièces jointes

Re : Utilisation de .automargins dans une procedure VBA

Je viens d'essayer. Pour automargins c'est impecc! Bizarre que ça marche quand on mets un nom et pas sinon.

Pour les couleurs, ce n'est pas exactement ce que je cherche, mais merci quand même. Je garderai ma solution avec vlookup.

Merci à tous.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

R
Réponses
3
Affichages
3 K
Remteyss
R
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…