Macro Tableau
Bonjour,
Je suis débutante en macro, et j'aimerai créer une macro pour un fichier. Je dois faire un tableau pour chaque mois de l'année (au début du mois) et j'aimerai avoir une macro qui le fait pour moi.
C'est un tableau simple (je suis obligée de passer par un tableau parce que je dois mettre mon fichier Excel dans un Web App, qui gère visiblement mieux les tableaux), avec une mise en forme et qui est vide à la base (à part les entêtes).
Mon problème est qu'à la création d'un nouveau tableau, Excel renomme le tableau tout seul, et donc ma macro n'est plus bonne pour le second tableau (dans le second onglet).
Voilà le code que j'ai jusqu'à maintenant:
Sub tableau()
'
' tableau Macro
'
'
Range("A1").Select
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$R$700"), , xlYes).Name = _
"Tableau1"
ActiveCell.Range("Tableau1[#All]").Select
ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleMedium23"
Range("Tableau1[[#Headers],[Colonne1]] ").Select
End Sub
Est-ce que ma question est claire et est-ce que quelqu'un aurait une piste pour moi?
Merci et bonne journée
Bonjour,
Un fichier exemple serait le bienvenu (exemple de tableau)
Amicalement
Pierrot
Bonjour,
Pas sur d'avoir bien compris.
Essaie ce code et redis moi.
Public Sub Creer_Tableau()
Dim wb As Workbook
Dim ws As Worksheet
Dim lo As ListObject
Dim nbLo As Long
Application.ScreenUpdating = False
Set wb = ActiveWorkbook
For Each ws In wb.Worksheets
For Each lo In ws.ListObjects
nbLo = nbLo + 1
Next lo
Next ws
Set ws = ActiveSheet
Set lo = ws.ListObjects.Add(xlSrcRange, ws.Cells(1).CurrentRegion, , xlYes)
With lo
.Name = "Tableau" & nbLo + 1
.TableStyle = "TableStyleMedium23"
.ListColumns(1).Range.Select
End With
Set lo = Nothing: Set ws = Nothing: Set wb = Nothing
End SubVoila le fichier, ma macro ne fonctionne plus depuis que je l'ai modifié (j'ai supprimé certaines données et certains onglets).
Donc en gros, la feuille est remplie au fur et à mesure du mois.
Moi je dois faire une macro pour faire exactement le même onglet, mais vide, avec les statistiques fonctionnelles en bas du tableau et dans le dernier onglet. (et les 600 lignes c'est normal, le fichier est rempli à la fin du mois t doit être prêt à être rempli jusqu.au bout)
Merci!
Re,
Pour commencer, j'ai revu ton tableau, en ajoutant une ligne de total.
J'ai revu tes formules pour le graphique.
Le tableau est dynamique et se redimensionne tout seul.
Pas besoin de 600 lignes vides.
On se demande de plus l'intérêt du positionnement du graphique en fin de tableau!?
Sinon, si je comprends ton besoin, tu souhaites copier cette feuille (janvier), la renommer, effacer les données du tableau, le renommer (nom?) tout en conservant la mise en forme, les calculs et le graphique.
Si c'est bien cela, redis moi ou précise ta demande.
Cdlt.
Le 600 lignes vides est la parce qu'il y a plusieurs utilisateurs à travailler dans le tableau, et que ces personnes ne connaissent pas Excel et quand elles ajoutent des lignes, les couleurs ne suivent pas etc. Je vois qu'il se redimensionne tout seul la mais quand on va le mettre dans Web App je ne sais pas si ça va fonctionner (certaines fonctionnalités d'Excel n'existent pas dans Web App).
Le graphique en fin de tableau sert à avoir un suivi du mois, je ne comprends pas vraiment ce qui ne va pas avec sa position?
Et c'est exactement ça ma demande
Mon problème (j'y vais par étapes pour le moment parce que j'aime bien comprends ce que je fais) c'est que juste pour copier le tableau dans un nouvel onglet que je renommerai février, la macro ne fonctionne pas parce qu'elle ne veut pas créer un autre Tableau1 vu qu'il en existe déjà un!
Un gros merci pour votre aide
Re,
Une nouvelle proposition à étudier.
ALT F8 puis exécuter la procédure DEMO.
Cdlt.
Option Explicit
Public Sub DEMO()
Dim wb As Workbook
Dim ws As Worksheet
Dim lo As ListObject
Dim Message As String, Title As String, Response As String
Dim nbLo As Long
Message = "Voulez-vous créer une nouvelle feuille?"
Title = "Création nouvelle feuille?"
' Response = nom de la nouvelle feuille
Response = InputBox(prompt:=Message, Title:=Title)
If Response <> "" Then
Set wb = ThisWorkbook
' nbLo = nombre de tableaux dans le classeur
For Each ws In wb.Worksheets
For Each lo In ws.ListObjects
nbLo = nbLo + 1
Next lo
Next ws
Set ws = Worksheets("Modèle")
ws.Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Response
Set lo = ActiveSheet.ListObjects(1)
With lo
' on renomme le nom du tableau
.Name = "Tableau" & nbLo + 1
' si le tableau comporte des données, on les supprime
' et on redimensionne le tableau
If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
End With
Else
Exit Sub
End If
Set lo = Nothing: Set ws = Nothing: Set wb = Nothing
End SubMerci c'est parfait
Je vais y regarder plus en détail pour essayer de comprendre!
Bonne journée!
Jean-Éric, merci, c'est testé et approuvé.
J'ai quelques petites modifications à faire néansmoins, je me demandais si tu pouvais m'aider....
Je dois ajouter du code pour que la nouvelle feuille crée aille directement après la dernière crée. Que je crée "Janvier" et qu'elle se mette juste après la feuille "modèle".
J'aimerai aussi que de base dans ma nouvelle feuille toutes mes lignes soient la. Dans le fond qu'on efface le contenu des cellules mais que le tableau reste. Est-ce que c'est quelque chose de faisable?
Merci et bonne journée!