En-Tête par formules données sous forme de tableau

Bonjour à toutes et tous,

Je transforme une plage de données en tableau (via insertion tableau).

J'arrive a créer ce même tableau par macro. (cf le code que j'ai adapté ci après).

Mais je n'arrive pas à gérer les en-têtes à ma convenance.

Existe t'il un moyen avec ou sans macro que les en-tête du tableau soient le résultat d'un calcul et non pas du texte statique ?

Je joins un fichier exemple pour rendre ma question plus explicite.

Merci

Cordialement

Hugues

Sub Tableau()
Dim Ws As Worksheet
Dim NomTable As String

NomTable = "Table1"
Set Ws = Worksheets("EN TETE TABLEAU")

With Ws
    .ListObjects.Add(xlSrcRange, .Range("$A$1:$K$8"), , xlYes).Name = NomTable
    .ListObjects(NomTable).TableStyle = "TableStyleMedium9"
End With

End Sub
140en-tete-tableau.zip (298.19 Ko)

Bonjour,

Le message d'alerte n'est pas clair ?

Cdlt.

Jean-Eric a écrit :

Bonjour,

Le message d'alerte n'est pas clair ?

Cdlt.

Bonjour Jean Eric,

Merci de l'intérêt porter à mon problème

Mais qu'entend tu par le message d'alerte n'est pas clair ?

Lorsque je crée mon tableau par macro, il n'y a pas de message d 'alerte

Par contre c'est Excel qui le génère le message quand je crée le tableau en manuel, je sélectionne ma plage de donnée puis via le bandeau je fais insertion tableau, Excel me demande si ma plage de donnée comporte des en-tête (en l'occurence dans mon exemple A1:K1 qui initialement avant transformation en tableau comporte des formules) et me demande de confirmer que les formules de la ligne d'en-tête seront supprimées et converties en texte.

Via la macro même si il n' y a pas de messages d'alerte le résultat est le même et toutes les formules de A1 à K1 sont converties par leur valeur.

En espérant t'avoir éclairer un peu plus.

Si je résume mon espérance ce serait de créer via macro des en-tête de A1 à K1 contenant une formule.

Mais je n'arrive pas à trouver une syntaxe qui gère les en-tête en macro.

Merci

Cordialement

Hugues

Re,

Les en-têtes des tableaux (mettre sous forme de tableau) ne peuvent pas comporter de formules et de valeurs numériques.

Excel convertit tout cela en texte.

Pour pallier à cela, tu dois travailler avec une plage nommée (dynamique).

Cdlt.

Jean-Eric a écrit :

Re,

Les en-têtes des tableaux (mettre sous forme de tableau) ne peuvent pas comporter de formules et de valeurs numériques.

Excel convertit tout cela en texte.

Pour pallier à cela, tu dois travailler avec une plage nommée (dynamique).

Cdlt.

Jean Eric,

C'est effectivement ce que j'ai pu lire dans différentes recherches

C'est pour cela que je voulais créer une macro qui aurait créer les en-tête.

Je sais créer une plage nommée dynamique en utilisant decaler et différents critères de nombre ou valeur mais je ne vois pas comment cela pourrait m'aider à contourner mon problème.

Là en ce moment je travaille sur une ligne supplémentaire qui contiendrait les formules que je reprendrais en collage spéciale valeur sur mes en-tête.

Merci

Hugues

Re,

Il faudrait penser à joindre un petit fichier illustrant tes propos avec des explications précises de ce que tu souhaites faire.

Cdlt.

Jean-Eric a écrit :

Re,

Il faudrait penser à joindre un petit fichier illustrant tes propos avec des explications précises de ce que tu souhaites faire.

Cdlt.

Jean Eric,

Dans mon premier post il y'a un fichier.

Concernant mes pistes actuelles, je finalise quelques essais et revient vers le forum avec un fichier mis à jour.

Ceci dit pas forcément ce jour.

Bien à toi pour ton intérêt.

Hugues

Bonjour Jean Eric, Bonjour à toutes et tous,

Ci joint le fichier tenant compte des conseils ci dessus pour obtenir le résultat souhaité.

Comme je ne suis pas un expert de VBA et que je procède par tâtonnement (aide excel, ce forum pour inspiration de certains codes, enregistreur de macro etc...) pourriez vous jetez un coup d'oeil à mon code pour l'optimiser si besoin et me dire si vous trouvez sa construction cohérente.

Comment est ce que je pourrais adapter ce code pour ne supprimer qu'un tableau défini (et pas tous les tableaux de la feuille) dans mon fichier exemple. Effacer seulement le tableau nommé " Tableau Hugues". Car dans ma base réelle il pourra y avoir plusieurs tableaux sur la même feuille.

Merci

Cordialement

Hugues

[code]

Sub CreaTableau()

Dim Ws As Worksheet

Dim Lo As ListObject

Dim NomTable As String

'Effacer tous les tableaux exitants :

Set Ws = Sheets("EN TETE TABLEAU")

For Each Lo In Ws.ListObjects

#If Mac Then

Lo.ConvertToRange

#Else

Lo.Unlist

#End If

Next

'Personnaliser les futurs en-tetes du tableau avec valeurs issuent de formule

Range("ENTETES").Copy

Range("A2").Select

ActiveSheet.Paste

Application.CutCopyMode = False

Range("A1").Select

'Créer le tableau variable :

NomTable = "Tableau Hugues"

Set Ws = Worksheets("EN TETE TABLEAU")

With Ws

.ListObjects.Add(xlSrcRange, .Range("TABLEAU"), , xlYes).Name = NomTable

.ListObjects(NomTable).TableStyle = "TableStyleMedium9"

End With

End Sub

Sub SupTableau()

'Effacer tous les tableaux existants :

Set Ws = Sheets("EN TETE TABLEAU")

For Each Lo In Ws.ListObjects

#If Mac Then

Lo.ConvertToRange

#Else

Lo.Unlist

#End If

Next

'Supprimer mise en forme

Range("TABLEAU").Select

ExecuteExcel4Macro "PATTERNS(0,0,0,TRUE,2,1,0,0)"

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

Selection.Borders(xlEdgeLeft).LineStyle = xlNone

Selection.Borders(xlEdgeTop).LineStyle = xlNone

Selection.Borders(xlEdgeBottom).LineStyle = xlNone

Selection.Borders(xlEdgeRight).LineStyle = xlNone

Selection.Borders(xlInsideVertical).LineStyle = xlNone

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Range("A1").Select

End Sub

[code]

Bonjour,

Un exemple, une proposition à étudier et à valider sous Mac.

Cdlt.

Option Explicit

Dim ws As Worksheet
Dim lo As ListObject
Dim ACell As Range

Public Sub CreateTable()
Dim dt As Long, lCol As Long, i As Long

    On Error GoTo err_Handler

    Set ws = ActiveSheet

    With ws
        Set ACell = .Cells(2, 1)
        Set lo = .ListObjects.Add(xlSrcRange, ACell.CurrentRegion, , xlNo)
    End With

    With lo
        .Name = "Tableau_Hugues"
        .TableStyle = "TableStyleMedium9"
        dt = Date - (Weekday(Date, 2) - 1)
        .HeaderRowRange(1) = "ID"
        .HeaderRowRange(2) = Format(dt, "m/d/yyyy")
        For lCol = 3 To .ListColumns.Count
            i = i + 1
            .HeaderRowRange(lCol) = Format(dt + 7 * i, "m/d/yyyy")
        Next lCol
    End With

exit_Handler:
    Set ACell = Nothing
    Set lo = Nothing
    Set ws = Nothing
    Exit Sub

err_Handler:
    MsgBox "Un tableau ne peut pas en chevaucher un autre.", vbOKOnly + vbCritical
    Resume exit_Handler

End Sub

Public Sub UnlistTable()

    Set ws = ActiveSheet

    With ws
        Set ACell = .Cells(2, 1)
        If ACell.ListObject.Name = "Tableau_Hugues" Then
        'If Not ACell.ListObject Is Nothing Then
            Set lo = ACell.ListObject
            With lo
                .TableStyle = ""
                .Unlist
            End With
        End If
        .Rows("2:2").Delete Shift:=xlUp
    End With

    Set ACell = Nothing
    Set lo = Nothing
    Set ws = Nothing

End Sub

Bonjour Jean Eric, Bonjour tout le monde,

Jean Eric, de nouveau merci pour ta contribution.

Ton code fonctionne parfaitement. J'ai juste remplacé l'argument Unlist par ConvertToRange qui est l'instruction spécifique MAC.

Je vais donc adapter à ma base réelle.

Je marque donc ce post comme résolu en te remerciant encore une fois Jean Eric

Cordialement

Hugues

Rechercher des sujets similaires à "tete formules donnees forme tableau"