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:
- 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 - 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 - 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 SubDans 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 Subbonjour à 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 SubBonjour à 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.