Un code VBA pour copier conditionnellement les données d'une feuille à une autre
Problème
J'ai besoin d'un code VBA capable de copier des données de feuille 1 (données brutes) vers la feuille 2, feuille 3 et ainsi de suite ... en fonction de certaines conditions.
colonne --- A ------------ B ------------ C ------------ D ------ -E
----------- nom ----- lieu ---- société --- pays
----------- name1 ---- AB ------- Nokia ------- USA
----------- nom2 ---- CD ------- Sony -------- Royaume-Uni
----------- nom3 ----- EF ------- LG ----------- INDE
----------- nom4 ----- AB ------ Sony ------ RUSSIE
----------- nom5 ----- AB ------ Sony ------ ALLEMAGNE
----------- name6 ----- CD ------ Nokia ------ INDE
----------- name7 ----- CD ------ Ericsson - Etats-Unis
----------- name8 ----- EF ------ Ericsson ---- RUSSIE
----------- nom9 ----- GH ------ Lenore ----- Royaume-Uni
----------- nom10 --- GH ------- HP --------- INDE
Solution
Vous pouvez utiliser les codes suivants
Sub SplitSheets () Dim DataSht, wsCrit, SplitSht en tant que feuille de calcul Dim lrUnq, lrData, i en tant que long Dim FtrVal en tant que chaîne Application.ScreenUpdating = False Définissez DataSht = Worksheets ("sheet1") 'changez-le en nom de votre feuille de données brutes lrData = DataSht.Range ("a" & Rows.Count) .End (xlUp) .Row, ensemble wsCrit = Worksheets.Add DataSht.Range ("B1: l" & lrData) .AdvancedFilter Action: = xlFilterCopy, _ CopyToRange: = wsCrit .Range ("A1"), Unique: = True lrUnq = wsCrit.Range ("a" & Rows.Count) .End (xlUp) .Row Pour i = 2 à lrUnq FtrVal = wsCrit.Range ("A" & i ) .Value Set SplitSht = Worksheets.Add DataSht.Select 'DataSht.ShowAllData ActiveSheet.AutoFilterMode = False ActiveSheet.Range ("A1: Z" & lrData) .AutoFilter Champ: = 2, Critère1: = FtrVal Plage ("a1") Sélectionnez une plage (Selection, Selection.End (xlToRight)). Sélectionnez une plage (Selection, Selection.End (xlDown)). Sélectionnez Selection.Copy SplitSht.Select Range ("A1"). Sélectionnez ActiveSheet.Paste 'Cells.Select Cells .EntireColumn.AutoFit SplitSht.Name = FtrVal Application.CutCopyMode = False Suivant i App lication.DisplayAlerts = False wsCrit.Delete Application.DisplayAlerts = True .AutoFilterMode = False End Sub
Merci à RWomanizer pour cette astuce.