Bonjour,
Je dois, chaque mois, à partir d'un fichier, transférer sur d'autres feuilles des données en fonction de critères. Je souhaiterais ainsi créer une macro afin d'automatiser ce process.
Concrètement j'ai une feuille dont le titre est de type "Données [mois] 2009" (j'ai un fichier pour chaque mois: "Données mai 2009" , "Données juin 2009"...) et qui contient des informations sur des clients.
A chaque fois que j'exécute la macro, je souhaiterais, par exemple copier les données des clients vivant à Marseille, Bordeaux ou Nice dans une feuille nommée "REGION SUD" que j'aurai crée et en ayant copié les titres des colonnes de ma feuille "Données [mois] 2009". Et pour vérifier que tout est pris, je voudrais colorer la ligne qui correspond à ma condition.
J'ai tenté certaines choses mais elles ne fonctionnent pas:
1) Je voulais créé une procédure permettant de créer mes onglets et recopier les titres des colonnes de mon fichier source:
-> Sur cette procédure, ma variable "mois", même avec un espace, ne s'ajoute pas au titre et donc m'empêche de reproduire mes titres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Sub InsereFeuille() Classeur = ActiveWorkbook.Name Workbooks(Classeur).Activate mois = InputBox("Mois des données?") Sheets.Add.Move After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "IDF" Sheets.Add.Move After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "REGION SUD" Sheets.Add.Move After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "REGION NORD" Worksheets("BL Clients GS &mois&2010").Activate 'ne marche pas Range(Cells(1, 1), Cells(1, 1).End(xlRight)).Copy 'copie des titres de la feuille For Each feuille In Worksheets If feuille.Name <> "BL Clients GS &mois&2010" Then feuille.Range("A1").PasteSpecial End If Next feuille End Sub
2) Ensuite, je pensais créer une autre procédure où je stockerais dans une table es données correspondant aux villes désirées puis de copier cette table dans la feuille correspondant à la bonne région. Ce que j'ai fait est un peu confus et je me demande s'il ne faut pas faire une fonction:
-> Sur cette procédure, je n'arrive pas à dimensionner ma table, et je ne sais pas si je peux stocker de cette manière.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 Sub Remplir() Call InsereFeuille Worksheets("BL Clients GS &mois& 2010").Activate ReDim Table_IledeF(j, 1) As Double ReDim Table_Nord(j, 1) As Double ReDim Table_Sud(j, 1) As Double n = Range(Cells(2, 1), Cells(2, 1).End(xlDown)) j = 1 For i = 2 To n If Cells(i, 3).Value = "PARIS" Or "VERSAILLES" Or "PANTIN" Then Table_IledeF(j, 1) = Range(Cells(i, 1), Cells(i, 1).End(xlToRight)) Range(Cells(i, 1), Cells(i, 1).End(xlToRight)).Interior.Color = vbRed ElseIf Cells(i, 3).Value = "LENS" Or "LILLE" Then Table_Nord(j, 1) = Range(Cells(i, 1), Cells(i, 1).End(xlRight)) Range(Cells(i, 1), Cells(i, 1).End(xlToRight)).Interior.Color = vbGreen ElseIf Cells(i, 3).Value = "BORDEAUX" Or "MARSEILLE" Or "NICE" Then Table_Sud(j, 1) = Range(Cells(i, 1), Cells(i, 1).End(xlRight)) Range(Cells(i, 1), Cells(i, 1).End(xlToRight)).Interior.Color = vbBlue j = j + 1 End If Next i Worksheets("IDF").Activate y = UBound(Table_IDF) x = LBound(Table_IDF) Range(Cells(2, 1), Cells(x, y)).Value = Table_IledeF Worksheets("REGION SUD").Activate y = UBound(Table_Sud) x = LBound(Table_Sud) Range(Cells(2, 1), Cells(x, y)).Value = Table_Sud Worksheets("REGION NORD").Activate y = UBound(Table_Nord) x = LBound(Table_Nord) Range(Cells(2, 1), Cells(x, y)).Value = Table_Nord End Sub
Merci d'avance pour votre aide
Partager