Gestions des erreurs

Egruat

XLDnaute Occasionnel
Bonjour,

Voici les actions de ma macro:
. Je demande à l'utilisateur de compléter un formulaire dans lequel il renseigne des champs (Champ1, Champ2, etc...)
. Je vais chercher l'adresse d'un fichier grâce à ces champs, du type C:\Champ1\dossier TEST\Champ2test.xls
Jusque là ok pas de problème.

Mais, si l'utilisateur se trompe et que l'adresse du fichier n'existe pas, j'aimerai gérer l'erreur avec un message MsgBox ("recommencer").

Quelle est la façon la plus simple ? Et où dans la macro doit-on placer cette gestion d'erreur ?

Merci bien !!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Gestions des erreurs

Bonjour Erguat, bonjour le forum,

Peut-être comme ça :
Code:
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
' --> ici, la ligne de code d'ouverture du fichier
If Err <> 0 Then 'condition : si une erreur a été générée
    Err = 0 'annule l'erreur
    MsgBox "Le fichier n'existe pas ! Vérifiez les champs édités." 'message
    'place le curseur dans un champ spécifique pouvant contenir l'ereur (éventuellement)
    Exit Sub 'sort de la procédure
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
'... la suite de ton code
 

Egruat

XLDnaute Occasionnel
Re : Gestions des erreurs

Merci de votre réponse. Mais j'ai plein d'actions à réaliser après le remplissage du questionnaire. Serait-il possible d'avoir un traitement non pas par ligne mais sur l'ensemble de la macro, du type "s'il y a une erreur, alors ..." ??
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Gestions des erreurs

Bonjour Egruat, bonjour le forum,

Le bout de code fourni est assez général comme gestion des erreurs et je trouve cocasse que vous demandiez plus sans même daigner donner le code que vous utilisez. Dans ces condition je vois mal comment on pourrait faire plus...
 

Egruat

XLDnaute Occasionnel
Re : Gestions des erreurs

voici le code. J'ai tenté de faire une gestion d'erreur avec "On Error Goto Erreur" en debut de macro et en fin "Erreur: Msgbox ..." mais le message apparait même s'il n'y a pas d'erreur.

Sub donnees_par_client()

Application.ScreenUpdating = False

On Error GoTo Erreur

' ouvrir le questionnaire
mon_userform.Show

Dim Ws As Worksheet

For Each Ws In Worksheets

If Ws.Name <> "Initial" Then

Ws.Select
Range("D8").Select

' Action en fonction des cases cochées
If Mois < 10 Then
ActiveSheet.PivotTables("TOTCIF").ChangePivotCache ActiveWorkbook.PivotCaches. _
Create(SourceType:=xlDatabase, SourceData:= _
"'G:\TEST\20" & An & "\" & Pays & "\TEST" & Pays & "0" & Mois & An & ".xls'!data", Version:=xlPivotTableVersion10)
Else
ActiveSheet.PivotTables("TOTCIF").ChangePivotCache ActiveWorkbook.PivotCaches. _
Create(SourceType:=xlDatabase, SourceData:= _
"'G:\TEST\20" & An & "\" & Pays & "\TEST" & Pays & Mois & An & ".xls'!data", Version:=xlPivotTableVersion10)
End If

End If

Else

End If

Next Ws

Worksheets("Par client").Select

Erreur:
MsgBox ("Votre SRS de référence n'existe pas. Recommencer")
Worksheets("Initial").Select


End Sub
 

monsac

XLDnaute Nouveau
Re : Gestions des erreurs

Bonjour à tous ! Je profite de cette discussion pour essayer de résoudre un probléme d'erreur dans une des mes macros.
Le code est ci-dessous. En bref j'importe des données depuis plusieurs fichiers sources dans un fichier central (fichier import). Le code fonctionne sauf quand il manque un ou plusieur fichiers sources. Je voudrais que le code puisse fonctionner même s'il manque des fichiers.
J'ai tout essayé mais je n'y arrive pas, il faut qu'en cas d'erreur la macro passe à un autre fichier (Next i) et non à la prochaine ligne du code (Resume Next). De plus :
Code:
On Error GoTo AAA
AAA:
Nexti

ne fonctionne avec qu'une seule erreur ! Quand une seconde apparait cette solution n'est plus valide...
Si quelqu'un à une idée... Merci d'avance !

Code:
Sub Import()
'
' Import Macro
' Pour importer
'
' Touche de raccourci du clavier: Ctrl+Maj+Q
'
'######################################### DECLARATIONS #######################################

Dim xfeuille(3) As String

xfeuille(0) = "REGION1"
xfeuille(1) = "REGION2"
xfeuille(2) = "REGION3"
xfeuille(3) = "REGION4"

Dim nomdufichier As String

For i = 0 To 3


Select Case i

Case 0
nomdufichier = "REGION1.xls"

Case 1
nomdufichier = "REGION2.xls"

Case 2
nomdufichier = "REGION3.xls"

Case 3
nomdufichier = "REGION4.xls"



End Select

'###################################### DEBUT DU CODE ############################################

'Importation des données types 2

Workbooks.Open Filename:="C:\Documents and Settings\monsac\Bureau\TEST\" & nomdufichier 'ERREUR quand fichier absent
Sheets(4).Activate
Range("AZ112:AZ142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("C12").Select
Selection.PasteSpecial Paste:=xlValues

Windows(nomdufichier).Activate
Sheets(4).Activate
Range("BB112:BB142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("E12").Select
Selection.PasteSpecial Paste:=xlValues

Windows(nomdufichier).Activate
Sheets(4).Activate
Range("BD112:BD142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("G12").Select
Selection.PasteSpecial Paste:=xlValues

Windows(nomdufichier).Activate
Sheets(4).Activate
Range("BH112:BH142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("I12").Select
Selection.PasteSpecial Paste:=xlValues

'Importation des données types 8

Windows(nomdufichier).Activate
Sheets(10).Activate
Range("AZ112:AZ142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("K12").Select
Selection.PasteSpecial Paste:=xlValues

Windows(nomdufichier).Activate
Sheets(10).Activate
Range("BB112:BB142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("M12").Select
Selection.PasteSpecial Paste:=xlValues

Windows(nomdufichier).Activate
Sheets(10).Activate
Range("BD112:BD142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("O12").Select
Selection.PasteSpecial Paste:=xlValues

Windows(nomdufichier).Activate
Sheets(10).Activate
Range("BH112:BH142").Select
Selection.Copy
Windows("Import Frais G").Activate
Sheets(xfeuille(i)).Select
Range("Q12").Select
Selection.PasteSpecial Paste:=xlValues

Windows(nomdufichier).Close


Next i

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Gestions des erreurs

Re,

peut être tester au préalable si le fichier existe....
Code:
Dim f As String
f = "C:\Documents and Settings\monsac\Bureau\TEST\" & nomdufichier
If Dir(f) = "" Then MsgBox "fichier inexistant...": Exit Sub
Workbooks.Open Filename:="C:\Documents and Settings\monsac\Bureau\TEST\" & nomdufichier
bon après midi
@+
 

monsac

XLDnaute Nouveau
Re : Gestions des erreurs

Merci Pierrot93. Bonne idée pour le MsgBox... Cela fonctionne sauf que la macro s'arrete en cas d'erreur. Au lieu de Exit Sub dans votre code, est il possible de mettre quelque chose comme :
Then MsgBox "fichier inexistant...": Next i ?
J'ai essayé cela et ca ne marche pas (avec Next i) mais sur le principe existe il un moyen? j'aimerais passer au fichier suivant plutot que de quitter la macro...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Gestions des erreurs

Bonjour le fil, bonjour le forum,

@Monsac, ton code modifié et simplifié (non testé) :
Code:
Sub Import()
'
' Import Macro
' Pour importer
'
' Touche de raccourci du clavier: Ctrl+Maj+Q
'
'######################################### DECLARATIONS #######################################
Dim xfeuille(3) As String
Dim nomdufichier As String

xfeuille(0) = "REGION1"
xfeuille(1) = "REGION2"
xfeuille(2) = "REGION3"
xfeuille(3) = "REGION4"

For i = 0 To 3
    nomdufichier = xfeuille(i) & ".xls"
    
    'Importation des données types 2
   
    On Error Resume Next
    Workbooks.Open Filename:="C:\Documents and Settings\monsac\Bureau\TEST\" & nomdufichier 'ERREUR quand fichier absent
    If Err <> 0 Then
        Err = 0
        GoTo suite
    End If
    On Error GoTo 0
    Sheets(4).Range("AZ112:AZ142").Selection.Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("C12").PasteSpecial Paste:=xlValues
    
    Windows(nomdufichier).Sheets(4).Range("BB112:BB142").Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("E12").PasteSpecial Paste:=xlValues
    
    Windows(nomdufichier).Sheets(4).Range("BD112:BD142").Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("G12").PasteSpecial Paste:=xlValues
    
    Windows(nomdufichier).Sheets(4).Range("BH112:BH142").Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("I12").PasteSpecial Paste:=xlValues
    
    'Importation des données types 8
    
    Windows(nomdufichier).Sheets(10).Range("AZ112:AZ142").Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("K12").PasteSpecial Paste:=xlValues
    
    Windows(nomdufichier).Sheets(10).Range("BB112:BB142").Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("M12").PasteSpecial Paste:=xlValues
    
    Windows(nomdufichier).Sheets(10).Range("BD112:BD142").Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("O12").PasteSpecial Paste:=xlValues
    
    Windows(nomdufichier).Sheets(10).Range("BH112:BH142").Copy
    Windows("Import Frais G").Sheets(xfeuille(i)).Range("Q12").PasteSpecial Paste:=xlValues
    
    Windows(xfeuille(i) & ".xls").Close
    
suite:
Next i
End Sub
 

monsac

XLDnaute Nouveau
Re : Gestions des erreurs

Je comprends mais cela recommence mon code depuis le début ce qui fait tourner la macro en boucle infinie. En fait je souhaiterais que l'erreur du fichier absent soit ignorée et que la macro passe au fichier suivant.
Pour mieux comprendre dans mon vrai code il y a 20 fois plus de fichiers à importer, ceci me sont envoyés par mail et il arrive qu'il manque des fichiers. Entre temps je ne peux pas attendre de tous les recevoir car je dois faire mon reporting à temps, donc je souhaiterais que la macro tourne avec ou sans tous les fichiers. C'est pas évident à mettre en place...
Merci tout de même et bon après midi !
 

monsac

XLDnaute Nouveau
Re : Gestions des erreurs

Merci Robert, c'est exactement ce qu'il me faut cela marche en cas d'erreur, sauf que quand il n'y en a pas le If Then GoTo... entre en action ce qui empeche la macro d'executer les taches de copier/coller... Je ne comprends pas pourquoi puisqu'il n'y a pas d'erreur !!
Faut il rajouter un Else? si oui avec quelle instruction ?
Merci de m'aider !
 

Statistiques des forums

Discussions
312 885
Messages
2 093 259
Membres
105 660
dernier inscrit
moi46