code pour gerer les erreurs

Darnel

XLDnaute Impliqué
Bonjour,

j'ai réaliser un code, mais je me retrouve avec un petit soucis en cas d'erreur :

Ce code enregistre un fichier à un emplacement défini, mais, en cas de fichier portant déjà le même nom dans cet emplacement, j'ai le message : un fichier portant le même nom se trouve à cet emplacement, désirez vous le remplacer : si je met oui, aucun prob
par contre si je met non: le deboggueur s'ouvre car pas pu finir la macro.

je ne sais pas comment faire pour eviter que le deboggueur pointe le bout de son nez

auriez vous un petit bout de code pour que je puisse nommer le fichier de la façon suivante : si pas de fichier : Nom de la fiche avec (1).xls à la fin, si déja, on passe à 2, 3, 4 etc, autant de fois que le fichier existe ...

Grosso modo je pense à un truc genre :
si le fichier NOM1 existe déjà dans l'emplacement, enregistrer le fichier sous NOM2, Si il existe aussi, sous NOM3 etc

Un petit coup de main serait le bienvenu
meric d'avance
 

Jacques87

XLDnaute Accro
Re : code pour gerer les erreurs

Bonjour,

Je te propose d'effectuer une gestion d'erreur en utilisant les instructions :

On Error Resume Next
On Error Goto 0

La première a pour effet de permettre de poursuivre l'exécution à partir de l'instruction qui suit immédiatement celle qui a causé l'erreur d'exécution

La seconde permet de désactiver la gestion d'erreur dans la routine en cours

A toi de voir

Bon courage
 

myDearFriend!

XLDnaute Barbatruc
Re : code pour gerer les erreurs

Bonsoir Darnel, Jacques87,

Une autre façon de faire pour éviter ainsi un gestionnaire d'erreur :
Code:
[SIZE=2][COLOR=NAVY]Public Sub[/COLOR] Sauvegarde()
[COLOR=GREEN]'myDearFriend![/COLOR]
[COLOR=NAVY]Dim[/COLOR] Chemin [COLOR=NAVY]As String[/COLOR], Nom [COLOR=NAVY]As String[/COLOR], Fichier [COLOR=NAVY]As String
Dim[/COLOR] N [COLOR=NAVY]As Byte[/COLOR]
    Chemin = "C:\Temp\"
    Nom = "MonClasseur"
    [COLOR=NAVY]Do[/COLOR]
        Fichier = Chemin & Nom & IIf(N, " (" & [COLOR=NAVY]CStr[/COLOR](N) & ")", "") & ".xls"
        N = N + 1
    [COLOR=NAVY]Loop Until[/COLOR] Dir(Fichier) = ""
    ActiveWorkbook.SaveAs Fichier
[COLOR=NAVY]End Sub[/COLOR]
[/SIZE]
Cordialement,
 

Darnel

XLDnaute Impliqué
Re : code pour gerer les erreurs

Bonjour myDearFriend!


Merci de ta réponse, sans avoir tester, de ce que je comprend ta macro, c'est plus ce que je recherche.
Par contre, puis je integrer le code que tu met là dans une de mes macro (placée dans un module) ou bien il faut obligatoirement que cela soit une Public Sub
sinon, je peux l'appeller dans une autre macro je suppose...
Pour l'instant voilà mon code :
Code:
Sub extraction_fiche()
Application.ScreenUpdating = False
    Dim Nouveaufichier As String
    Dim utilisateur As String
    Nouveaufichier = Range("B5").Value
    utilisateur = Application.UserName
    ActiveSheet.Unprotect
    Sheets("Fichesynthèse").Select
    Sheets("Fichesynthèse").Copy
    ActiveSheet.Shapes("Button 6").Delete
    ActiveSheet.Shapes("Button 8").Delete
    ActiveSheet.Shapes("Button 4").Select
    ActiveSheet.Shapes("Button 4").Delete
    ActiveSheet.Shapes("Button 2").Delete
    ActiveSheet.Shapes("Button 5").Delete
    ActiveSheet.Shapes("Button 9").Delete
    ActiveSheet.Shapes("Button 1").Delete
    ActiveSheet.Shapes("Button 3").Delete
    ActiveSheet.Shapes("Button 10").Delete
    ActiveSheet.Shapes("Button 11").Delete
    Range("A1:H55").Select
    Selection.Copy
    Range("A1:H1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A1").Select
    On Error Resume Next
    ChDir "D:\Documents and Settings\" & utilisateur & "\Desktop"
    ActiveWorkbook.SaveAs Nouveaufichier
    ActiveWorkbook.RunAutoMacros Which:=xlAutoClose
    ActiveWorkbook.Close savechanges:=False
    Windows("Fiche de synthèse V3.1.xls").Activate
    Range("B2").Select
    ActiveSheet.Protect
    MsgBox "la fiche " & Nouveaufichier & " est enregistrée sur votre bureau"
Application.ScreenUpdating = True
End Sub

Comme tu le vois, le but de la manoeuvre est de copier un onglet (valeur et format uniquement), de 'l'enregistrer et le fermer.
Je pense donc qu'en faisant deux macros une qui creer l'onglet l'autre qui l'enregistre et ferme.
Je test
 

myDearFriend!

XLDnaute Barbatruc
Re : code pour gerer les erreurs

Bonsoir Darnel, Jacques87, kiki29, le Forum,

Une suggestion de modification pour ton code :
Code:
[SIZE=2][COLOR=NAVY]Sub[/COLOR] ExtractionFiche()
    Application.ScreenUpdating = [COLOR=NAVY]False
    Dim[/COLOR] Nouveaufichier [COLOR=NAVY]As String
    Dim[/COLOR] utilisateur [COLOR=NAVY]As String[/COLOR]
    Nouveaufichier = Range("B5").Value
    utilisateur = Application.UserName
    Sheets("Fichesynthèse").Copy
    [COLOR=NAVY]With[/COLOR] ActiveSheet
        .Unprotect
        .DrawingObjects.Delete
        .Range("A1:H55").Copy
        .Range("A1:H1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=[COLOR=NAVY]False[/COLOR], Transpose:=[COLOR=NAVY]False[/COLOR]
        .Range("A1").[COLOR=NAVY]Select[/COLOR]
        .Protect
    [COLOR=NAVY]End With
    With[/COLOR] ActiveWorkbook
        .SaveAs Fichier("D:\Documents and Settings\" & utilisateur & "\Desktop", Nouveaufichier)
        .[COLOR=NAVY]Close
    End With[/COLOR]
    Range("B2").[COLOR=NAVY]Select[/COLOR]
    MsgBox "la fiche " & Nouveaufichier & " est enregistrée sur votre bureau"
    Application.ScreenUpdating = [COLOR=NAVY]True
End Sub[/COLOR]

[COLOR=NAVY]Function[/COLOR] Fichier(Chemin [COLOR=NAVY]As String[/COLOR], Nom [COLOR=NAVY]As String[/COLOR]) [COLOR=NAVY]As String[/COLOR]
[COLOR=GREEN]'myDearFriend![/COLOR]
[COLOR=NAVY]Dim[/COLOR] N [COLOR=NAVY]As Byte
    Do[/COLOR]
        Fichier = Chemin & Nom & IIf(N, " (" & [COLOR=NAVY]CStr[/COLOR](N) & ")", "") & ".xls"
        N = N + 1
    [COLOR=NAVY]Loop Until[/COLOR] Dir(Fichier) = ""
[COLOR=NAVY]End Function[/COLOR][/SIZE]
Cordialement,
 

Darnel

XLDnaute Impliqué
Re : code pour gerer les erreurs

bonjour

Merci mDF pour ton aide je verrais ca mercredi car je ne suis pas au bureau pour le tester.
je n'avais pas encore chercher à simplifier le code avec les with mais je vois que tu l'as fais.
Merci encore
Bon week end.
 

Discussions similaires

Réponses
8
Affichages
287

Statistiques des forums

Discussions
312 489
Messages
2 088 854
Membres
103 975
dernier inscrit
denry