Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vba: Erreur 9 - Indice en dehors de la plage

3 réponses
Avatar
Jac
Bonjour à tous,

pour toutes les valeurs situées dans la colonne B, à partir de B2, pour
chacune valeur qui ne correspond pas au nom d'une feuille existante, alors
je crée une nouvelle feuille dont le nom sera la valeur en question. Les
valeurs ont des noms compatibles avec ce qu'Excel autorise pour nommer les
feuilles. Donc pas de problème de ce côté là.

Excel crée la première feuille manquante et quand arrive le tour de la
deuxième feuille manquante, j'ai droit à un laconique
Erreur 9 - Indice en dehors de la plage sur la ligne
Sheets(LA_VALEUR).Select

Si je relance la macro, il crée cette feuille et bloque à nouveau sur la
suivante.
Donc la solution est de relancer la macro après chaque création. Mais
j'aimerais quand même comprendre pourquoi il s'arrête à la deuxième création
de feuille, malgré le "On error goto 5" qui devrait éviter toute
interruption.

Merci d'avance à qui voudra bien éclairer ma lanterne.

Jac

Sub CREER_FEUILLES()
Sheets(1).Select
' si la feuille n'existe pas on saute à la ligne 5 : nouvelle feuille
On Error GoTo 5
For Y = 2 To [B65536].End(xlUp).Row
LA_VALEUR = Cells(Y, 2).Value
Sheets(LA_VALEUR).Select
' si la feuille existe alors retour à la feuille 1 pour la suite
GoTo 9
5 'création d'une nouvelle feuille
ActiveWorkbook.Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = LA_VALEUR
9 Sheets(1).Select
Next Y
End Sub

3 réponses

Avatar
tissot.emmanuel
Bonjour,

Lorsque ta premiere erreur se produit, tu rentre dans un bloc de code
destiné à traiter cette erreur. Si une autre erreur se produit pendant ce
traitement c'est la cata, et c'est ce qui se passe quand tu insere ta
gestion d'erreur dans une boucle avec des instructions Goto.

Essaye donc ceci:

Sub CREER_FEUILLES2()
Sheets(1).Select
On Error GoTo ErrH:
For Y = 2 To [B65536].End(xlUp).Row
LA_Valeur = Cells(Y, 2).Value
Sheets(LA_Valeur).Select
Next
Exit Sub
ErrH:
ActiveWorkbook.Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = LA_Valeur
Sheets(1).Select
Resume Next
End Sub

Cordialement,

Manu/

"Jac" a écrit dans le message de news:

Bonjour à tous,

pour toutes les valeurs situées dans la colonne B, à partir de B2, pour
chacune valeur qui ne correspond pas au nom d'une feuille existante, alors
je crée une nouvelle feuille dont le nom sera la valeur en question. Les
valeurs ont des noms compatibles avec ce qu'Excel autorise pour nommer les
feuilles. Donc pas de problème de ce côté là.

Excel crée la première feuille manquante et quand arrive le tour de la
deuxième feuille manquante, j'ai droit à un laconique
Erreur 9 - Indice en dehors de la plage sur la ligne
Sheets(LA_VALEUR).Select

Si je relance la macro, il crée cette feuille et bloque à nouveau sur la
suivante.
Donc la solution est de relancer la macro après chaque création. Mais
j'aimerais quand même comprendre pourquoi il s'arrête à la deuxième
création de feuille, malgré le "On error goto 5" qui devrait éviter toute
interruption.

Merci d'avance à qui voudra bien éclairer ma lanterne.

Jac

Sub CREER_FEUILLES()
Sheets(1).Select
' si la feuille n'existe pas on saute à la ligne 5 : nouvelle feuille
On Error GoTo 5
For Y = 2 To [B65536].End(xlUp).Row
LA_VALEUR = Cells(Y, 2).Value
Sheets(LA_VALEUR).Select
' si la feuille existe alors retour à la feuille 1 pour la suite
GoTo 9
5 'création d'une nouvelle feuille
ActiveWorkbook.Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = LA_VALEUR
9 Sheets(1).Select
Next Y
End Sub




Avatar
Jac
Bonjour Emmanuel,

parfait...

Juste j'ai dû déplacer Sheets(1).Select entre Sheets(LA_Valeur).Select et
Next, sinon le traitement bouclait dans la feuille en cours et non dans la
feuille de données.

Donc si je résume, il faut toujours mettre un traitement d'erreur en dehors
d'une boucle. C'est bien ça ?
Quelle est l'autre erreur qui plantait mon processus ?

Merci encore,

Jac


"tissot.emmanuel" a écrit dans le message de news:
%
Bonjour,

Lorsque ta premiere erreur se produit, tu rentre dans un bloc de code
destiné à traiter cette erreur. Si une autre erreur se produit pendant ce
traitement c'est la cata, et c'est ce qui se passe quand tu insere ta
gestion d'erreur dans une boucle avec des instructions Goto.

Essaye donc ceci:

Sub CREER_FEUILLES2()
Sheets(1).Select
On Error GoTo ErrH:
For Y = 2 To [B65536].End(xlUp).Row
LA_Valeur = Cells(Y, 2).Value
Sheets(LA_Valeur).Select
Next
Exit Sub
ErrH:
ActiveWorkbook.Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = LA_Valeur
Sheets(1).Select
Resume Next
End Sub

Cordialement,

Manu/

"Jac" a écrit dans le message de news:

Bonjour à tous,

pour toutes les valeurs situées dans la colonne B, à partir de B2, pour
chacune valeur qui ne correspond pas au nom d'une feuille existante,
alors je crée une nouvelle feuille dont le nom sera la valeur en
question. Les valeurs ont des noms compatibles avec ce qu'Excel autorise
pour nommer les feuilles. Donc pas de problème de ce côté là.

Excel crée la première feuille manquante et quand arrive le tour de la
deuxième feuille manquante, j'ai droit à un laconique
Erreur 9 - Indice en dehors de la plage sur la ligne
Sheets(LA_VALEUR).Select

Si je relance la macro, il crée cette feuille et bloque à nouveau sur la
suivante.
Donc la solution est de relancer la macro après chaque création. Mais
j'aimerais quand même comprendre pourquoi il s'arrête à la deuxième
création de feuille, malgré le "On error goto 5" qui devrait éviter toute
interruption.

Merci d'avance à qui voudra bien éclairer ma lanterne.

Jac

Sub CREER_FEUILLES()
Sheets(1).Select
' si la feuille n'existe pas on saute à la ligne 5 : nouvelle feuille
On Error GoTo 5
For Y = 2 To [B65536].End(xlUp).Row
LA_VALEUR = Cells(Y, 2).Value
Sheets(LA_VALEUR).Select
' si la feuille existe alors retour à la feuille 1 pour la suite
GoTo 9
5 'création d'une nouvelle feuille
ActiveWorkbook.Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = LA_VALEUR
9 Sheets(1).Select
Next Y
End Sub








Avatar
tissot.emmanuel
Bonjour,

Donc si je résume, il faut toujours mettre un traitement d'erreur en
dehors d'une boucle. C'est bien ça ?


C'est bien ca.

Sub Test()
On Error Goto Erreur:
' Instructions susceptibles de provoquer une l'erreur
Exit Sub
Erreur:
' Instructions de gestion de l'erreur
Resume ' Ou Resume Next pour reprendre l'exécution à l'endroit souhaité
End Sub

Quelle est l'autre erreur qui plantait mon processus ?
Je ne vois rien d'autre qui cloche, mais dans la mesure du possible (cad

presque toujours) ne pas utiliser l'instruction GoTo pour orienter le
déroulement du code.

Bonne journée,

Manu/

"Jac" a écrit dans le message de news:

Bonjour Emmanuel,

parfait...

Juste j'ai dû déplacer Sheets(1).Select entre Sheets(LA_Valeur).Select et
Next, sinon le traitement bouclait dans la feuille en cours et non dans la
feuille de données.

Donc si je résume, il faut toujours mettre un traitement d'erreur en
dehors d'une boucle. C'est bien ça ?
Quelle est l'autre erreur qui plantait mon processus ?

Merci encore,

Jac


"tissot.emmanuel" a écrit dans le message de
news: %
Bonjour,

Lorsque ta premiere erreur se produit, tu rentre dans un bloc de code
destiné à traiter cette erreur. Si une autre erreur se produit pendant ce
traitement c'est la cata, et c'est ce qui se passe quand tu insere ta
gestion d'erreur dans une boucle avec des instructions Goto.

Essaye donc ceci:

Sub CREER_FEUILLES2()
Sheets(1).Select
On Error GoTo ErrH:
For Y = 2 To [B65536].End(xlUp).Row
LA_Valeur = Cells(Y, 2).Value
Sheets(LA_Valeur).Select
Next
Exit Sub
ErrH:
ActiveWorkbook.Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = LA_Valeur
Sheets(1).Select
Resume Next
End Sub

Cordialement,

Manu/

"Jac" a écrit dans le message de news:

Bonjour à tous,

pour toutes les valeurs situées dans la colonne B, à partir de B2, pour
chacune valeur qui ne correspond pas au nom d'une feuille existante,
alors je crée une nouvelle feuille dont le nom sera la valeur en
question. Les valeurs ont des noms compatibles avec ce qu'Excel autorise
pour nommer les feuilles. Donc pas de problème de ce côté là.

Excel crée la première feuille manquante et quand arrive le tour de la
deuxième feuille manquante, j'ai droit à un laconique
Erreur 9 - Indice en dehors de la plage sur la ligne
Sheets(LA_VALEUR).Select

Si je relance la macro, il crée cette feuille et bloque à nouveau sur la
suivante.
Donc la solution est de relancer la macro après chaque création. Mais
j'aimerais quand même comprendre pourquoi il s'arrête à la deuxième
création de feuille, malgré le "On error goto 5" qui devrait éviter
toute interruption.

Merci d'avance à qui voudra bien éclairer ma lanterne.

Jac

Sub CREER_FEUILLES()
Sheets(1).Select
' si la feuille n'existe pas on saute à la ligne 5 : nouvelle feuille
On Error GoTo 5
For Y = 2 To [B65536].End(xlUp).Row
LA_VALEUR = Cells(Y, 2).Value
Sheets(LA_VALEUR).Select
' si la feuille existe alors retour à la feuille 1 pour la suite
GoTo 9
5 'création d'une nouvelle feuille
ActiveWorkbook.Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = LA_VALEUR
9 Sheets(1).Select
Next Y
End Sub