XL 2013 Macro - Boucle avec création tableau

maan

XLDnaute Nouveau
Bonjour à tous et merci par avance pour vos futures réponses,

Alors voilà je suis bloqué, je voudrai créer une macro qui met en forme tous les onglets sous forme de tableau Excel (les tableaux pré-enregistrés d'Excel), j'ai bien ma macro pour la boucle et celle pour la création des tableaux, mais le souci c'est que dans la macro de création de tableau le nom est fixe "Tableau1" et je ne sais pas comment modifier cela ou la rendre dynamique pour l'intégrer dans ma boucle.

Voici la macro :


Code:
Sub WorksheetLoop2()


         Dim Current As Worksheet


         For Each Current In Worksheets

Current.Select

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


ActiveSheet.ListObjects.Add(xlSrcRange, maPlage, , xlYes).Name = _
"Tableau1"
Range("Tableau1[#All]").Select
ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight9"
         Next

      End Sub

Encore merci pour vos futures réponses et votre aide !
 

Staple1600

XLDnaute Barbatruc
Re : Macro - Boucle avec création tableau

Bonsoir à tous


maan [Bienvenue sur le forum]
Cela semble bon ainsi modifié, non ?
Code:
Sub WorksheetLoop2_testOK()
Dim maPlage As Range, i As Byte
Dim DernLigne As Long
    For i = 1 To Worksheets.Count
        With Sheets(i)
            DernLigne = .Range("A" & Rows.Count).End(xlUp).Row
            Set maPlage = .Range("A1:Z" & DernLigne)
            .ListObjects.Add(xlSrcRange, maPlage, , xlYes).Name = "Tableau" & i
            .ListObjects("Tableau" & i).TableStyle = "TableStyleLight9"
        End With
Set maPlage = Nothing
Next i
End Sub
 

maan

XLDnaute Nouveau
Re : Macro - Boucle avec création tableau

Bonsoir,

Merci ! Je teste ça dès demain, sinon j'ai fait cette partie de macro pour supprimer les onglets qui sont vides dans la sélection, mais j'ai souvent des soucis avec quand elle arrive à la fin des onglets elle s'arrête et j'ai une fenêtre avec Débogage ou Fin, et puis elle ne fonctionne pas bien, surement un souci dans le reset des variables non ?

Code:
   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
 

Staple1600

XLDnaute Barbatruc
Re : Macro - Boucle avec création tableau

Re

maan
Normalement, ton test devrait être Ok puisque le mien l'est.
PS: pourquoi atteindre demain ?
il suffit de vite fait créer un classeur avec 4,5 feuilles d'y mettre des données en A1:Z15 par exemple puis de lancer ma macro

C'est ce je viens de faire, cela m'a pris 7 minutes pour le moins ;)
 

Staple1600

XLDnaute Barbatruc
Re : Macro - Boucle avec création tableau

Re

Voici ma proposition pour ta deuxième macro
(à tester sur un classeur avec au moins une feuille non vide)
Code:
Sub DeleteEmptyWSH_testOK()
Dim I As Byte
For I = 1 To Worksheets.Count
If Application.CountA(ThisWorkbook.Sheets(I).Range("C2:AL500")) = 0 Then
Application.DisplayAlerts = False
Sheets(I).Delete
Application.DisplayAlerts = True
Else
Sheets(I).Range("C600:AL600") = "=SUM(R[-598]C:R[-1]C)"
End If
Next I
End Sub
NB: test OK sur mon PC (avec Excel 2013)
 

maan

XLDnaute Nouveau
Re : Macro - Boucle avec création tableau

Bonjour tout le monde,

Donc pour la première macro, ça fonctionne parfaitement. Après la plupart du temps ma sélection va de A à AL en terme de colonne, donc j'ai modifié car c'était Z de base, mais je ne sais pas si on peut modifier cela pour que ça soit dynamique ?

Pour la deuxième macro sur la suppression, je n'arrive pas à la faire fonctionner, j'ai "Erreur d'exécution 9 : L'indice n'appartient pas à la sélection" j'ai essayé de modifier le ThisWorkbook.Sheets(I) par Sheets(I) idem. Je ne sais pas si vous avez une idée ?

Encore merci, vous êtes super à me dépanner car le VBA c'est pas mon truc ^^
 

Staple1600

XLDnaute Barbatruc
Re : Macro - Boucle avec création tableau

Bonjour à tous

maan
Si tu lances cette macro dans ton fichier
Le MsgBox affiche quoi ?
Code:
Sub Test()
MsgBox Worksheets.Count
End Sub

PS: ne pas oublier ce point essentiel du message précédent
(à tester sur un classeur avec au moins une feuille non vide)
 
Dernière édition:

maan

XLDnaute Nouveau
Re : Macro - Boucle avec création tableau

Bonjour à tous

maan
Si tu lances cette macro dans ton fichier
Le MsgBox affiche quoi ?
Code:
Sub Test()
MsgBox Worksheets.Count
End Sub

PS: ne pas oublier ce point essentiel du message précédent

j'ai 26 qui s'affiche mais c'est très étrange car avant de lancer ma macro j'ai de base 48 onglets, mais dans les 26 restants j'en ai qui sont vides.

Je vous joins le fichier de base que j'ai après mes macros sur la mise en forme, ici : https://drive.google.com/file/d/0B0d29tvC5NukdTdNdkRCaklGeWc/view?usp=sharing

(car trop gros pour passer via le forum)


Aucune idée pour la sélection automatique des colonnes pour le premier script sinon ? :)
 

Staple1600

XLDnaute Barbatruc
Re : Macro - Boucle avec création tableau

Bonjour à tous

maan
J'ai testé ceci sur ton fichier exemple
Code:
Sub DeleteEmptyWSH_BIS()
Dim ws As Worksheet
MsgBox Worksheets.Count
For Each ws In Worksheets
If Application.CountA(ws.Range("C2:Z46")) = 0 Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
Else
ws.Range("C47:Z47") = "=SUM(R[-45]C:R[-1]C)"
End If
Next
MsgBox Worksheets.Count
End Sub
Au départ j'ai 48 feuilles, après l’exécution de la macro, il en reste 8
Tu es d'accord avec cela ?

Sinon pour dernière question concernant le premier script, je te laisse faire des recherches dans les archives du forum pour trouver des exemples qui t'inspireront à trouver la dernière colonne non vide d'une feuille et ou d'un tableau.

Voir ici pour les recherches
https://www.excel-downloads.com/search/
 

JCGL

XLDnaute Barbatruc
Re : Macro - Boucle avec création tableau

Bonjour à tous,

Fichier du message #8 déposé sur XLD pour que les propositions aient un sens si notre ami décide de supprimer le partage.

A+ à tous
 

Pièces jointes

  • test_exceldownload.xlsx
    329.5 KB · Affichages: 62

maan

XLDnaute Nouveau
Re : Macro - Boucle avec création tableau

Avec ta nouvelle macro ça marche parfaitement :D Encore merci !

Je n'ai pas trouvé d'info sur le net pour cette petite question, je voudrais mettre une ligne de total donc ça j'ai réussi à le faire rentrer dans la boucle pas de souci.
Mais il faut que je mette pour toutes les colonnes le TotalsCalculation en Somme, vous n'auriez pas un moyen de remplacer le nom des colonnes fixes dans la macro pour que je puisse juste mettre colonne C à AL ?

Code:
 Range("Tableau1[[#Totals],[Hono_C10_201510]]").Select
    ActiveSheet.ListObjects("Tableau1").ListColumns("Hono_C10_201510"). _
        TotalsCalculation = xlTotalsCalculationSum
    Selection.AutoFill Destination:=Range( _
        "Tableau1[[#Totals],[Hono_C10_201510]:[Colonne12]]"), Type:=xlFillDefault
 

maan

XLDnaute Nouveau
Re : Macro - Boucle avec création tableau

Bonjour,

Pour ceux que ça peut aider, voilà comment j'ai réussi à me débrouiller :

Code:
Dim WS_Count As Integer
Dim Y As Integer

         WS_Count = ActiveWorkbook.Worksheets.Count
         For Y = 1 To WS_Count

Sheets(Y).ListObjects("Tableau" & Y).ShowTotals = True

For Z = 3 To 38
Sheets(Y).ListObjects("Tableau" & Y).ListColumns(Z). _
        TotalsCalculation = xlTotalsCalculationSum
Next Z

Next Y
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 069
Messages
2 085 040
Membres
102 763
dernier inscrit
NICO26