Vba: Erreur 9 - Indice en dehors de la plage

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
tissot.emmanuel
Le #5088121
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"
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




Jac
Le #5088071
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" %
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"
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








tissot.emmanuel
Le #5085651
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"
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" 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"
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












Publicité
Poster une réponse
Anonyme