Tableau / Boucle tous les onglets / SI avec date

Bonjour et merci d'avance pour vos futures réponses !

Alors voici mon problème étant un grand débutant dans le monde du VBA...

Je dois réaliser une macro Excel qui dans un premier temps créé pleins d'onglets pour répartir les données d'un fichier brut (donc cela je l'ai fait et ça marche)

Puis il doit supprimer tous les onglets où dans la selection donnée n'a pas de données donc j'ai réussi à trouver cela que j'ai mis dans une boucle (mais elle ne marche pas très bien quand elle arrive au dernier onglet j'ai une erreur et il faut la lancer plusieurs fois pour que ça fonctionne correctement)

   Sub WorksheetLoop()

   ActiveWorkbook.Worksheets("C10").Select

         Dim WS_Count As Integer
         Dim I As Integer

' On enlève les messages d'avertissements
Application.DisplayAlerts = False

         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
         WS_Count = ActiveWorkbook.Worksheets.Count

         ' Begin the loop.
         For I = 1 To WS_Count

ActiveWorkbook.Worksheets(I).Select
         Dim Cell As Range
         Dim Resultat As String

' On reset la variable
Resultat = Empty

For Each Cell In Range("C2:AL500")
If Not Cell = "" Then
Resultat = Resultat & Cell.Address & Chr(10)
End If
Next Cell

If Resultat = "" Then
' Si l'onglet est vide
ActiveWindow.SelectedSheets.Delete
Else
' S'il y a des données dans l'onglet 
Range("C600").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-598]C:R[-1]C)"
    Range("C600").Select
    Selection.AutoFill Destination:=Range("C600:AL600"), Type:=xlFillDefault
    Range("C600:AL600").Select
End If

         Next I

' On remet les messages d'avertissements
Application.DisplayAlerts = True

      End Sub

Mon gros problème c'est que j'aimerai faire la somme des colonnes à la fin de mes fichiers sauf que cette ligne n'est pas fixée, elle est dynamique d'où mon souci.

J'aurai bien souhaité faire une mise en forme de tableau Excel mais je n'arrive pas à le faire avec une sélection dynamique car cela sera plus simple pour moi car je dois créer un onglet supplémentaire qui récapitule les sommes des onglets.

Et dans un second temps, j'aimerai pouvoir faire des SI avec la date du jour, je m'explique j'aimerai dire si la date du jour est septembre alors je supprime cette colonne etc. Quelqu'un pourrait-il m'aiguiller dessus ?

Je vous joins le fichier Excel tel quel je voudrais qu'il ressorte après la macro, n'hésitez pas à me poser des questions si je ne suis pas clair sur certaines points. Encore merci pour votre future aide !

17forum-vba.xlsx (55.99 Ko)

bonjour

sans VBA, avec une mise sous forme de tableau (super pour gérer des tables de données)

oublie les sous-totaux

regarde les formules en jaune jaune, elles se "tirent" vers la droite, et pas besoin de les taper Excel les écrit quand tu sélectionne toute une colonne de la table

elles comprennent si tu ajoutes des lignes à ton tableau

Merci beaucoup pour ta réponse,

mais le problème c'est que sur le vrai fichier il y a des dizaines d'onglets et j'aimerai pouvoir automatiser dans une macro, le fait de créer un tableau comme ça pour les sommes c'est plus facile, mais je ne sais pas comment faire pour lui indiquer de prendre une sélection dynamique (car mon nombre de ligne changera en fonction des fichiers)

Voyez-vous de quoi je veux parler ?

re

les formules de type

=SOMME(Tableau2[Hono_C10_201510])

s'ajustent automatiquement lorsqu'on ajoute des lignes dans le tableau de données Tabaleau2

la formule est dynamique toute seule, sans VBA, ni DECALER, ni rien.

mais le souci c'est que le tableau ne sera pas fait, je veux dire on génère un fichier sans mise en forme à chaque fois et la macro doit créer les tableaux et mettre la ligne de somme,

et le problème c'est qu'en macro ça me met une formule de création en VBA avec des dimension précises pas des dimensions dynamiques, automatiques.

car pour vous expliquer, si on ajoute des lignes c'est via la génération d'un nouveau fichier produit via un script, donc la macro doit juste mettre en forme le fichier

re

enregistre une macro qui "met sous forme de tableau" toute une zone d'une feuille

tu en tires une routine sub

et cette sub tu la mets dans tes macros ( création de fichier + import/collage des données + sub de mise sous forme de tableau + opérations suivantes)

est-ce réalisable ?

le problème c'est qu'il est là mon souci, je n'arrive pas à mettre une range dynamique et à intégrer cela dans une boucle pour le faire pour tous les onglets.

Sub Macro4()
'
' Macro4 Macro
'

'
    Range("A1").Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$AL$362"), , xlYes).Name = _
        "Tableau1"
    Range("Tableau1[#All]").Select
    ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight9"
End Sub

re

pourtant ton

Range("Tableau1[#All]").Select

sélectionne bien le tableau en s'adaptant seul à sa longueur, non ?

Le problème c'est la création des tableaux via la macro :

Range("A1").Select

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$AL$362"), , xlYes).Name = _

On a ici un Range statique : Range("$A$1:$AL$362") or je souhaiterai qu'il soit dynamique

re

trouvé ici

http://www.commentcamarche.net/forum/affich-18351850-vba-excel-selection-d-une-plage-variable

(tu n'as pas le problème du nombre de colonnes variables)

Dim maPlage As Range
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Set maPlage = Range("A1:Z" & DernLigne) 

te permet de désigner ta plage pour ensuite la transformer en tableau

merci beaucoup, j'ai testé ça fonctionne ! mais quelqu'un peut m'indiquer comment mettre ça dans une boucle pour tous les onglets, car le problème c'est le nom "Tableau 1" je ne sais pas si on peut modifier cela pour qu'il incrémente le nom pour chaque onglet ?

   Sub WorksheetLoop()

         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
         WS_Count = ActiveWorkbook.Worksheets.Count

         ' Begin the loop.
         For I = 1 To WS_Count

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$AL$362"), , xlYes).Name = _
"Tableau1"
Range("Tableau1[#All]").Select
ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight9"

         Next 

      End Sub

re

comme ceci ? (faire excel vba boucle onglets dans Google)

http://forum.hardware.fr/hfr/Programmation/VB-VBA-VBS/vba-excel-boucle-sujet_96723_1.htm

Sub mac()
Cells(65536, 256) = "AAA"
End Sub

Sub test()
Dim sh As Worksheet
For Each sh In Sheets
mac
Next sh
End Sub

Non mais la boucle que j'ai est bonne, j'ai réussi à faire la boucle qui permet d'aller dans chaque onglet.

Juste, comment puis-je adapter le code de création de tableau dans cette boucle sachant que lors de la création j'ai un nom fixe "Tableau1" ? Voyez-vous ?

Personne n'a une idée pour incrémenter ce nom statique ? :'(

Rechercher des sujets similaires à "tableau boucle tous onglets date"