GNT sans publicité, site mobile, fonctionnalitées exclusives...

Erreur 9 : l'indice n'appartient pas à la sélection

Le
PYR
Bonsoir à tous,
Venant, il y a peu de temps, de me mettre au VBA sur Excel, j'ai un cas qui
me tracasse.
Je viens donc vous le soumettre à votre sagacité car je ne vois pas la
solution bien qu'ayant tout bien fait comme dit la documentation ou suite à
recherches sur internet.
J'ai joint mon code apuré au minimum pour la compréhension.

L'idée générale :
J'ai une liste de fichiers à traiter.
Chaque fichier est ouvert, j'en tire un nom de base.
Chaque base doit correspondre à un onglet.
S'il existe, j'y accède et je poursuis mon traitement.
S'il n'existe pas, je crée l'onglet et je fais comme la ligne ci-dessus
Pour savoir si l'onglet existe, je fais d'office un
'Worksheets(Base).Activate'
Si j'ai une erreur, c'est signe de l'absence donc je dois aller dans la proc
GestionOnglet qui va me le créer.
J'ai donc initialisé un 'On Error GoTo GestionOnglet et suite au retour de
la gestion de l'erreur, un 'On Error GoTo 0'.

Lors de l'exécution, je tombe en erreur sur la ligne
'Worksheets(Base).Activate' avec le code "Erreur 9 : l'indice n'appartient
pas à la sélection" alors que justement tout est fait pour qu'il aille en
gestionOnglet et là il n'y va pas.
Quelque'un aurait-il l'explication à mon problème?
Et pourquoi pas, une autre méthode de test de présence d'un onglet ?
-
Private Sub Traitement()
Dim NomFichierEntreeTXT As String, LigneLue As String, Base As String,
Objet, Fichier
NomFichierEntreeTXT = Dir("*TOTO*.TXT", vbNormal)
Do While NomFichierEntreeTXT <> ""
Set Fichier = Objet.OpenTextFile(NomFichierEntreeTXT, 1, -2)
LigneLue = Fichier.ReadLine
Base = Trim(Mid(LigneLue, 9, 90))
On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0
.
.
.
Loop
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub

GestionOnglet:
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
Resume Next
End Sub


En vous remerciant par avance
Lire les 13 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #6755531
Remplace ceci

On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0

Par

On Error Resume next
Worksheets(Base).Activate
if err <>0 then
err=0
GestionOnglet:
end if



"PYR"
Bonsoir à tous,
Venant, il y a peu de temps, de me mettre au VBA sur Excel, j'ai un cas qui
me tracasse.
Je viens donc vous le soumettre à votre sagacité car je ne vois pas la
solution bien qu'ayant tout bien fait comme dit la documentation ou suite à
recherches sur internet.
J'ai joint mon code apuré au minimum pour la compréhension.

L'idée générale :
J'ai une liste de fichiers à traiter.
Chaque fichier est ouvert, j'en tire un nom de base.
Chaque base doit correspondre à un onglet.
S'il existe, j'y accède et je poursuis mon traitement.
S'il n'existe pas, je crée l'onglet et je fais comme la ligne ci-dessus
Pour savoir si l'onglet existe, je fais d'office un
'Worksheets(Base).Activate'
Si j'ai une erreur, c'est signe de l'absence donc je dois aller dans la proc
GestionOnglet qui va me le créer.
J'ai donc initialisé un 'On Error GoTo GestionOnglet et suite au retour de
la gestion de l'erreur, un 'On Error GoTo 0'.

Lors de l'exécution, je tombe en erreur sur la ligne
'Worksheets(Base).Activate' avec le code "Erreur 9 : l'indice n'appartient
pas à la sélection" alors que justement tout est fait pour qu'il aille en
gestionOnglet et là il n'y va pas.
Quelque'un aurait-il l'explication à mon problème?
Et pourquoi pas, une autre méthode de test de présence d'un onglet ?
----------------------------------------------------------------------------------------------
Private Sub Traitement()
Dim NomFichierEntreeTXT As String, LigneLue As String, Base As String,
Objet, Fichier
NomFichierEntreeTXT = Dir("*TOTO*.TXT", vbNormal)
Do While NomFichierEntreeTXT <> ""
Set Fichier = Objet.OpenTextFile(NomFichierEntreeTXT, 1, -2)
LigneLue = Fichier.ReadLine
Base = Trim(Mid(LigneLue, 9, 90))
On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0
.
.
.
Loop
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub

GestionOnglet:
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
Resume Next
End Sub
---------------------------------------------------------------------------------------------------

En vous remerciant par avance
PYR
Le #6755521
Merci MichDenis de t'occuper de mon cas.
J'ai effectué ton remplacement et je plante de la même manière.
Err vaut bien 9 après la tentative 'Worksheets(Base).Activate'

On dirait que l'instruction précédente 'On Error Resume Next', gestionnaire
de l'erreur, n'est pas prise en compte ...


"MichDenis" news:%
Remplace ceci

On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0

Par

On Error Resume next
Worksheets(Base).Activate
if err <>0 then
err=0
GestionOnglet:
end if



"PYR"
Bonsoir à tous,
Venant, il y a peu de temps, de me mettre au VBA sur Excel, j'ai un cas
qui
me tracasse.
Je viens donc vous le soumettre à votre sagacité car je ne vois pas la
solution bien qu'ayant tout bien fait comme dit la documentation ou suite
à
recherches sur internet.
J'ai joint mon code apuré au minimum pour la compréhension.

L'idée générale :
J'ai une liste de fichiers à traiter.
Chaque fichier est ouvert, j'en tire un nom de base.
Chaque base doit correspondre à un onglet.
S'il existe, j'y accède et je poursuis mon traitement.
S'il n'existe pas, je crée l'onglet et je fais comme la ligne ci-dessus
Pour savoir si l'onglet existe, je fais d'office un
'Worksheets(Base).Activate'
Si j'ai une erreur, c'est signe de l'absence donc je dois aller dans la
proc
GestionOnglet qui va me le créer.
J'ai donc initialisé un 'On Error GoTo GestionOnglet et suite au retour de
la gestion de l'erreur, un 'On Error GoTo 0'.

Lors de l'exécution, je tombe en erreur sur la ligne
'Worksheets(Base).Activate' avec le code "Erreur 9 : l'indice n'appartient
pas à la sélection" alors que justement tout est fait pour qu'il aille en
gestionOnglet et là il n'y va pas.
Quelque'un aurait-il l'explication à mon problème?
Et pourquoi pas, une autre méthode de test de présence d'un onglet ?
----------------------------------------------------------------------------------------------
Private Sub Traitement()
Dim NomFichierEntreeTXT As String, LigneLue As String, Base As String,
Objet, Fichier
NomFichierEntreeTXT = Dir("*TOTO*.TXT", vbNormal)
Do While NomFichierEntreeTXT <> ""
Set Fichier = Objet.OpenTextFile(NomFichierEntreeTXT, 1, -2)
LigneLue = Fichier.ReadLine
Base = Trim(Mid(LigneLue, 9, 90))
On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0
.
.
.
Loop
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub

GestionOnglet:
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
Resume Next
End Sub
---------------------------------------------------------------------------------------------------

En vous remerciant par avance




MichDenis
Le #6755901
Je fais référence à quelque chose dans le genre ou
GestionOnglet est une procédure et non une référence
à une erreur.

Il ne te reste plus qu'à mettre ceci dans ta boucle.


Private Sub Traitement()
Dim Base As String
Base = "Feuil4" 'Pour les besoins de l'exemple.
On Error Resume Next
Worksheets(Base).Activate
If Err <> 0 Then
Err = 0
GestionOnglet Base
End If
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub
End Sub

'---------------------------------
Sub GestionOnglet(Base As String)
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
End Sub
'---------------------------------



"PYR"
Merci MichDenis de t'occuper de mon cas.
J'ai effectué ton remplacement et je plante de la même manière.
Err vaut bien 9 après la tentative 'Worksheets(Base).Activate'

On dirait que l'instruction précédente 'On Error Resume Next', gestionnaire
de l'erreur, n'est pas prise en compte ...


"MichDenis" news:%
Remplace ceci

On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0

Par

On Error Resume next
Worksheets(Base).Activate
if err <>0 then
err=0
GestionOnglet:
end if



"PYR"
Bonsoir à tous,
Venant, il y a peu de temps, de me mettre au VBA sur Excel, j'ai un cas
qui
me tracasse.
Je viens donc vous le soumettre à votre sagacité car je ne vois pas la
solution bien qu'ayant tout bien fait comme dit la documentation ou suite
à
recherches sur internet.
J'ai joint mon code apuré au minimum pour la compréhension.

L'idée générale :
J'ai une liste de fichiers à traiter.
Chaque fichier est ouvert, j'en tire un nom de base.
Chaque base doit correspondre à un onglet.
S'il existe, j'y accède et je poursuis mon traitement.
S'il n'existe pas, je crée l'onglet et je fais comme la ligne ci-dessus
Pour savoir si l'onglet existe, je fais d'office un
'Worksheets(Base).Activate'
Si j'ai une erreur, c'est signe de l'absence donc je dois aller dans la
proc
GestionOnglet qui va me le créer.
J'ai donc initialisé un 'On Error GoTo GestionOnglet et suite au retour de
la gestion de l'erreur, un 'On Error GoTo 0'.

Lors de l'exécution, je tombe en erreur sur la ligne
'Worksheets(Base).Activate' avec le code "Erreur 9 : l'indice n'appartient
pas à la sélection" alors que justement tout est fait pour qu'il aille en
gestionOnglet et là il n'y va pas.
Quelque'un aurait-il l'explication à mon problème?
Et pourquoi pas, une autre méthode de test de présence d'un onglet ?
----------------------------------------------------------------------------------------------
Private Sub Traitement()
Dim NomFichierEntreeTXT As String, LigneLue As String, Base As String,
Objet, Fichier
NomFichierEntreeTXT = Dir("*TOTO*.TXT", vbNormal)
Do While NomFichierEntreeTXT <> ""
Set Fichier = Objet.OpenTextFile(NomFichierEntreeTXT, 1, -2)
LigneLue = Fichier.ReadLine
Base = Trim(Mid(LigneLue, 9, 90))
On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0
.
.
.
Loop
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub

GestionOnglet:
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
Resume Next
End Sub
---------------------------------------------------------------------------------------------------

En vous remerciant par avance




PYR
Le #6761861
Bonjour.

Après essai de la nouvelle possibilité, toujours le plantage sur
Worksheets(Base).Activate, le passage à l'instruction 'If Err <> 0 Then' ne
se réalise pas.
Je ne comprends vraiment pas pourquoi cela ne veut pas s'exécuter !!!

Je vais être obligé de voir avec une boucle de parcours des onglets
existants.
Je pensais qu'il y avait une méthode plus rapide mais comme elle ne
fonctionne pas ...

A moins que cela marcherait avec une autre instruction que le activate (par
exemple, création d'une feuille, puis la renommer, et si le nom existe déjà
cela plantera peut être et la gestion de l'erreur marchera.

Maintenant, s'il existe dans les esprits de ce forum, d'autres idées pour
détecter l'absence ou la présence d'un onglet d'après un nom donné, je suis
forcément preneur.

Merci pour les contributions passées et à venir


"MichDenis" news:%
Je fais référence à quelque chose dans le genre ou
GestionOnglet est une procédure et non une référence
à une erreur.

Il ne te reste plus qu'à mettre ceci dans ta boucle.


Private Sub Traitement()
Dim Base As String
Base = "Feuil4" 'Pour les besoins de l'exemple.
On Error Resume Next
Worksheets(Base).Activate
If Err <> 0 Then
Err = 0
GestionOnglet Base
End If
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub
End Sub

'---------------------------------
Sub GestionOnglet(Base As String)
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
End Sub
'---------------------------------



"PYR"
Merci MichDenis de t'occuper de mon cas.
J'ai effectué ton remplacement et je plante de la même manière.
Err vaut bien 9 après la tentative 'Worksheets(Base).Activate'

On dirait que l'instruction précédente 'On Error Resume Next',
gestionnaire
de l'erreur, n'est pas prise en compte ...


"MichDenis" news:%
Remplace ceci

On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0

Par

On Error Resume next
Worksheets(Base).Activate
if err <>0 then
err=0
GestionOnglet:
end if



"PYR"
Bonsoir à tous,
Venant, il y a peu de temps, de me mettre au VBA sur Excel, j'ai un cas
qui
me tracasse.
Je viens donc vous le soumettre à votre sagacité car je ne vois pas la
solution bien qu'ayant tout bien fait comme dit la documentation ou suite
à
recherches sur internet.
J'ai joint mon code apuré au minimum pour la compréhension.

L'idée générale :
J'ai une liste de fichiers à traiter.
Chaque fichier est ouvert, j'en tire un nom de base.
Chaque base doit correspondre à un onglet.
S'il existe, j'y accède et je poursuis mon traitement.
S'il n'existe pas, je crée l'onglet et je fais comme la ligne ci-dessus
Pour savoir si l'onglet existe, je fais d'office un
'Worksheets(Base).Activate'
Si j'ai une erreur, c'est signe de l'absence donc je dois aller dans la
proc
GestionOnglet qui va me le créer.
J'ai donc initialisé un 'On Error GoTo GestionOnglet et suite au retour
de
la gestion de l'erreur, un 'On Error GoTo 0'.

Lors de l'exécution, je tombe en erreur sur la ligne
'Worksheets(Base).Activate' avec le code "Erreur 9 : l'indice
n'appartient
pas à la sélection" alors que justement tout est fait pour qu'il aille en
gestionOnglet et là il n'y va pas.
Quelque'un aurait-il l'explication à mon problème?
Et pourquoi pas, une autre méthode de test de présence d'un onglet ?
----------------------------------------------------------------------------------------------
Private Sub Traitement()
Dim NomFichierEntreeTXT As String, LigneLue As String, Base As String,
Objet, Fichier
NomFichierEntreeTXT = Dir("*TOTO*.TXT", vbNormal)
Do While NomFichierEntreeTXT <> ""
Set Fichier = Objet.OpenTextFile(NomFichierEntreeTXT, 1, -2)
LigneLue = Fichier.ReadLine
Base = Trim(Mid(LigneLue, 9, 90))
On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0
.
.
.
Loop
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub

GestionOnglet:
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
Resume Next
End Sub
---------------------------------------------------------------------------------------------------

En vous remerciant par avance








MichDenis
Le #6762501
Habituellement, au lieu d'utiliser ceci :
Worksheets(Base).Activate
(Problème si la feuille est masquée... elle existe mais non accessible...!

On utilise ceci :

Dim Sh as Worksheet

Set Sh = ThisWorkbook.Worksheets(base)

Cependant pour que le nom d'une nouvelle feuille puisse être créé,
attention, la chaîne de caractère que représente la variable "Base"
ne peut contenir plus de 31 caractères qui est le mximum de caractères
admissibles pour le nom d'un onglet de feuille.

De même, tu dois t'assurer que la chaîne de caractère ne contient pas un des
7 éléments interdits pour le nom d'onglet d'une feuille comme : * ? / [ ] ::

Ceci fonctionne... de même que la procédure hier ...
à toi d'insérer ceci dans ta boucle
'----------------------------------
Private Sub Traitement()
Dim Sh As Worksheet
Dim Base As String
Base = "Feuil4" 'Pour les besoins de l'exemple.
On Error Resume Next
Set Sh = ThisWorkbook.Worksheets(Base)
If Err <> 0 Then
Err = 0
GestionOnglet Base
End If
MsgBox "Le traitement est terminé !", vbInformation, "INFO"

End Sub

'---------------------------------
Sub GestionOnglet(Base As String)
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
End Sub
'---------------------------------






"PYR"
Bonjour.

Après essai de la nouvelle possibilité, toujours le plantage sur
Worksheets(Base).Activate, le passage à l'instruction 'If Err <> 0 Then' ne
se réalise pas.
Je ne comprends vraiment pas pourquoi cela ne veut pas s'exécuter !!!

Je vais être obligé de voir avec une boucle de parcours des onglets
existants.
Je pensais qu'il y avait une méthode plus rapide mais comme elle ne
fonctionne pas ...

A moins que cela marcherait avec une autre instruction que le activate (par
exemple, création d'une feuille, puis la renommer, et si le nom existe déjà
cela plantera peut être et la gestion de l'erreur marchera.

Maintenant, s'il existe dans les esprits de ce forum, d'autres idées pour
détecter l'absence ou la présence d'un onglet d'après un nom donné, je suis
forcément preneur.

Merci pour les contributions passées et à venir


"MichDenis" news:%
Je fais référence à quelque chose dans le genre ou
GestionOnglet est une procédure et non une référence
à une erreur.

Il ne te reste plus qu'à mettre ceci dans ta boucle.


Private Sub Traitement()
Dim Base As String
Base = "Feuil4" 'Pour les besoins de l'exemple.
On Error Resume Next
Worksheets(Base).Activate
If Err <> 0 Then
Err = 0
GestionOnglet Base
End If
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub
End Sub

'---------------------------------
Sub GestionOnglet(Base As String)
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
End Sub
'---------------------------------



"PYR"
Merci MichDenis de t'occuper de mon cas.
J'ai effectué ton remplacement et je plante de la même manière.
Err vaut bien 9 après la tentative 'Worksheets(Base).Activate'

On dirait que l'instruction précédente 'On Error Resume Next',
gestionnaire
de l'erreur, n'est pas prise en compte ...


"MichDenis" news:%
Remplace ceci

On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0

Par

On Error Resume next
Worksheets(Base).Activate
if err <>0 then
err=0
GestionOnglet:
end if



"PYR"
Bonsoir à tous,
Venant, il y a peu de temps, de me mettre au VBA sur Excel, j'ai un cas
qui
me tracasse.
Je viens donc vous le soumettre à votre sagacité car je ne vois pas la
solution bien qu'ayant tout bien fait comme dit la documentation ou suite
à
recherches sur internet.
J'ai joint mon code apuré au minimum pour la compréhension.

L'idée générale :
J'ai une liste de fichiers à traiter.
Chaque fichier est ouvert, j'en tire un nom de base.
Chaque base doit correspondre à un onglet.
S'il existe, j'y accède et je poursuis mon traitement.
S'il n'existe pas, je crée l'onglet et je fais comme la ligne ci-dessus
Pour savoir si l'onglet existe, je fais d'office un
'Worksheets(Base).Activate'
Si j'ai une erreur, c'est signe de l'absence donc je dois aller dans la
proc
GestionOnglet qui va me le créer.
J'ai donc initialisé un 'On Error GoTo GestionOnglet et suite au retour
de
la gestion de l'erreur, un 'On Error GoTo 0'.

Lors de l'exécution, je tombe en erreur sur la ligne
'Worksheets(Base).Activate' avec le code "Erreur 9 : l'indice
n'appartient
pas à la sélection" alors que justement tout est fait pour qu'il aille en
gestionOnglet et là il n'y va pas.
Quelque'un aurait-il l'explication à mon problème?
Et pourquoi pas, une autre méthode de test de présence d'un onglet ?
----------------------------------------------------------------------------------------------
Private Sub Traitement()
Dim NomFichierEntreeTXT As String, LigneLue As String, Base As String,
Objet, Fichier
NomFichierEntreeTXT = Dir("*TOTO*.TXT", vbNormal)
Do While NomFichierEntreeTXT <> ""
Set Fichier = Objet.OpenTextFile(NomFichierEntreeTXT, 1, -2)
LigneLue = Fichier.ReadLine
Base = Trim(Mid(LigneLue, 9, 90))
On Error GoTo GestionOnglet
Worksheets(Base).Activate
On Error GoTo 0
.
.
.
Loop
MsgBox "Le traitement est terminé !", vbInformation, "INFO"
Exit Sub

GestionOnglet:
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = Base
Resume Next
End Sub
---------------------------------------------------------------------------------------------------

En vous remerciant par avance








Publicité
Suivre les réponses
Poster une réponse
Anonyme