Manipuler la largeur des colonnes d'un tableau pour l'exportation vers mail

Bonjour,

Je pense que le nom du sujet est assez détaillé mais je souhaiterais changer la largeur de mes colonnes de mon tableau que j'exporte vers mes mails pour qu'il soit plus agréable à regarder. Une certaine question d'esthetisme.

Voici le code pour l'appel du tableau dans le corp du mail

mymail.HTMLBody = "<HTML><BODY>Hello,<br /><br />Could you please advise regarding below<br /><br />" & _
tableHTML(Range(tableau)) & "<br /><br />Please check and revert to us.</BODY></HTML>"

et la fonction utilisée (Merci Ausecour)

Private Function tableHTML(plage As Range) As String
tableHTML = "<head> <style> table, th, td {border: 1px solid black; border-collapse:collapse;}</style> </head><TABLE width=" & plage.Columns.Width & ">" & Chr(10) & "<TR>"

For Each col In plage.Columns
    tableHTML = tableHTML & "<TH width=" & col.Width & ">" & plage.Cells(1, col.Column) & "</TH>"
Next col

If plage.Rows.Count > 1 Then
    For i = 2 To plage.Rows.Count
        tableHTML = tableHTML & "<TR>"
        For j = 1 To plage.Columns.Count
            tableHTML = tableHTML & "<TD bgcolor=" & DecVersHexa(plage.Cells(i, j).Interior.Color) & ">" & plage.Cells(i, j) & "</TD>"
        Next j
        tableHTML = tableHTML & "</TR>"
    Next i
End If

tableHTML = tableHTML & "</TABLE>"
End Function

Ainsi que

Private Function DecVersHexa(ByVal valeur As Long) As String
rouge = Left(Hex(Int(valeur Mod 256)) & "00", 2)
vert = Left(Hex(Int((valeur Mod 65536) / 256)) & "00", 2)
bleu = Left(Hex(Int(valeur / 65536)) & "00", 2)
DecVersHexa = rouge & vert & bleu
End Function

Merci par avance

Bonjour (et oui encore moi )

Je reviens vers toi après m'être pas mal pris la tête avec Excel qui n'est vraiment pas gentil avec moi, il y a de nombreuses choses bizarres sur Excel que je ne comprends pas toujours enfin bon

Visiblement, quand on utilise columns.width, ou column.width, Excel renvoie une valeur en pixel, mais pas la bonne, 75% de la vraie valeur de ce que j'ai vu... si je mettais 100 pixels de largeur pour chaque cellule, ça donnait 225 en largeur totale pour 3 colonnes, 75 par colonne... et ce peu importe la valeur que je donnais, du coup j'ai pris ça en compte dans la création du tableau

Voici le nouveau code:

Private Function tableHTML(ByVal plage As Range) As String
tableHTML = "<head> <style> table, th, td {border: 1px solid black; border-collapse:collapse;}</style> </head> " _
    & "<TABLE width=" & plage.Columns.Width / 0.75 & ">" & Chr(10) & "<TR>"

For Each col In plage.Columns
    tableHTML = tableHTML & "<TH width=" & col.Width / 0.75 & ">" & plage.Cells(1, col.Column) & "</TH>"
Next col

If plage.Rows.Count > 1 Then
    For i = 2 To plage.Rows.Count
        tableHTML = tableHTML & "<TR>"
        For j = 1 To plage.Columns.Count
            tableHTML = tableHTML & "<TD bgcolor=" & DecVersHexa(plage.Cells(i, j).Interior.Color) & ">" & plage.Cells(i, j) & "</TD>"
        Next j
        tableHTML = tableHTML & "</TR>"
    Next i
End If

tableHTML = tableHTML & "</TABLE>"
End Function
Private Function DecVersHexa(ByVal valeur As Long) As String
rouge = Left(Hex(Int(valeur Mod 256)) & "00", 2)
vert = Left(Hex(Int((valeur Mod 65536) / 256)) & "00", 2)
bleu = Left(Hex(Int(valeur / 65536)) & "00", 2)
DecVersHexa = rouge & vert & bleu
End Function

Du coup si tu veux laisser de la marge sur la largeur de tes colonnes, il faudra prévoir ça directement sur Excel

Bonjour,

Je reviens vers toi après m'être pas mal pris la tête avec Excel qui n'est vraiment pas gentil avec moi, il y a de nombreuses choses bizarres sur Excel que je ne comprends pas toujours enfin bon

Voici une explication :

https://docs.microsoft.com/fr-fr/office/troubleshoot/excel/determine-column-widths

En cherchant +excel +twipsperpixelx tu trouves des palliatifs.

Bonjour,

Je reviens vers toi après m'être pas mal pris la tête avec Excel qui n'est vraiment pas gentil avec moi, il y a de nombreuses choses bizarres sur Excel que je ne comprends pas toujours enfin bon

Voici une explication :

https://docs.microsoft.com/fr-fr/office/troubleshoot/excel/determine-column-widths

En cherchant +excel +twipsperpixelx tu trouves des palliatifs.

J'avais déjà lu des articles qui parlaient de la fameuse "unité" pour les largeurs de colonnes, mais même en lisant ça, je dois avouer ne pas bien comprendre cette histoire de 75% ...

Bonjour,

Personnellement, en html, je laisse faire le navigateur qui ajustera les colonnes en fonction du besoin.

Après on peut fixer la largeur soit en valeur absolue indépendamment d'excel (car si j'en crois ce que dit Ausecour c'est pas fidèle à ce que l'on souhaite, soit de mémoire on peut fixer des % de la largeur dispo.

En tous cas je suis toujours adepte du plus simple.

Et au pire, si les données n'ont pas besoin d'être travaillée sur la mail, on y mettre une photo issue du tableau excel.

Salut,

Désolé pour la réponse un peu tardive, je viens d'essayer la nouvelle Fonction et c'est ce qu'il me fallait.

Pour aller un peu plus loin, je peux donc manipuler les largeurs directement sur mon tableau ou à partir de VBA en utilisant column.width?

J'aurais, dans mes mails, un tableau qui refletera parfaitement celui que j'ai effectué sur excel?

Merci encore pour ton/votre aide.

Bien à toi/vous

Bonjour,

Pour la largeur des colonnes, il te suffit en effet de mettre de la marge dans ton tableau Excel, le tableau par mail devrait ressembler au tien

Rechercher des sujets similaires à "manipuler largeur colonnes tableau exportation mail"