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

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

13 réponses
Avatar
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

3 réponses

1 2
Avatar
Daniel.C
Essaie celle-ci (matricielle toujours) à la condition que la différence
entre les valeurs minimale et maximale de la colonne A soit inférieure au
nombre de ligne de la feuille (1 000 000 et quelques) :
=SOMME(SI(FREQUENCE((B1:B5=H1)*(A1:A5-MIN(A1:A5));LIGNE(INDIRECT("1:"&MAX(A1:A5)-MIN(A1:A5)))-1)>0;1;0))
Daniel
"PYR" a écrit dans le message de news:

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" a écrit dans le message de
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" a écrit dans le message de news:
%
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









Avatar
Iznogood1
Sinon un filtre élaboré et une sous.total(2,...) devrait convenir



Daniel.C a exposé le 01/08/2008 :
Essaie celle-ci (matricielle toujours) à la condition que la différence entre
les valeurs minimale et maximale de la colonne A soit inférieure au nombre de
ligne de la feuille (1 000 000 et quelques) :
=SOMME(SI(FREQUENCE((B1:B5=H1)*(A1:A5-MIN(A1:A5));LIGNE(INDIRECT("1:"&MAX(A1:A5)-MIN(A1:A5)))-1)>0;1;0))
Daniel
"PYR" a écrit dans le message de news:

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" a écrit dans le message de
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" a écrit dans le message de news:
%
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











Avatar
PYR
Bonsoir et merci encore Daniel pour ta proposition.

Je trouve cependant encore des situations où il y a problèmes dans la
comptabilisation.
Mais de toute manière, ma colonne A contient des N° de comptes commençant
par 1 (dans l'exemple) jusqu'à des N° commençant par 5 (maximum), ce qui
donne un écart de + de 1 000 000 (bien supérieur au nb de lignes d'Excel
2007) d'où ta condition précisée non respectée.

Je suis désolé mais je suis un rabat-joie.

Merci encore pour tes recherches.

"Daniel.C" a écrit dans le message de
news:
Essaie celle-ci (matricielle toujours) à la condition que la différence
entre les valeurs minimale et maximale de la colonne A soit inférieure au
nombre de ligne de la feuille (1 000 000 et quelques) :
=SOMME(SI(FREQUENCE((B1:B5=H1)*(A1:A5-MIN(A1:A5));LIGNE(INDIRECT("1:"&MAX(A1:A5)-MIN(A1:A5)))-1)>0;1;0))
Daniel
"PYR" a écrit dans le message de news:

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" a écrit dans le message de
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" a écrit dans le message de news:
%
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













1 2