VBA erreur de code si fichier n'existe pas
Bonjour à tous,
Pourriez vous me donner un petit coup de pouce pour finaliser cette macro?
Elle plante si le fichier "NomClient2" n'existe pas...
La feuille "NomClient2" est enregistrée dans un dossier puis elle est effacée du classeur.
Ensuite la macro efface la ligne comportant les informations sur la feuille "NomClient2" dans la feuille "SuiviDPA"
Merci pour votre aide
If Not Intersect(Target, Range("D3:D" & Range("D" & Rows.Count).End(xlUp).Row)) Is Nothing Then
NomClient2 = ActiveCell.Offset(0, -2) & " " & Format(ActiveCell.Offset(0, -1), "ddmm") & "_" & ActiveCell.Offset(0, -3)
On Error Resume Next
Application.DisplayAlerts = False
Sheets(NomClient2).Select
Call ExporterFeuille
ActiveSheet.Delete
Sheets("SuiviDPA").Select
ActiveSheet.Rows(ActiveCell.Row).EntireRow.ClearContents
Call TrierList.trisuivi
Range("A1").Select
End IfBonjour,
Activement correspond à quoi ?
En effet si cette cellule active est en colonne A ou B, alors le Offset(0,-2) provoque une erreur car cela sort de la feuille... ou bien mettez la gestion d'erreur au début du code, mais quand on peut on évite cela...
@ bientôt
LouReeD
Salut LouReeD et merci pour ton retour,
ActiveCell concerne la feuille "SuiviDPA"...
La macro fonctionne très bien avec OffSet (0;-2).
Il faudrait vérifier si la feuille "NomClient2" existe. Si elle existe ok la macro fonctionne.
Problème si elle n'existe pas, je souhaiterais juste que la ligne active soit supprimée dans la feuille "SuiviDPA".
J'ai tenté de vérifier si le fichier existe mais la procédure ne se termine pas correctement si le fichier n'existe pas. un fichier excel temporaire s'ouvre je ne sais pas pourquoi...
If Not Intersect(Target, Range("D3:D" & Range("D" & Rows.Count).End(xlUp).Row)) Is Nothing Then
'Dans Feuille SuiviDPA
NomClient2 = ActiveCell.Offset(0, -2) & " " & Format(ActiveCell.Offset(0, -1), "ddmm") & "_" & ActiveCell.Offset(0, -3)
Dim strNomFichier As String
Dim strFichierExiste As String
strNomFichier = ThisWorkbook.Path & NomClient2 '& ".xslx"
strFichierExiste = Dir(strNomFichier)
If strFichierExiste = "" Then
msgBox "Le fichier sélectionné n'existe pas"' alors je supprime juste la ligne active dans suiviDPA
Sheets("SuiviDPA").Select
ActiveSheet.Rows(ActiveCell.Row).EntireRow.ClearContents
Call TrierList.trisuivi
Range("A1").Select
Else
msgBox "Le fichier sélectionné existe"' alors j'exporte la feuille dans un dossier spécifique (Call ExporterFeuille) et je supprime la ligne active dans la feuille "suiviDPA"
Application.DisplayAlerts = False
Sheets(NomClient2).Select
Call ExporterFeuille
ActiveSheet.Delete
Sheets("SuiviDPA").Select
ActiveSheet.Rows(ActiveCell.Row).EntireRow.ClearContents
Call TrierList.trisuivi
Range("A1").Select
End If
End Ifvoila voila
Je poste la macro qui semble fonctionner
Dim Classeur As Workbook
Dim Feuille As Worksheet
For Each Classeur In Workbooks
For Each Feuille In Classeur.Worksheets
If Feuille.Name Like NomClient2 Then
Application.DisplayAlerts = False
Sheets(NomClient2).Select
Call ExporterFeuille
Sheets(NomClient2).Delete
Sheets("SuiviDPA").Select
ActiveSheet.Rows(ActiveCell.Row).EntireRow.ClearContents
Call TrierList.trisuivi
Range("A1").Select
Exit For
End If
Sheets("SuiviDPA").Select
ActiveSheet.Rows(ActiveCell.Row).EntireRow.ClearContents
Call TrierList.trisuivi
Range("A1").Select
Next Feuille, ClasseurBonsoir,
un exemple de fonction qui teste si une feuille existe :
Function TestExist(LeNom As String) As Boolean
Dim Cel As Range
' lmise en place de la gestion d'erreur
On Error Resume Next
' Définir la feuille à traiter
Set Cel = Sheets(LeNom).Range("A1")
' si erreur on vide le journal d'erreur, on passe la fonction à FAUX et on quitte
If Err.Number <> 0 Then Err.Clear: TestExist = False: Exit Function
' sinon on passe la fonction à VRAI
TestExist = True
End FunctionSon principe : on assigne à un objet Range une cellule de la feuille que l'on teste, si cela engendre une erreur alors elle n'existe pas, s'il n'y a pas d'erreur elle existe.
la fonction renvoie soit TRUE soit FALSE.
Un des avantages de cibler directement la feuille avec son nom est que l'on a pas besoin de faire de boucle sur l'ensemble des feuilles.
Le fichier :
@ bientôt
LouReeD