Gestion d'erreur lors de l'utilisation de différent Sub

Bonjour à tous,

J'ai une question sur la manière de gérer des erreurs bloquantes lorsque je lance différent sub via la fonction call.

Mon problème est simple j'ai un fichier excel que je dois ouvrir, retravailler puis à partir de la donnée retravaillé je crée un nouveau fichier.

J'ai donc divisé cela en 3 fonctions distincts:

  1. Ouvrir le fichier
    Sub open_file()
    
    Dim folderpath, source, filename As String
    
    filename = "test"
    
    folderpath = Application.ActiveWorkbook.Path
    source = Dir(folderpath & "\" & filename & "*" & ".*")
    
    If source = "" Then GoTo MissingFile
    
    Workbooks.Open (folderpath & "\" & source), Local:=True
    
    Exit Sub
    
    MissingFile:
    MsgBox ("Aucun fichier contenant le mot " & filename & " detecté")
    
    End Sub
  2. Traiter la donnée
    Sub bascule_churn()
    
    Dim totligne As Integer
    Dim i As Integer
    
    Application.ScreenUpdating = False
    
    totligne = Sheets(1).UsedRange.Rows.Count
    
    Sheets(1).Select
    
        Range("A1:A" & totligne).Select
    
        Selection.Replace What:="""", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
            (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
            Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array( _
            33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), Array(39, 1), _
            Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array(45, 1), Array( _
            46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52, 1), _
            Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1), Array( _
            59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), Array(65, 1), _
            Array(66, 1), Array(67, 1), Array(68, 1)), TrailingMinusNumbers:=True
    
    Sheets.Add(After:=Sheets(1)).Name = "Churnito"
    
    Sheets("Churnito").Cells(1, 1).Value = "Titre"
    Sheets("Churnito").Cells(1, 2).Value = "Description du problème *"
    Sheets("Churnito").Cells(1, 3).Value = "COMPANYID ou Nom du prospect/client/cabinet"
    Sheets("Churnito").Cells(1, 4).Value = "eMail du propsect/client/cabinet"
    Sheets("Churnito").Cells(1, 5).Value = "Type Client / Prospect / Cabinet"
    Sheets("Churnito").Cells(1, 6).Value = "Site web"
    Sheets("Churnito").Cells(1, 7).Value = "Tags Bug, Churn, etc"
    Sheets("Churnito").Cells(1, 8).Value = "eMail de la personne de chez nous"
    
    For i = 2 To totligne
    
    Sheets("Churnito").Cells(i, 1).Value = Sheets(1).Cells(i, 60).Value
    Sheets("Churnito").Cells(i, 2).Value = Sheets(1).Cells(i, 63).Value
    Sheets("Churnito").Cells(i, 3).Value = Sheets(1).Cells(i, 35).Value
    Sheets("Churnito").Cells(i, 5).Value = "client"
    Sheets("Churnito").Cells(i, 6).Value = Sheets(1).Cells(i, 3).Value
    Sheets("Churnito").Cells(i, 7).Value = "churn"
    Sheets("Churnito").Cells(i, 8).Value = "blala@blabla.com"
    Next
    
    Application.ScreenUpdating = True
    
    End Sub
  3. Créer le nouveau fichier et fermer le classeur ouvert dans l'étape 1.
    Sub createfile()
    
    Application.ScreenUpdating = False
    
    Sheets("Churnito").Copy
    ActiveWorkbook.SaveAs filename:=ThisWorkbook.Path & "\Recap Churn.xlsx"
    ActiveWorkbook.Close SaveChanges:=False
    
    ActiveWorkbook.Close SaveChanges:=False
    
    Application.ScreenUpdating = True
    
    End Sub

J'utilise ensuite un 4ie fonction toute basique qui appelle ma fonction 1, puis 2 et enfin 3. via call

Sub basculechurn()

Call open_file
Call bascule_churn
Call createfile

End Sub

Dans ma première fonction j'inclus une vérification sur la présence ou non du fichier qui doit me générer une erreur.

Le problème que je rencontre se situe au niveau de ma quatrième fonction qui se poursuit quoi qu'il arrive dans ma fonction 1 et génère donc une erreur lorsqu'il arrive dans la fonction 2 si le fichier n'a pas été trouvé.

Comment pourrais-je faire en sorte qu'une erreur dans la fonction 1 empêche la suite de se jouer, sans tout regrouper dans la même fonction ?

Bonjour Rigawe,

Tu peux transformer la procédure open_file en fonction renvoyant un boolean qui sera à vrai si le nom de fichier a été trouvé et à faux si le nom de fichier n'a pas été trouvé et dans la 4ème modifie le code pour quitter la procédure si open_file() = False.

J'ai ajouté une mini-mi gestion d'erreur car si le nom du fichier est trouvé cela ne garanti pas à 100% qu'il s'ouvre correctement et si tu ne gères pas à minima les erreurs, la fonction open_file renverrait True et le traitement continuerait.

Function open_file() as Boolean

Dim folderpath, source, filename As String

open_file = false
On Error GoTo MissingFile

filename = "test"

folderpath = Application.ActiveWorkbook.Path
source = Dir(folderpath & "\" & filename & "*" & ".*")

If source = "" Then GoTo MissingFile

Workbooks.Open (folderpath & "\" & source), Local:=True
open_file = True
Exit Sub

MissingFile:
If err.number = 0 Then
   MsgBox ("Aucun fichier contenant le mot " & filename & " detecté")
Else
   MsgBox Err.Number & " : " & Err.Description
   Err.Clear
End If
open_file = false

End Function

//
Sub basculechurn()

if open_file() = false exit sub
Call bascule_churn
Call createfile

End Sub

bonjour à tous,

tu peux aussi simplement mettre une instruction "END" juste avant to end sub dans ta sub open_file()

ub open_file()

Dim folderpath, source, filename As String

filename = "test"

folderpath = Application.ActiveWorkbook.Path
source = Dir(folderpath & "\" & filename & "*" & ".*")

If source = "" Then GoTo MissingFile

Workbooks.Open (folderpath & "\" & source), Local:=True

Exit Sub

MissingFile:
MsgBox ("Aucun fichier contenant le mot " & filename & " detecté")
End
End Sub

Bonjour à vous deux,

Merci pour vos réponses.

Cylfo, j'avoue ne pas avoir pensé à essayer de passer une variable d'un sub à l'autre.

héso4, merci simple et efficasse je ne savais pas que je pouvais pas que je pouvais mettre End comme ca.

Rechercher des sujets similaires à "gestion erreur lors utilisation different sub"