IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[MACRO] Impossible d'insérer la bordure BOTTOM d'un tableau dans le corps d'un mail


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Par défaut [MACRO] Impossible d'insérer la bordure BOTTOM d'un tableau dans le corps d'un mail
    Bonjour,

    Mon problème est qu'il m'est impossible d'insérer la bordure du bas de mon tableau lorsque je l'insère dans le corps d'un mail.
    Ce tableau est dans un Sheet sur une certaine rangée de cellules.

    Voici un exemple pour illustrer mon propos :

    (Corps du mail généré)

    Bonjour,

    Veuillez trouver ci-dessous le tableau :

    ________________
    | xxx | yyyyyy |
    ----------------
    | AAA | BBBB   |


    -> Pas de bordure en BOTTOM de ce tableau

    Code VBA qui génère ce mail avec le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Set rng = WB.Worksheets("Sheet1").Range("K1", WB.Worksheets("Sheet1").Range("N1").End(xlDown)).SpecialCells(xlCellTypeVisible)
    'Set rng =  WB.Worksheets("Sheet1").Range("K1", WB.Worksheets("Sheet1").Range("N1").End(xlDown)).Cells 'testé mais sans succès
     
            With oBjMail
                .To = mesDestinaitaires
     
                .Subject = objetMail
     
                .HTMLBody = body_HTML_mail_Template() & RangetoHTML(rng)
     
                .Display
            End With
     
    End Sub
     
     
    Public Function RangetoHTML(rng As Range)
     
    '=========== [STANDARD FUNCTION] ============
     
        Dim fso As Object
        Dim ts As Object
        Dim TempFile As String
        Dim TempWB As Workbook
     
        TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
     
        'Copy the range and create a new workbook to past the data in
     
        rng.Copy
        Set TempWB = Workbooks.Add(1)
        With TempWB.Sheets(1)
            .Cells(1).PasteSpecial Paste:=8
            .Cells(1).PasteSpecial xlPasteValues, , False, False
            .Cells(1).PasteSpecial xlPasteFormats, , False, False
            .Cells(1).Select
            Application.CutCopyMode = False
            On Error Resume Next
            .DrawingObjects.Visible = True
            .DrawingObjects.Delete
            On Error GoTo 0
        End With
     
        'Publish the sheet to a htm file
        With TempWB.PublishObjects.Add( _
            SourceType:=xlSourceRange, _
            Filename:=TempFile, _
            Sheet:=TempWB.Sheets(1).Name, _
            Source:=TempWB.Sheets(1).UsedRange.Address, _
            HtmlType:=xlHtmlStatic)
            .Publish (True)
        End With
     
     
        'Read all data from the htm file into RangetoHTML
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
        RangetoHTML = ts.readall
        ts.Close
        RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
        "align=left x:publishsource=")
     
        'Close TempWB
        TempWB.Close savechanges:=False
     
        'Delete the htm file we used in this function
        Kill TempFile
     
        Set ts = Nothing
        Set fso = Nothing
        Set TempWB = Nothing
     
    End Function
    Cela me prend bien l'intégralité du tableau SAUF la bordure du bas. J'ai essayé de la faire à la main avec une bordure fine et épaisse dans le mail mais toujours le même problème.

    J'ai du manqué quelque chose...

    Existerait-il sinon une autre alternative?

    D'avance, merci pour vos réponses.

    Rolf

  2. #2
    Membre actif Avatar de Pellouaille
    Homme Profil pro
    STF (Sans Travail Fixe)
    Inscrit en
    Novembre 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : STF (Sans Travail Fixe)
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2014
    Messages : 89
    Par défaut
    Hello rolf34,

    Pas la meilleure des solution mais en définissant 'rng', pourquoi ne pas aller chercher la cellule -> Range("N1").End(xlDown) + 1? (besoin de créé une variable pour stocker le numéro de ligne).

    Faut voir le rendu dans le mail...

    Cordialement,

    Pellouaille

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Par défaut
    Bonjour Pellouaille,

    J'ai suivi ta recommandation. J'ai ajouté dans les cellules vides, juste en dessous de la dernière ligne de mon tableau, un carriage return (Chr(13)) pour chaque colonne. Je rajoute ensuite une bordure en TOP et le tour est joué !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    'Insertion de la bordure pour tout le tableau
    .......
     
            'Insertion de la bordure BOTTOM manquante du tableau
            Dim i, j as integer
     
            j = WB.Worksheets("Sheet1").Range("K1").End(xlDown).Count + 1
            Set cellule = WB.Worksheets("Sheet1").Range("K1")
            For i = 0 To 3 'Mon tableau possède 4 colonnes
                cellule.Offset(j, i).Value = Chr(13)
                With cellule.Offset(j, i).Borders(xlEdgeTop)
                    .LineStyle = xlContinuous
                    .ColorIndex = 0
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
            Next i
    C'est un peu artisanal mais au moins ça marche. En attendant de trouver mieux.

    Merci bien.

    rolf

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la bordure "mangée" ne proviendra pas de la nature même de ta plage ? Puisque c'est SpecialCells sur les cellules visibles, n'aurais-tu pas une plage non visible juste avant et/ou juste après ta dernière rangée ?


    j'ai déjà eu le tour en manipulant la fonction RangetoHTML() ... pour contourner le problème j'effectuais d'abord une copie de ma plage dans une feuille brouillon et c'est la plage copiée que j'injectais dans la fonction


    EDIT : j'avais pas vu ta ligne en commentaire, ou tu avais justement testé sans le specialcells ... mais ça vaudrait peut être le coup de tenter une copie de transition au cas où ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macro pour copier/insérer des lignes en fonction de séparateur dans une cellule
    Par Dncky dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/12/2015, 20h44
  2. Excel/Vba insérer les données d'une feuille excel dans le corps d'un email
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2011, 13h02
  3. Insérer du php dans le corps d'un mail html
    Par zorbo dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2010, 11h48
  4. Réponses: 3
    Dernier message: 07/04/2009, 19h39
  5. [HTML] insérer un \n dans le corps d'un mail
    Par lilou77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 20/10/2006, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo