VBA - Faire apparaître un message d'erreur

Fermé
mateo91 Messages postés 13 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 3 juillet 2018 - Modifié le 3 juil. 2018 à 12:27
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 3 juil. 2018 à 18:53
Bonjour,

Je suis en train de créer une macro pour préparer une fichier d'import comptable. J'utilise différentes formules que j'étends dans les colonnes, notamment pour récupérer des informations concernant les dates ou les comptes. Il arrive que la formule donne une réponse #Valeur!.
Dans ma macro je souhaiterai ajouter un contrôle disant qu'il y a une problème dans la colonne des dates, afin que la date soit corrigée avant de continuer la macro.


J'ai essayé un :
 If Is Error ("F:F") then
MsgBox "Problème de date" 
Else 
EndIf


EDIT : Ajout des balises de code

Mais ça ne semble pas fonctionner. Je dois me tromper dans le code.
Merci de votre aide.

Ps : je suis novice :)
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
3 juil. 2018 à 14:09
Bonjour Mateo, bonjour le forum,

Peut-être comme ça :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim C As Range 'déclare la variable C (Cellule)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, "F").End(xlUp).Row 'définit la derniere ligne éditée DL de la colonne F de l'onglet O
O.Range(O.Cells(2, "F"), O.Cells(DL, "F")).Interior.ColorIndex = xlNone 'supprime les éventuelles couleurs de remplissage dans la colonne F
For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
    If IsDate(O.Cells(I, "F")) = False Then 'condition : si la cellule ligne I colonne F n'est pas une date
        MsgBox "Problème de date en F" & I & " ! la cellule sera remplie de rouge." 'message
        O.Cells(I, "F").Interior.ColorIndex = 3 'remplis la cellule de rouge
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub

0
mateo91 Messages postés 13 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 3 juillet 2018
3 juil. 2018 à 16:08
Merci Thautheme pour ta réponse.

Effectivement ça fonctionne bien. Est-ce qu'on aurait un moyen pour que l'utilisateur puisse modifier la date et lancer la suite de la macro ?
Car là quand le message d'erreur apparaît on a pas d'autre choix que cliquer sur OK et modifier la date qu'à la fin de la macro.

Merci
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
3 juil. 2018 à 18:53
Re,

Le code adapté :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim D As Variant 'déclare la variable D (Date)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, "F").End(xlUp).Row 'définit la derniere ligne éditée DL de la colonne F de l'onglet O
For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
    With O.Cells(I, "F") 'prend en compte la cellule ligne I colonne "F"
        If IsDate(.Value) = False Then 'condition : si la cellule ligne I colonne F n'est pas une date
            .Select 'sélectionne la cellule
début: 'étiquette
            .Interior.ColorIndex = 3 'remplis la cellule de rouge
            'ouvre une boîte d'entrée demandant de taper la date
            D = Application.InputBox("Problème de date ! Veuillez entrer une date valide.", "ATTENTION", "jj/mm/aaaa", Type:=2)
            .Interior.ColorIndex = xlNone 'supprime la couleur rouge
            If D = False Then GoTo suite 'si bouton "Annuler", va à l'etiquette "suite"
            If IsDate(D) = False Then GoTo début 'si date invalide, va a l'étiquette "début"
            .Value = DateSerial(Year(D), Month(D), Day(D)) 'renvoie la date dans la cellule
            .NumberFormat = "dd/mm/yyyy" 'définit le format de date dans la cellule
        End If 'fin de la condition
    End With 'fin de la prise en compte de la cellule ligne I colonne "F"
suite: 'étiquette
Next I 'prochaine ligne de la boucle
End Sub

0