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
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 SubBonjour 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