Bonjour,
J'ai mis au point une macro qui copie les fichiers d'un répertoire vers celui du mois suivant.
Normalement le répertoire est vide, mais il peut arriver que le fichier existe déjà et dans ce cas j'aimerais ne pas l'écraser.
Si je met dans mon code DisplayAlerts= False alors il écrase automatiquement, donc je ne n'en veux pas.
Si je ne le met pas, il me previent que le fichier existe et me demande si je veux l'écraser si je réponds non, alors la macro s'arrête et renvoie le message d'erreur '1004 SaveAs a échoué'.
Je peux contourner le problème en entourant cette ligne de on error resume next, on erreur goto 0.
Mais si je le fais je perds la possibilité de voir d'autres erreurs.
Donc ma question est la suivante, est-il possible (et si oui comment) de dire à VBA de passer à ligne suivante uniquement si j'ai répondu non a l'écrasement du fichier ?
Merci d'avance.
Normalement pas besoin du code pour répondre mais dans le doute je le met quand même.
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 Application.EnableEvents = False With ThisWorkbook.Sheets("MAJ") pl = .Range("A1").End(xlDown).Row dl = .Range("A" & pl).End(xlDown).Row For i = pl To dl - 1 If Not (Rows(i).Hidden = True) Then Select Case .Cells(i, 1).Text Case "repertoire" On Error Resume Next MkDir .Cells(i, 2).Text On Error GoTo 0 Case "fichier" Set objWorkbook = Workbooks.Open(.Cells(i, 4), False, True) 'On Error Resume Next objWorkbook.SaveAs .Cells(i, 2).Text 'On Error GoTo 0 If .Cells(i + 1, 1) = "fichier" Or .Cells(i + 1, 1) = "fin" Then objWorkbook.Close True Case "lien" Set objWorkbook_link = Workbooks.Open(.Cells(i, 4), False, False) TabLiaison = objWorkbook.LinkSources(xlExcelLinks) For cmpt = LBound(TabLiaison) To UBound(TabLiaison) If TabLiaison(cmpt) = .Cells(i, 4).Text Then objWorkbook.ChangeLink .Cells(i, 4).Text, .Cells(i, 2).Text, xlLinkTypeExcelLinks Next cmpt objWorkbook_link.Close False If (.Cells(i + 1, 1) = "fichier" Or .Cells(i + 1, 1) = "fin") Then objWorkbook.Close True End Select End If Next i
Partager