VBA - Message d'alerte et d'erreur

Bonjour,

La procédure ci-dessous - sur la base d’une date inscrite dans une InputBox - ouvre normalement le classeur du mois précédent.

Mais si ce classeur n’existe pas, la procédure se bloque bien entendu et la dernière ligne de mon code se met en surbrillance.

Il serait alors intéressant :

1 qu’un message d’erreur apparaisse dans une MsgBox en indiquant que la date entrée est peut-être erronée ou que cette feuille n’existe pas et

2 qu’en cliquant sur « Réessayer », on puisse indiquer une autre date (avec un retour au point 1 ci-dessus si la nouvelle date inscrite ne passe toujours pas) ou qu’en cliquant sur « Annuler », la procédure s’arrête.

Il y a déjà un premier contrôle en place afin de s’assurer que le format de la date inscrite soit correct.

Pouvez-vous m’aider à résoudre ce problème ?

Sub Recherche_FichierMoisPrécédent_CopierFeuille_RefermerFichierMoisPrécédent()

Dim v_date, v_mois
Dim DV As String

'   Ouvre automatiquement le fichier du mois précédent,
'   enregistre le nom de ce fichier afin de le refermer ci-après,
'   copie et transfert la feuille des données du mois passé dans ce fichier,
'   referme le fichier du mois précédent et renomme la feuille déplacée

'           pour ouvrir le fichier du mois précédent

        Dim message As String, title As String, default As String, Date_décompte As String

        Dim annee1 As String 

        Application.ScreenUpdating = False

chemin = "C:\Users"

retour:
    DV = InputBox("Décompte du JJ.MM.AAAA ?")
    Date_décompte = DV 
    If DV = "" Then Exit Sub
    If Not (DateValide(DV)) Then
        MsgBox "Date non valable": GoTo retour
    Else
    End If

        vmois = Left(Date_décompte, 2)
        annee = Right(Date_décompte, 4)
        Select Case vmois
            Case "0" & 2 To 10
            vmois1 = "0" & vmois - 1
            annee1 = annee 
            Case Is = "0" & 1
            vmois1 = 12
            annee1 = annee - 1
            Case Is > 10
            vmois1 = vmois - 1
            annee1 = annee 
            Case ""
            Exit Sub
        End Select
        Workbooks.Open Filename:=chemin & "\" & annee1 & "_" & vmois1 & "_Impôt" & ".xls"

.................................................(code exécutant d'autres opérations)

End Sub

bonjour,

à voir :

On Error GoTo Fin
Workbooks.Open Filename:=chemin & "\" & annee1 & "_" & vmois1 & "_Impôt" & ".xls"
Fin:
MsgBox (" le fichier n'existe pas")
Exit Sub

amicalement

Claude.

Claude,

J’ai testé ton code, mais ça ne correspond pas vraiment à ce que je pensais.

Tout d’abord le message « Le fichier n’existe pas » apparaît à chaque fois, même si le fichier existe. Dans ce dernier cas, la procédure continue malgré tout normalement après avoir cliqué sur « OK » ou sur la croix en haut à droite.

Au cas où le fichier n’existe vraiment pas, une autre fenêtre s’ouvre et demande « Voulez-vous enregistrer les modifications …. ».

Là, si je clique « Non », à la limite se serait acceptable : car le fichier n’est au moins pas touché (puisqu’en fait la macro est lancée dès l’ouverture du fichier). Par contre si je clique « Oui », « Annuler » ou sur la croix, une partie de la macro est (ou a déjà) été lancée et des résultats bizarres apparaissent.

Il n’y a pas non plus la possibilité de « Réessayer », ce qui est un peu embêtant.

Mais merci quand même pour cette tentative.

J’espère donc toujours obtenir de l’aide de la part du Forum.

Bonjour le Forum,

Selon mon dernier message, j'espère toujours obtenir votre aide afin de résoudre ce problème.

Bonne fin de semaine.

Bonjour,

A première vue, le code de Dubois semble bon. Le tout serait de voir comment tu l'as placé dans ta procédure. est)ce comme ceci :

........
On Error GoTo Fin 
Workbooks.Open Filename:=chemin & "\" & annee1 & "_" & vmois1 & "_Impôt" & ".xls" 
...............le reste de ton code

Exit Sub
Fin: 
MsgBox (" le fichier n'existe pas") :End
End sub

A te relire

Dan

Bonjour Dan,

Merci infiniment pour ta réponse.

Avec ta proposition, le message d’erreur « Le fichier n’existe pas » n’apparaît que si ce fichier n’existe réellement pas ; c’est donc déjà un grand pas en avant.

Comme je l’ai indiqué dans ma première demande, ce serait alors bien que l’utilisateur puisse tenter un nouvel essai – au cas où il se serait trompé – c’est pourquoi j’avais indiqué qu’un bouton « Réessayer » et le code qui va avec seraient fort utiles. Le texte du bouton serait aussi modifié en conséquence : « Le fichier n’existe pas ou vous avez indiqué une fausse date ».

Si l’utilisateur ne s’est pas trompé et que le fichier n’existe vraiment pas, ce serait alors intéressant - par exemple - que le fichier se referme sans être enregistré de manière à ce que l’utilisateur ait le temps de chercher pourquoi le fichier attendu n’existe pas.

Une telle possibilité existe-t-elle ?

Re,

Lorsque tu parles d'un pb de date, n'oublie pas que tu as déjà un contrôle dans les instructions après l'instruction RETOUR.

Sinon essaye ce code ;

  • Au début de macro, mets --> DIM i as byte
  • Avant l'instruction RETOUR, mets --> i = 1
  • Après l'instruction FIN mets le code ci-après
If i = 2 Then
MsgBox (" le fichier n'existe pas"): End
Else:
Dim msg As String, style As String, title As String
Dim answer As Integer
msg = "Le fichier n’existe pas ou vous avez indiqué une fausse date"
style = vbOKCancel + vbInformation
answer = MsgBox(msg, style, title)
If answer = vbOK Then
i = i + 1
Resume retour
Else: End
End If
End If
End sub

Amicalement

Dan

Dan,

Merci infiniment pour ton aide.

Le code que tu m'as proposé fonctionne à merveille, à un petit détail près. Je pourrais alors m'en contenter et inscrire le message suivant dans la deuxième MsgBox qui apparaît :

  • "Veuillez refermer ce fichier SANS EN ENREGISTRER LES MODIFICATIONS et rechercher pourquoi le fichier du mois précédent n'est pas disponible"

Toutefois, comme il vaudrait mieux que les utilisateurs ne puissent pas intervenir sur ce fichier, n'est-il pas possible d'indiquer plutôt le message :et que ce fichier se referme effectivement ?

J'ai essayé de placer

ThisWorkbook.Close 

à divers endroits, mais ça ne fonctionne nulle part.

Dans une utilisation normale, ce fichier est automatiquement enregistré plus loin sous un autre nom et refermé sans qu'aucune modification n’y soit possible.

Bonnes salutations.

bonjour,

Dans ta macro,

ferme sans enregistrer et sans message.

Workbooks("NomFichier.xls").Close False

Claude.

re,

Oui tu mets ton message à cet endroit de la macro

If i = 2 Then 
MsgBox "Le fichier du mois précédent n'est pas disponible ; veuillez en chercher la cause avant un nouvel essai. CE FICHIER VA SE REFERMER AUTOMATIQUEMENT": Thisworkbook.close 

Amicalement

Dan

Salut Dan, Salut Claude,

Merci à tous deux de vous être intéressés à mon problème.

Je n'ai pas testé la proposition de Claude car elle semble absolument identique à celle de Dan, si ce n'est que je ne saurais pas où placer ce code autre part que ce que propose Dan.

Avec ta proposition Dan, le fichier se ferme bien, mais il y a malgré tout cette fenêtre qui demande si l'on veut enregistrer les modifications.

N'est-ce pas possible de passer à pieds-joints par dessus cette fenêtre et de fermer ce fichier irrémédiablement et sans conditions ?

re,

au même endroit derière close, tu ajoute :le False

ThisWorkbook.Close False

ou

ThisWorkbook.Close SaveChanges:=False

Claude.

re,

Ou tu prends la solution de Dubois ou tu mets après le message ->

Application.DisplayAlerts = False : Thisworkbook.close : End

Amicalement

Dan

Mais, ma parole ! Personne ne suit la finale de l'Euro ou bien quoi ?

Claude, je suis désolé, je n'avais pas vu ce petit bout de code supplémentaire dans ta solution. Sinon je l'aurais essayée aussi et j'aurais pu répondre tout de suite que ça correspondait parfaitement à mon attente.

Dan, j'ai entre temps reçu la réponse de Claude et je choisis donc sa solution puisqu'elle fonctionne.

Merci à tous deux pour votre assistance géniale.

Meilleures salutations.

Rechercher des sujets similaires à "vba message alerte erreur"