Bonjour à tous,
Pour les besoins d'une macro, je créée des fichiers et j'exporte une sélection de données à l'intérieur.
Les 3 éléments importants sont :
1) conserver les données
2) conserver les listes de sélection (Validation des données)
3) conserver les formules.
Dans une boucle,
1) je fais un filtre sur un onglet (je propose un morceau du début de la boucle :
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 For i = 0 To nbre_DR DR = tbl(i) SH_RECHARGE.AutoFilterMode = False 'Supprime les filtres SH_RECHARGE.Rows(1).AutoFilter 'Remet les filtres en ligne 1 SH_RECHARGE.Rows(1).AutoFilter Field:=2, Criteria1:=DR 'Après avoir filtré par DR, on va faire une recopie dans l'onglet Tmp 'On vide les données Worksheets("Tmp_Export_VEHICULES").Activate Worksheets("Tmp_Export_VEHICULES").Cells.Clear Worksheets("Tmp_Export_RECHARGE").Activate Worksheets("Tmp_Export_RECHARGE").Cells.Clear
2) je copie colle mes données ainsi filtrées dans un onglet temporaire (je fais cela en 2 temps car en faisant un copier-coller des données visibles, je dois refaire une passe avec les tentatives)
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 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' RECHARGE ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sheets("RECHARGE").Range("A1:" & LetCol_RECHARGE & dernLigne_RECHARGE).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Tmp_Export_RECHARGE").Range("A1") ThisWorkbook.Sheets("RECHARGE").Activate Sheets("RECHARGE").Range("A1:" & LetCol_RECHARGE & dernLigne_RECHARGE).Select Selection.Copy ThisWorkbook.Sheets("Tmp_Export_RECHARGE").Activate Sheets("Tmp_Export_RECHARGE").Range("A1").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ThisWorkbook.Sheets("Tmp_Export_RECHARGE").Activate ActiveSheet.Range("A1").Select
Et ensuite je créée mes fichiers de la façon suivante :
Cette façon de procéder marche assez bien car je conserve listes et formules.
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 With ThisWorkbook .Sheets(Array("CATALOGUE", "GEOSITE", "BUDGET DIR2S", "SD23 IRVE", "Listes", "Tmp_Export_VEHICULES", "Tmp_Export_RECHARGE")).Copy Sheets("Tmp_Export_RECHARGE").Activate Sheets("Tmp_Export_RECHARGE").Name = "RECHARGE" Sheets("Tmp_Export_VEHICULES").Activate Sheets("Tmp_Export_VEHICULES").Name = "VEHICULES" 'On se repositionne au début du fichier sinon on se retrouve tout en bas et on ne voit rien ActiveSheet.Range("A1").Select Application.DisplayAlerts = False If DR <> "" Then ActiveWorkbook.SaveAs _ Filename:=Chemin & "\" & REGION & ".xlsx" Else ActiveWorkbook.SaveAs _ Filename:=Chemin & "\" & "SANS_REGION.xlsx" End If Application.DisplayAlerts = True ActiveWorkbook.Close End With
Mais... je me retrouve devant des situations où je dois désormais revoir ma copie car des formules sont venues s'ajouter et j'ai des éléments qui ne marchent pas bien.
Par exemple, au travers de ces nouvelles formules, dans les fichiers exportés :
Quand je copie mes onglets temporaires et que je les renomme, cela impacte les formules car au moment de la copie, l'onglet n'existe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 =NB.SI.ENS([Schema_Dir_Macro_23_01_2024.xlsm]VEHICULES!$C$2:$C$19974;[Schema_Dir_Macro_23_01_2024.xlsm]RECHARGE!C2)
J'ai essayé différentes idées mais je coince.
Si vous avez des idées pour éviter ce phénomène, une façon plus adaptée de réaliser mes exports, je suis preneur.
Cordialement
Partager