VBA : Gestion d'erreurs avec If ... Then ... Else

monsac

XLDnaute Nouveau
Bonjour,

N'ayant pas trouvé de réponse sur ce forum et sur le web je pose la question suivante:
Comment résoudre une erreur avec If Then Else sur VBA? Je ne peux pas afficher mon code (confidentiel) mais pour résumer je demande à VBA d'ouvrir une liste de fichiers et de copier des donnees de ces fichiers vers un fichier import. Tous les fichiers sources sont définis (Dim nomdufichier As String, puis définition des i...), bref le code marche parfaitement. Quand il manque un ou plusieurs fichiers je voudrais que VBA puisse sauter l'erreur et passer au fichier suivant il me semble que c'est possible avec If Then Else.
Pour le moment j'utilise ceci mais ca ne marche qu'une seule fois (pas pour plusieurs fichiers absents) :
"On Error GoTo AAA
AAA : Next i"

Pour resumer:
Comment traduire ceci en code? "If (fichier absent) Then (Passer au fichier suivant "Next i"?) Else (Continuer normalement)"

Merci d'avance.
 

Misange

XLDnaute Barbatruc
Re : VBA : Gestion d'erreurs avec If ... Then ... Else

Bonjour

Un code confidentiel ??
Le classeur avec ses données soit mais le code... Tu peux faire un copier coller du code ici (au besoin en changeant le nom des fichiers que tu copies, histoire qu'on ne voit pas que ce sont des dossiers secrets de la DGSE sur les journalistes ;) )
ce sera quand même plus simple de t'aider.
A priori comme Philippe je dirais on error resume next mais attention dans ce cas là tu ne VOIS pas qu'excel a sauté un fichier.
 

monsac

XLDnaute Nouveau
Re : VBA : Gestion d'erreurs avec If ... Then ... Else

Bonjour et merci phlaurent55,

Sur le principe c'est une bonne idée, mais en pratique (avec mon code) ce n'est pas exactement ce que je souhaiterais faire, voici une partie du code pour mieux comprendre:

Code:
Workbooks.Open Filename:="C:\Documents and Settings\monsac\Bureau\TEST\" & nomdufichier
        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
L'erreur intervient à la premiére ligne lorsque le fichier est absent, avec votre solution la premiére ligne sera ignorée, en cas d'erreur, mais la seconde ligne fonctionnera et donc les opérations s'effectueront sur le fichier IMPORT et non sur le fichier SOURCE.

L'idéal, en cas d'absence d'une fichier SOURCE, serait de demander de passer au fichier SOURCE suivant, autrement dit Next i

Cordialement,

Monsac
 

monsac

XLDnaute Nouveau
Re : VBA : Gestion d'erreurs avec If ... Then ... Else

Haha voici une version un peu moins secrete du 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
On Error Resume Next 'CHANGER AVEC IF THEN ELSE???

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

'Importation des données types 2

Workbooks.Open Filename:="C:\Documents and Settings\monsac\Bureau\TEST\" & nomdufichier
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

Merci d'avance!
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : VBA : Gestion d'erreurs avec If ... Then ... Else

Re,

essaie avec les modifs en rouge

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
On Error Goto AAA
Workbooks.Open Filename:="C:\Documents and Settings\monsac\Bureau\TEST\" & nomdufichier
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

AAA:
Next i

End Sub



à+
Philippe
 

monsac

XLDnaute Nouveau
Re : VBA : Gestion d'erreurs avec If ... Then ... Else

Encore une fois merci phlaurent55 mais comme je le disais au début cette discussion,
Code:
On Error GoTo AAA
AAA:
Next i
ne marche que avec qu'une seule erreur, si l'erreur se reproduit plus d'une fois le On Error GoTo ... Next i ne sera plus pris en compte...
 

Si...

XLDnaute Barbatruc
Re : VBA : Gestion d'erreurs avec If ... Then ... Else

salut

et Si... au lieu de gérer les erreurs tu les évitaiss
Code:
Sub Import()
   Dim Nom As String
   Set filesys = CreateObject("Scripting.FileSystemObject")
   For i = 0 To 3
     Nom = "C:\Documents and Settings\monsac\Bureau\TEST\" & _
           Array("REGION1", "REGION2", "REGION3", "REGION4")(i) & ".xls"
     If filesys.FileExists(Nom) Then
            '....................ta suite
     End If
    Next
End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : VBA : Gestion d'erreurs avec If ... Then ... Else

Bonjour à tous.


Une erreur, ça se gère :​
VB:
Sub ProcédureMalFoutue() '...car une ProcédureBienFoutue ne plante pas !
'Déclarations et autres préliminaires :
Dim i&, quelquechose&, u#
    quelquechose = 12
    Randomize
    For i = 1 To quelquechose
        'Code
        On Error GoTo E '... puis la ligne qui coince :
        u = -i / CDbl((Rnd < 0.75)) '(Division par zéro, en moyenne une fois sur quatre)
        On Error GoTo 0
        'Code à ignorer en cas d'erreur :
        'Ceci, par exemple...
        MsgBox "Pas de plantage dans la boucle " & i & "." & vbLf & "u = " & u
R:      'Code à exécuter même en cas d'erreur :
        'Cela...
        '...
        Next
Exit Sub
E:  'Gestion de l'erreur :
    'Bla, bla, bla... Par exemple :
    MsgBox "Ça merde dans la boucle " & i & "." & vbLf & "u = " & u
    'Retour au programme
    Resume R
End Sub
Au besoin, exécuter pas à pas pour voir comment ça marche...​


Bonne nuit.


ROGER2327
#6441


Samedi 21 Gueules 140 (Lavement - Vacuation)
27 Pluviôse An CCXXI, 0,9294h - noisetier
2013-W07-5T02:13:50Z
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 841
dernier inscrit
ferid87