XL 2010 Création d'une boucle après une macro enregistrée

bagheera

XLDnaute Nouveau
Bonjour à tous,
J'ai besoin de faire un fichier csv contenant les informations de mon tableau avec pour référence de tri le numéro présent dans la colonne C.
Ne sachant pas tous les méandres de la VBA, j'ai fait un enregistrement de macro pour coder mes actions que je dois répéter 185 fois pour ce fichier.
J'ai regardé le code et comme un débutant digne des plus grands, je me suis dit : Plus qu'à prendre le code qui se répète, créer une boucle et c'est fini...
Avez-vous la possibilité de m'expliquer comment créer cette boucle, svp ?
Merci d'avance pour votre aide,
Excellement,
Bagheeera
 

Pièces jointes

  • test.xlsm
    256.2 KB · Affichages: 16

jpb388

XLDnaute Accro
Bonjour à tous
Tu en étais pas loin
VB:
Sub ExportCSV()
' ExportCSV Macro
' Touche de raccourci du clavier: Ctrl+Shift+E
    
    Dim i As Integer
    trier ' on trie 1 fois et pas a chaque tour de boucle
    For i = 0 To Application.WorksheetFunction.Max(Columns(3))
        ActiveSheet.Range("$A$1:$E$11667").AutoFilter Field:=3, Criteria1:=i
        Range("A1").CurrentRegion.Copy
        Workbooks.Add
        With ActiveWorkbook
             .ActiveSheet.Paste
            .SaveAs Filename:=ThisWorkbook.Path & "\Num" & i & ".csv", FileFormat:=xlCSV, CreateBackup:=False
            .Saved = True
            .Close
        End With
   Next i
End Sub

Sub trier()
        With ActiveWorkbook.Worksheets("test").AutoFilter.Sort
            .SortFields.Clear
            .SortFields.Add Range("C1"), xlSortOnValues, xlAscending, xlSortNormal
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
End Sub
 

bagheera

XLDnaute Nouveau
Bonjour,
Merci beaucoup ! Je n'aurais jamais pensé à séparer les deux actions 🤔😁👍

Par contre, cela répond au besoin presque trop littéralement lol... 😅
La macro ne sélectionne pas juste les différentes valeurs de ma colonne C pour en faire des fichiers mais il me fait de nombreux fichiers vides à partir des valeurs intermédiaires de deux valeurs existantes dans la colonne C. 😬

Résultat: cela m'a créé, dans le cas de mon fichier test, un total de 1185 fichiers au lieu des 185 attendus 😱

Une idée pour qu'il ne prenne en compte que les différentes valeurs de ma colonne C ?

Merci encore pour ton temps et ta réactivité !

Bagheera
 

jpb388

XLDnaute Accro
Bonjour
regarde si OK
VB:
Sub ExportCSV()
' ExportCSV Macro
' Touche de raccourci du clavier: Ctrl+Shift+E

'****************************
' Dans Outils, Référence cochez microsoft scripting runtime
'**************************
    Dim i As Integer, Dico As New Dictionary
    Dim Pl As Range, Cel As Range, Lg%
    trier ' on trie 1 fois et pas a chaque tour de boucle
    Lg = Range("C" & Rows.Count).End(xlUp).Row ' dernière ligne
    Set Pl = Range("C2:C" & Lg) ' mise en mémoire + rapide
    For Each Cel In Pl ' met tous les nombres de façon unique
        If Not Dico.Exists(Cel.Text) Then Dico.Add Cel.Text, ""
    Next
    Application.ScreenUpdating = False ' ne met pas tout de suite excel à jour + rapide
    Set Pl = Range("A1:E" & Lg) ' mise en mémoire + rapide
    For i = 0 To Dico.Count - 1
        Application.CutCopyMode = False
        Pl.AutoFilter Field:=3, Criteria1:=Dico.Keys(i)
        Pl.Copy
        Workbooks.Add
        DoEvents
        With ActiveWorkbook
             .ActiveSheet.Paste
            .SaveAs Filename:=ThisWorkbook.Path & "\Num" & Dico.Keys(i) & ".csv", FileFormat:=xlCSV, CreateBackup:=False
            .Saved = True
            .Close
        End With
   Next i
   Application.ScreenUpdating = True
   Range("A1").CurrentRegion.AutoFilter Field:=3
End Sub

Sub trier()
        With ActiveWorkbook.Worksheets("test").Sort ' j'ai oté autofilter
            .SortFields.Clear
            .SortFields.Add Range("C1"), xlSortOnValues, xlAscending, xlSortNormal
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
End Sub
 

bagheera

XLDnaute Nouveau
Tu es un génie !!!
Bon maintenant, il ne me reste plus qu’à comprendre toutes les écritures et leurs actions respectives pour pouvoir les réutiliser sur d’autres macros un jour mais c’est exactement ce qui était recherché !
Mille mercis pour cette aide !!! 🤩
Au final, j’étais très loin de la réponse avec juste l’enregistreur de macro 😅
 

Discussions similaires

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa