Eviter les erreurs !

Bonjour,

J'ai un petit soucis, je n'arrive pas a contourné des erreurs d'exécution VBA.

Mon code consiste a nommé une feuille à la date voulu.

Mon code est le suivant :

Dim Jour As Date

1       Jour = (InputBox("Selectionner la date de la feuille au format JJ-MM", "DATE DE LA FEUILLE"))

        If Not IsDate(Jour) Then GoTo 1

        Sheets("Feuil1").Copy After:=Sheets(ThisWorkbook.Sheets.Count) 

        Sheets(Sheets.Count).Name = Format(Jour, "dd-mm")


parfois il me met des erreurs pour cause d'incompatibilité ou autre, je voudrais que si une erreurs apparaît a cause de la texte box ou a cause du renommage de ma feuille, automatiquement il reset la macro et la reéxecute du début.

Exemple d'erreur : Inputbox vide, Inputbox contenant une valeur incompatible avec une date (24/24 par exemple, il n'existe pas 24 mois)

J'ai recherché de la documentation avec les "On Error GoTo" ou encore les boucles Do/loop avec les conditions While mais je n'ai pas reussi a rééxecuté mon bout de code quand une erreur survient.

Merci de votre lecture, bonne journée a vous !

4 réponses

  1. Bonjour,

    ton code :

    Sub macrodate()

    Dim Jour As Date
    On Error GoTo 1
    Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))

    If Not IsDate(Jour) Then GoTo 1
    Sheets("Feuil1").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
    Sheets(Sheets.Count).Name = Format(Jour, "dd-mm")
    End

    1
    MsgBox "Attention, vous avez saisi une mauvaise date"

    Resume
    End Sub
    1
    1. C'est EXACTEMENT ce que je voulais, je n'avais pas compris le système de GoTo, je pensais qu'il fallait ciblé le debut de la macro, et non un MsgBox avec un code d'erreur personnalisé !

      C'est vraiment super, seul bémol :
      Si j'ai une feuille nommée 28-08, que je donne comme réponse a mon Inputbox 28-08, le message d'erreur apparaît en boucle et fait planter l'application, obligé d'arrêté le processus ^^.

      Pourquoi ça ?

      Merci beaucoup pour ton aide.
      0
      1. bonjour,

        essaie avec ca :

        Sub macrodate()

        Dim Jour As Date
        Dim a, feuille As Variant

        Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))

        Do While a <> "OK"
        a = "OK"

        If Not IsDate(Jour) Then
        MsgBox "Attention, vous avez saisi une mauvaise date"
        a = "date"
        Else
        For feuille = 1 To Sheets.Count
        If Sheets(feuille).Name = Format(Jour, "dd-mm") Then
        MsgBox " Une feuille se nomme déjà avec la date indiquée !"
        a = "date"
        End If
        Next
        End If

        If a <> "OK" Then
        Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))
        End If

        Loop

        Sheets("Feuil1").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
        Sheets(Sheets.Count).Name = Format(Jour, "dd-mm")

        End Sub
        0
        1. C'est NICKEL, tu as juste oublié le On Error Go To 1 et l'etiquette 1 pour le MsgBox, je les ai ajouté et ça fonctionne a merveille.
          TROP FORT merci beaucoup c'es parfait!

          Dernière chose, je voudrais interdire les lettres dans mon Inputbox, c'est la dernière source d'erreur possible que j'ai pu trouvé, une idée de la methode a utiliser ?
          0
      2. bonjour,

        Sub macrodate()

        Dim Jour As Date
        Dim a, feuille As Variant

        Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))

        Do While a <> "OK"
        a = "OK"

        test= jour

        do while len(test)> 0
        if not isnumeric(left(test,1)) then
        a = "date"
        end if
        test = right(test,len(test)-1)
        loop
        if a = "date"
        MsgBox "Attention, vous avez saisi une mauvaise date"

        else

        If Not IsDate(Jour) Then
        MsgBox "Attention, vous avez saisi une mauvaise date"
        a = "date"
        Else
        For feuille = 1 To Sheets.Count
        If Sheets(feuille).Name = Format(Jour, "dd-mm") Then
        MsgBox " Une feuille se nomme déjà avec la date indiquée !"
        a = "date"
        End If
        Next
        End If
        end if

        If a <> "OK" Then
        Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))
        End If

        Loop

        Sheets("Feuil1").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
        Sheets(Sheets.Count).Name = Format(Jour, "dd-mm")

        End Sub
        0
        1. ça ne fonctionne malheuresement pas, la viariable test n'est pas defini.

          Et il manque toujours le On Error Go To 1 (mais ça c'est pas dure a faire ^^)

          Merci en tous cas.
          0
        2. Je n'avais pas compris une chose.
          Tu ne peux pas interdire la saisie des lettres dans l'inputbox mais si tu saisis des lettres, la gestion d'erreur réagit donc garde ce code :

          Sub macrodate()

          Dim Jour As Date
          Dim a, feuille As Variant
          On Error GoTo 1

          Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))

          Do While a <> "OK"
          a = "OK"

          If Not IsDate(Jour) Then
          MsgBox "Attention, vous avez saisi une mauvaise date"
          a = "date"
          Else
          For feuille = 1 To Sheets.Count
          If Sheets(feuille).Name = Format(Jour, "dd-mm") Then
          MsgBox " Une feuille se nomme déjà avec la date indiquée !"
          a = "date"
          End If
          Next
          End If

          If a <> "OK" Then
          Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))
          End If

          Loop

          Sheets("Feuil1").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
          Sheets(Sheets.Count).Name = Format(Jour, "dd-mm")

          1
          MsgBox "Attention, vous avez saisi une mauvaise date"

          Resume

          End Sub
          0
        3. Ne marche pas non plus, quand je met une date (compatible) il m'affiche un code d'erreur "Vous avez saisi une mauvaise date"
          tampis ^^
          0
        4. alors contente toi de :
          Sub macrodate()

          Dim Jour As Date
          Dim a, feuille As Variant

          Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))

          Do While a <> "OK"
          a = "OK"

          If Not IsDate(Jour) Then
          MsgBox "Attention, vous avez saisi une mauvaise date"
          a = "date"
          Else
          For feuille = 1 To Sheets.Count
          If Sheets(feuille).Name = Format(Jour, "dd-mm") Then
          MsgBox " Une feuille se nomme déjà avec la date indiquée !"
          a = "date"
          End If
          Next
          End If

          If a <> "OK" Then
          Jour = (InputBox("Selectionner la date de la feuille", "DATE DE LA FEUILLE"))
          End If

          Loop

          Sheets("Feuil1").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
          Sheets(Sheets.Count).Name = Format(Jour, "dd-mm")

          End Sub
          0