VBA - Faire apparaître un message d'erreur

mateo91 Messages postés 13 Statut Membre -  
ThauTheme Messages postés 1564 Statut Membre -
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 :)

2 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. mateo91 Messages postés 13 Statut Membre
       
      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
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    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