Eviter les erreurs !

Fermé
arc - 28 août 2013 à 14:41
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 - 29 août 2013 à 10:33
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 !
A voir également:

4 réponses

melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
28 août 2013 à 15:09
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
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
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
28 août 2013 à 15:52
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
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
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par melanie1324 le 28/08/2013 à 17:34
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
ç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
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
29 août 2013 à 09:20
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
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
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
29 août 2013 à 10:33
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