Recherche onglet via VBA et boucle quand feuille non trouvée

Bonjour à tous,

Je souhaiterais optimiser la saisie des congés via un futur userform.

Pour cela, je dispose d'une macro.

Quand je l'active, elle me demande le nom d'un agent (ex : AA) via une message box.

1. Lorsque l'onglet existe, la macro m'envoie directement sur l'onglet demandé (=ça, ça fonctionne)

2. Si l'onglet n'existe pas, la macro fait apparaitre une message box me disant que le nom saisi n'existe pas. (=ça, ça fonctionne)

MAIS, ce que je voudrais faire, c'est qu'après avoir eu ce message d'erreur de saisie, la macro reparte au début et me redemande le nom de l'agent et ainsi de suite jusqu'à avoir un agent qui existe

(oui, on ne sait jamais, il peut y avoir des erreurs de saisie car certains agents ont des noms compliqués)

Savez-vous comment faire ?

Voilà mon code actuel : (+ doc excel en PJ)

Sub lancer_userform()

Dim resultat As String 'définition de la variable
resultat = InputBox("Indiquer nom agent") 'Boite pour saisir le nom de l'agent

On Error GoTo ErrNom 'si erreur recherche, alors ira à ErrNom

If resultat <> "" Then 'Si la valeur est différente de "" , alors on fait ce qui suit :
Sheets(resultat).Select 'affiche la feuille du nom saisi
Dim last_ligne As Long
last_ligne = ActiveSheet.Cells(6, 1).End(xlDown).Row  ' calcul du numéro de la dernière ligne utilisée dans la colonne A (soit la 1ere), 6e ligne
Cells(last_ligne + 1, 1).Activate   '+ 1 pr se placer en dessous  (se place sous la dernière ligne calculée, colonne A)
End If
Exit Sub

ErrNom:
MsgBox ("Le nom saisi n'existe pas")
End Sub

Merci d'avance pour votre aide

11boucle.xlsm (49.58 Ko)

Salut,

essaie ca

Sub lancer_userform()

Dim resultat As String 'définition de la variable

Ma_Boucle:
resultat = InputBox("Indiquer nom agent") 'Boite pour saisir le nom de l'agent

On Error GoTo ErrNom 'si erreur recherche, alors ira à ErrNom

If resultat <> "" Then 'Si la valeur est différente de "" , alors on fait ce qui suit :
Sheets(resultat).Select 'affiche la feuille du nom saisi
Dim last_ligne As Long
last_ligne = ActiveSheet.Cells(6, 1).End(xlDown).Row  ' calcul du numéro de la dernière ligne utilisée dans la colonne A (soit la 1ere), 6e ligne
Cells(last_ligne + 1, 1).Activate   '+ 1 pr se placer en dessous  (se place sous la dernière ligne calculée, colonne A)
End If
Exit Sub

ErrNom:
MsgBox ("Le nom saisi n'existe pas")
GoTo Ma_Boucle
End Sub

m3ellem1, merci pour ta réponse.

Alors la macro me redemande le nom de l'agent mais si je me trompe une nouvelle fois, je passe en bug (erreur d'exécution 9)

Alors après, peut être que ce n'est pas possible...?...

Salut Titamulette,

Salut m3ellem1,

Je suppose qu'il faut vérifier le nom en [A2], sinon adaptation nécessaire.

Sub lancer_userform()

Dim sNom$, iOK%
'
Do While iOK = 0
    sNom = Application.InputBox("Indiquer nom agent", "Recherche") 'Boite pour saisir le nom de l'agent
    If sNom <> "" And sNom <> "Faux" Then
        For x = 1 To Sheets.Count
            If Sheets(x).[A2] = sNom Then
                Sheets(x).Activate
                iOK = 1
            End If
        Next
        If iOK = 0 Then MsgBox "Le nom saisi n'existe pas!", vbInformation + vbOKOnly, "Recherche"
    End If
    If sNom = "Faux" Then iOK = 1
Loop
'
End Sub

A+

8boucle.xlsm (45.92 Ko)
Function FeuilleExiste(FName As String) As Boolean
    On Error Resume Next
    FeuilleExiste = Worksheets(FName).Name = FName
    On Error GoTo 0
End Function

Sub lancer_userform()

Dim resultat As String 'définition de la variable

Do Until FeuilleExiste(resultat)
resultat = InputBox("Indiquer nom agent") 'Boite pour saisir le nom de l'agent

If StrPtr(resultat) = 0 Then Exit Sub

If Not FeuilleExiste(resultat) Then MsgBox ("Le nom saisi n'existe pas")
Loop

Sheets(resultat).Select 'affiche la feuille du nom saisi
Dim last_ligne As Long
last_ligne = ActiveSheet.Cells(6, 1).End(xlDown).Row  ' calcul du numéro de la dernière ligne utilisée dans la colonne A (soit la 1ere), 6e ligne
Cells(last_ligne + 1, 1).Activate   '+ 1 pr se placer en dessous  (se place sous la dernière ligne calculée, colonne A)
Exit Sub

End Sub

curulis57, m3ellem1,

Les 2 versions fonctionnement parfaitement

Un grand merci à vous 2

Par contre, petit souci, quand je fais de fausse saisie pour vérifier, il ne me retrouve plus la dernière ligne, et ce, peut importe la version (curulis57 ou m3ellem1)

J'ai beau chercher, pour l'instant, je ne vois pas d'où ça vient

7boucle.xlsm (58.93 Ko)

Bon, pour le souci de dernière ligne, j'ai finalement utilisé XlUp et non XlDown et ça fonctionne

Rechercher des sujets similaires à "recherche onglet via vba boucle quand feuille trouvee"