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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
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








PYR
Le #6763211
Je suis désolé mais je reste toujours sur la même erreur ce coup-ci sur le
'Set Sh = ThisWorkbook.Worksheets(base)'.
Je dois avoir un souci dans ma config bien que dans un autre programme, le
'On Error Resume Next' fonctionne mais c'est sur une lecture
d'enregistrement de fichier TXT.

J'ai donc fait une boucle de parcours des onglets présents pour tenter de
détecter la présence ou non de mon onglet 'Base' et agir en conséquence.

Je te remercie d'avoir porté attention à mon souci
C'est sûr, il n'y a pas péril en la demeure car j'ai une solution de repli
(ma boucle) mais c'est pour la compréhension du néophite du VBA que je suis


"MichDenis" news:
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












PYR
Le #16444521
Bonsoir à tous.

J'ai beau avoir cherché, je n'ai trouvé que des post traitant partiellement
de mon souci du moment.
Voici mon cas (pour faire simple) car cela s'applique sur plus de 500 000
lignes (je dispose d'Excel 2007 permettant cette facilité)
En colonne A, j'ai des numéros de compte et en colonne B des codes
A B
1 130040128 1D4C
2 130040128 1D77
3 130040128 1D4C
4 130040128 1D4C
5 130060321 1D77

J'aurais aimé quand je saisis dans H1 par exemple 1D77, j'obtienne en H2 la
valeur 2 => 2 comptes distincts (de la colonne A) ont ce code.
Autre saisie : toujours en H1, si je saisis 1D4C, en H2 je devrais obtenir
1 => 1 seul compte distinct (de la colonne A) a ce code (on trouve 3 fois le
même).

Je n'ai aucun souci quand ce que je cherche et où je cherche correspondent à
la même colonne mais quand plusieurs colonnes (au moins 2 ici) entrent en
jeu, je n'ai pas trouvé de solution d'où votre sollicitude.

Je voudrais, pour être complet sinon je sais faire, éviter d'utiliser une
colonne de travail qui teste le cas ligne par ligne et retourne une info du
style oui/non que je n'aurais pus qu'à comptabiliser surtout que le nombre
de lignes augmentent chaque jour un peu plus et que mon fichier fait déjà
plus de 100 Mo.

Voilà l'exposé du problème

Si vous avez un peu de temps à me consacrer, je vous en serai reconnaissant.

Merci d'avance
Daniel.C
Le #16446321
Bonjour.
Essaie la formule matricielle suivante (valider avec CTRL+MAJ+Entrée) :
=SOMME((A1:A5<>INDEX(A1:A5;EQUIV(H1;B1:B5;0)))*(B1:B5=H1))+1
Cordialement.
Daniel
"PYR" %
Bonsoir à tous.

J'ai beau avoir cherché, je n'ai trouvé que des post traitant
partiellement de mon souci du moment.
Voici mon cas (pour faire simple) car cela s'applique sur plus de 500 000
lignes (je dispose d'Excel 2007 permettant cette facilité)
En colonne A, j'ai des numéros de compte et en colonne B des codes
A B
1 130040128 1D4C
2 130040128 1D77
3 130040128 1D4C
4 130040128 1D4C
5 130060321 1D77

J'aurais aimé quand je saisis dans H1 par exemple 1D77, j'obtienne en H2
la valeur 2 => 2 comptes distincts (de la colonne A) ont ce code.
Autre saisie : toujours en H1, si je saisis 1D4C, en H2 je devrais
obtenir 1 => 1 seul compte distinct (de la colonne A) a ce code (on trouve
3 fois le même).

Je n'ai aucun souci quand ce que je cherche et où je cherche correspondent
à la même colonne mais quand plusieurs colonnes (au moins 2 ici) entrent
en jeu, je n'ai pas trouvé de solution d'où votre sollicitude.

Je voudrais, pour être complet sinon je sais faire, éviter d'utiliser une
colonne de travail qui teste le cas ligne par ligne et retourne une info
du style oui/non que je n'aurais pus qu'à comptabiliser surtout que le
nombre de lignes augmentent chaque jour un peu plus et que mon fichier
fait déjà plus de 100 Mo.

Voilà l'exposé du problème

Si vous avez un peu de temps à me consacrer, je vous en serai
reconnaissant.

Merci d'avance


PYR
Le #16452431
Bonsoir

Merci Daniel pour ta formule mais il existe des situations où elle ne
fonctionne pas.
Ex :
En A4, mets le contenu de A5 et en B4, mets le contenu de B5 ==>> (ligne
4=ligne 5)
En H1, tu saisis 1D77 et en H2 j'obtiens 3 au lieu de 2 (ta formule me
compte 2 fois les lignes 4 et 5 alors que c'est le même N° de compte)

Une indication que je n'avais précisée : ma colonne est triée (si cela peut
aider).
Je n'arrive pas à dire en matricielle : ne pas tenir compte d'une ligne si
le N° de compte de cette ligne = le N° de compte de la ligne précédente ou
alors ne prendre en compte que les lignes dont le N° de compte est différent
du N° de compte de la ligne précédente.

Si vous avez des idées ...

Encore merci


"Daniel.C" news:O6Q0%
Bonjour.
Essaie la formule matricielle suivante (valider avec CTRL+MAJ+Entrée) :
=SOMME((A1:A5<>INDEX(A1:A5;EQUIV(H1;B1:B5;0)))*(B1:B5=H1))+1
Cordialement.
Daniel
"PYR" %
Bonsoir à tous.

J'ai beau avoir cherché, je n'ai trouvé que des post traitant
partiellement de mon souci du moment.
Voici mon cas (pour faire simple) car cela s'applique sur plus de 500 000
lignes (je dispose d'Excel 2007 permettant cette facilité)
En colonne A, j'ai des numéros de compte et en colonne B des codes
A B
1 130040128 1D4C
2 130040128 1D77
3 130040128 1D4C
4 130040128 1D4C
5 130060321 1D77

J'aurais aimé quand je saisis dans H1 par exemple 1D77, j'obtienne en H2
la valeur 2 => 2 comptes distincts (de la colonne A) ont ce code.
Autre saisie : toujours en H1, si je saisis 1D4C, en H2 je devrais
obtenir 1 => 1 seul compte distinct (de la colonne A) a ce code (on
trouve 3 fois le même).

Je n'ai aucun souci quand ce que je cherche et où je cherche
correspondent à la même colonne mais quand plusieurs colonnes (au moins 2
ici) entrent en jeu, je n'ai pas trouvé de solution d'où votre
sollicitude.

Je voudrais, pour être complet sinon je sais faire, éviter d'utiliser une
colonne de travail qui teste le cas ligne par ligne et retourne une info
du style oui/non que je n'aurais pus qu'à comptabiliser surtout que le
nombre de lignes augmentent chaque jour un peu plus et que mon fichier
fait déjà plus de 100 Mo.

Voilà l'exposé du problème

Si vous avez un peu de temps à me consacrer, je vous en serai
reconnaissant.

Merci d'avance






Daniel.C
Le #16453191
Exact. La formule est erronée.
Désolé, je n'en ai pas d'autre.
Daniel
"PYR"
Bonsoir

Merci Daniel pour ta formule mais il existe des situations où elle ne
fonctionne pas.
Ex :
En A4, mets le contenu de A5 et en B4, mets le contenu de B5 ==>> (ligne
4=ligne 5)
En H1, tu saisis 1D77 et en H2 j'obtiens 3 au lieu de 2 (ta formule me
compte 2 fois les lignes 4 et 5 alors que c'est le même N° de compte)

Une indication que je n'avais précisée : ma colonne est triée (si cela
peut aider).
Je n'arrive pas à dire en matricielle : ne pas tenir compte d'une ligne si
le N° de compte de cette ligne = le N° de compte de la ligne précédente ou
alors ne prendre en compte que les lignes dont le N° de compte est
différent du N° de compte de la ligne précédente.

Si vous avez des idées ...

Encore merci


"Daniel.C" news:O6Q0%
Bonjour.
Essaie la formule matricielle suivante (valider avec CTRL+MAJ+Entrée) :
=SOMME((A1:A5<>INDEX(A1:A5;EQUIV(H1;B1:B5;0)))*(B1:B5=H1))+1
Cordialement.
Daniel
"PYR" %
Bonsoir à tous.

J'ai beau avoir cherché, je n'ai trouvé que des post traitant
partiellement de mon souci du moment.
Voici mon cas (pour faire simple) car cela s'applique sur plus de 500
000 lignes (je dispose d'Excel 2007 permettant cette facilité)
En colonne A, j'ai des numéros de compte et en colonne B des codes
A B
1 130040128 1D4C
2 130040128 1D77
3 130040128 1D4C
4 130040128 1D4C
5 130060321 1D77

J'aurais aimé quand je saisis dans H1 par exemple 1D77, j'obtienne en H2
la valeur 2 => 2 comptes distincts (de la colonne A) ont ce code.
Autre saisie : toujours en H1, si je saisis 1D4C, en H2 je devrais
obtenir 1 => 1 seul compte distinct (de la colonne A) a ce code (on
trouve 3 fois le même).

Je n'ai aucun souci quand ce que je cherche et où je cherche
correspondent à la même colonne mais quand plusieurs colonnes (au moins
2 ici) entrent en jeu, je n'ai pas trouvé de solution d'où votre
sollicitude.

Je voudrais, pour être complet sinon je sais faire, éviter d'utiliser
une colonne de travail qui teste le cas ligne par ligne et retourne une
info du style oui/non que je n'aurais pus qu'à comptabiliser surtout que
le nombre de lignes augmentent chaque jour un peu plus et que mon
fichier fait déjà plus de 100 Mo.

Voilà l'exposé du problème

Si vous avez un peu de temps à me consacrer, je vous en serai
reconnaissant.

Merci d'avance









Publicité
Poster une réponse
Anonyme