Eviter les erreurs !

arc -  
melanie1324 Messages postés 1561 Statut Membre -
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. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  2. arc
     
    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
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    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. arc
       
      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
  4. melanie1324 Messages postés 1561 Statut Membre 156
     
    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. arc
       
      ç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. melanie1324 Messages postés 1561 Statut Membre 156
       
      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. arc
       
      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. melanie1324 Messages postés 1561 Statut Membre 156
       
      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