Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Répéter une macro automatiquement

  • Initiateur de la discussion Initiateur de la discussion Guib's
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Guib's

XLDnaute Nouveau
Bonjour à tous,

J'utilise actuellement une macro me permettant de copier certaines colonnes d'un classeur, de les coller dans un nouveau classeur, de les trier et de supprimer les retour à la ligne. La macro enregistre ensuite le fichier en format texte pour la fusion de données dans Indesign.

Voici le code :

Sub Ref_Service()
ActiveSheet.Range("$A$1:$AK$1224").AutoFilter Field:=23, Criterial:="SADD"
Range("D:G,K:K,L:L,O😛,U:U,V:V,X:X,AA:AB,AD:AD").Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Rows("1:1").Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A2:A240") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("K2:K240") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("J2:J240") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("D2😀240") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange Range("A1:N240")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Cells.Replace What:=Chr(10), Replacement:=" - ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Columns("D😀").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Range("B1").Select
ActiveCell.FormulaR1C1 = "Fin"
ActiveWorkbook.SaveAs Filename:= _
"G:\\SADD.txt" _
, FileFormat:=xlText, CreateBackup:=False
End Sub

J'imagine qu'il y a 1000 façons d'améliorer cette macro mais à mon niveau, je n'ai pas trouvé d'autres méthodes.

Voila ma question :
Je souhaiterais répéter cette macro afin qu'elle fasse le travail pour chaque critère de la colonne, c'est à dire que la macro change automatiquement le critère de filtre et enregistre le document avec le nom du critère.

En clair : faire un changement automatique des lignes :
ActiveSheet.Range("$A$1:$AK$1224").AutoFilter Field:=23, Criterial:="SADD" et :
ActiveWorkbook.SaveAs Filename:= _
"G:\\SADD.txt" _


Je ne peux pas joindre le document Excel car c'est un document de travail et il est confidentiel.

Est ce que cette opération est possible sans passer par x copier coller de la macro en changeant les noms manuellement ?

En vous remerciant grandement de votre aide !
 
Re : Répéter une macro automatiquement

Merci beaucoup pour la réponse. Pourriez-vous me donner quelques détails sur le code à saisir ? Je n'ai que des connaissances extremement basiques en VBA... Merci d'avance ! 🙂
 
Re : Répéter une macro automatiquement

Bonjour

Voir ceci aussi

Code:
Sub Ref_Service()
    x = Array("SADD", "SADD1", "SADD2", "SADD3", "SADD4")
    For i = 0 To 5
        ActiveSheet.Range("$A$1:$AK$1224").AutoFilter Field:=23, Criterial:=x(i)
        Range("D:G,K:K,L:L,O:P,U:U,V:V,X:X,AA:AB,AD:AD").s elect
        Selection.Copy
        Workbooks.Add
        ActiveSheet.Paste
        Rows("1:1").Select
        Application.CutCopyMode = False
        Selection.AutoFilter
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortField s.Clear
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortField s.Add Key:=Range("A2:A240") _
                                                                      , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortField s.Add Key:=Range("K2:K240") _
                                                                      , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortField s.Add Key:=Range("J2:J240") _
                                                                      , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortField s.Add Key:=Range("D2240") _
                                                                      , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").Sort
            .SetRange Range("A1:N240")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Cells.Replace What:=Chr(10), Replacement:=" - ", LookAt:=xlPart, _
                      SearchOrder:=xlByRows, MatchCase:=False
        Columns("D").SpecialCells(xlCellTypeBlanks).Enti reRow.Delete
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "Fin"
        ActiveWorkbook.SaveAs Filename:= _
                              "G:\\" & x(i) & ".txt" _
                              , FileFormat:=xlText, CreateBackup:=False
    Next
End Sub
dans le Array mettre les noms des critères
et dans la boucle for le nombre de critères
Cdlt

RGI
 
Dernière édition:
Re : Répéter une macro automatiquement

Grand merci pour la réponse rapide. Ca fait vraiment plaisir de voir des gens prêts à aider, encore bravo !

Voila, j'ai encore un problème : le code ne fonctionne que pour le premier critère car une fois la première itération réalisée, la macro reste dans le nouveau classeur et le filtre ne fonctionne donc plus. Il faudrait donc un moyen de revenir au classeur de départ une fois l'enregistrement du fichier texte effectué. Y a-t-il une solution à ce problème ?
 
Re : Répéter une macro automatiquement

J'ai rajouté la ligne : Windows("nom du classeur de départ").Activate avant le Next et ça a fonctionné !! Encore merci !!

Encore une petite question qui va probablement compliquer le problème mais sait-on jamais...

En fait, à chaque SADD correspondent plusieurs noms de pôles (Pole1,Pole2,Pole3...). Ce que je souhaiterais faire grâce à la macro est d'enregistrer un fichier texte pour chaque pôle de chaque SADD.... Je sais j'en demande beaucoup mais je saurai me montrer reconnaissant !

En vous remerciant grandement par avance !
 
Re : Répéter une macro automatiquement


pouvez vous éclaircir ?

le pole correspond à quoi ?
vous voulez écrire dans le fichier txt à chaque passage
est-ce celà ?
🙂
 
Re : Répéter une macro automatiquement

En fait, l'agence ou je bosse est divisée en 5 services (SADD, SADD1, SADD2 etc) et chaque service est divisé en pôles (Pole1, Pole2, Pole3 etc...).

Ce que je souhaiterais obtenir au final est un fichier texte par pole de chaque service. Pour cela, je voudrais tout d'abord filtrer le document initial par service, puis pour chaque pole du service, executer l'opération décrite dans la macro. Il y aurait donc une double opération de filtrage.

J'obtiendrais donc plusieurs fichiers : Pole1.txt, Pole2.txt, Pole3.txt etc. correspondant aux noms des poles des services.

Est-ce plus clair ?
 
Re : Répéter une macro automatiquement

donc si je suis
SADD à par ex 3 poles
SADD1 à 5 poles
Etc....
où a--t-on ces données ?
s'il n'existent pas faire soit un tableau soit une feuille nommée (préférences)par exemple
afin de pouvoir recueillir ces données
ensuite de la créer les fichiers suivant cela
RGI
 
Re : Répéter une macro automatiquement

Je sais que ce n'est pas simple à comprendre.

J'ai en fait un fichier contenant 1500 lignes de références répertoriant l'ensemble des projets menés par tous les services. A partir de ce document principal, je souhaite créer un ensemble de petits classeurs ne contenant que les données d'un pôle de chaque service.

Par exemple : SADD est divisé en Pôle1, Pôle2, Pôle3 et SADD1 est divisé en Pôle4, Pôle5.

Je souhaiterais obtenir au final les fichiers Pole1.txt, Pole2.txt, Pole3.txt, Pole4.txt et Pole5.txt ne contenant que les données les concernant, mais cela paraît assez difficile à mettre en place semble-t-il...

Merci en tout cas du temps passé à me répondre ! 🙂
 
Re : Répéter une macro automatiquement

Pour info, j'ai trouvé une solution. En fait, j'ai créé une macro par service qui reprend le code montré ci-dessus mais en remplacant le nom des services par le nom des pôles, et j'ai ensuite créé une macro lançant l'ensemble des macros l'une après l'autre.

Sub go()
Macro1
Macro2
Macro3
Macro4
End sub

Voili voila ! Encore merci pour votre aide !!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
502
Réponses
17
Affichages
1 K
Réponses
6
Affichages
1 K
Réponses
11
Affichages
839
Réponses
1
Affichages
858
Réponses
1
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…