Erreur d'exécution 9 l'indice n'appartient pas à la sélection

Bonjour à tous,

Je précise que je suis débutant en VBA. J'avais crée sur windows 8 une petite application en vba qui fonctionnait très bien, mais j'ai été obligé de la refaire avec l'arrivée de windows 10, et depuis 2 jours j'ai un problème que je ne comprends pas.

Mon problème:

J'ai passé le code suivant pour empêcher l'utilisateur de saisir du texte dans des texbox destinées à recueillir uniquement des nombres.

Dans le module de classe:

Public WithEvents txtBox As MSForms.TextBox
Private Sub txtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr(".,0123456789", Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
        MsgBox "Vous avez saisi du texte par erreur. Le caractère saisi n'est pas valide, vous devez entrer un nombre !!!", vbCritical, "ERREUR de SAISIE"
    End If
End Sub

Dans le Userform concerné libellé "Année1":

Dim i As Long
Dim n As Long
Dim nbVirgule As Long
Dim nbPoint As Long

 'Empêcher de saisir du texte et avertir d'une mauvaise saisie (lien avec module de classe)
Dim txtBox(6 To 21) As New Classe1 'Pour 15 TextBox

Private Sub Userform_Initialize()
    Dim n, x As Long
    Dim ctrl As Control
'pour les 15:
    For Each ctrl In Controls
        If Left(ctrl.Name, 7) = "TextBox" Then
            For n = 6 To 21
                If ctrl.Name = "TextBox" & n Then
                    x = x + 1
                    Set txtBox(x).txtBox = ctrl
                    Exit For
                End If
            Next n
        End If
    Next
End sub

Private Sub Cmd9_Click()
 ' obliger à saisir toutes les cases vides lors de la validation du USF (si case vide alors mettre un zéro)
    For i = 6 To 21
        If Me.Controls("TextBox" & i) = "" Then Alerte.Show: Exit Sub         
    Next i   
End sub

"alerte" est le nom du USF que j'utilise à la place d'une msgbox normale car je ne veux pas voir apparaître le nom excel sur la msgbox

Ce code fonctionne parfaitement sur mon fichier d'essai dénommé "essai saisie numérique", mais lorsque je le recopiais sur mon fichier excel définitif dénommé "V14 du 28 05 2020", excel me renvoyait le message d'erreur "erreur d'exécution 9 l'indice n'appartient pas à la sélection".

Je modifié le code si bien que je n'ai plus "erreur 9...", mais il ne fonctionne toujours pas et ce serait sympa si quelqu'un pouvait m'aider à débloquer la situation.

Je joins le premier fichier qui fonctionne, mais je ne peux pas joindre le 2ème qui est trop lourd même compressé.

bonjour,

Il n'y a pas d'erreur dans le fichier joint.

Pour ce genre de problème le fichier original est indispensable.

Allégé de la plupart de ses enregistrements et objets de décoration en général ça ne passe pas de problème.

Toutefois dans ce cas, je pense qu'en révisant tes TextBox 1 par 1 tu devrais trouver la solution :

De 6 à 21 ça fait 16...

En général dans ce genre de problème pour éviter de nombreuses erreurs je préfixe différemment les TextBox qui font partie de la classe : tb1, tb2, tb3...

Ainsi tu es certain que le compte est bon.

A+

Bonjour,

Essayer avec cette version

NB : comme le signale Galopin, ce n'est pas une bonne méthode que d'utiliser pour différentier les TextBox, l'indice généré automatiquement. Ce n'est pas fiable surtout si d'autres textbox sont ajoutées par la suite.

Mieux vaut donc un préfixage ou l'utilisation des propriétés ControlTipText ou Tag pour la différentiation.

Merci à tous les deux pour vos réponses, même si je n'ai pas bien compris le principe du préfixage ou de l'utilisation des propriétés ControlTipText ou Tag pour la différentiation.

Je joins lefichier excel expurgé des formulaires inutiles

Merci à tous les deux pour vos réponses, même si je n'ai pas bien compris le principe du préfixage ou de l'utilisation des propriétés ControlTipText ou Tag pour la différentiation.

Je joins le fichier excel expurgé des formulaires

inutiles

Mon Dieu !

Et comment lances tu le USerForm ?

En fait tu nous parles de 15 TextBox mais somme toute c'est la totalité des TextBox qui devrait être soumis à la contrainte numérique ? Sauf peut-être le premier ("Nature") C'est ça ?

A+

Pour l'instant j'ouvre excel et je vais sur l'onglet développeur, mais je sais comment aller directement sur le userform sans passer par excel (je n'ai pas encore inscrit le code).

Quant au formulaire "Année1" j'y accède par un bouton sur le premier formulaire "accueil" ou à partir des 5 autres formulaires (année2, année3,...)

Sur le fichier que je vous ai envoyé, le code fonctionne bien c'est lorsque je le copie sur le fichier simplifié ci-joint (j'ai enlevé les autres USF car le fichier est trop lourd)

Bonjour,

ci-jointe version permettant le contrôle numérique sur tous les produits/services

Merci THEV,

Je viens de voir ton message et c'est super ça fonctionne.

Par contre il y a dans le multipage1, cinq Textbox destinées à recevoir du texte, il s'agit des textbox 5, 22, 39, 56 et 73.

Je ne sais pas comment faire pour les extraire de la liste des textbox avec obligation de saisie numérique.

Peux tu encore m'aider STP ?

Pour GALOPIN01,

Excuses moi de ne pas avoir répondu à ta question.

Oui, les textbox 5, 22, 39, 56 et 73 correspondent bien à la nature des produits et donc doivent comporter du texte.

Par contre il y a dans le multipage1, cinq Textbox destinées à recevoir du texte, il s'agit des textbox 5, 22, 39, 56 et 73.

Comme dit précédemment, pour les différentier, il suffit de mettre dans leur propriété "Tag" , la valeur "Texte" par exemple et ensuite de tester cette valeur.

ci-jointe version modifiée

NB : éviter d'utiliser les indices des TextBox qui risquent de vous apporter des problèmes. Utiliser plutôt les contrôles de vos pages ou de vos frames.

De même utiliser cette collection ("Dim txtBox(6 To 21) As New Classe1)" avec un nombre d'éléments fixes ne garantit aucune récurrence du code.

[thev]

Il y a au total 222 TextBox (numérotation discontinue de 5 à 257) qui ont vocation à contenir du numérique et seulement 26 du texte.

Comment vas tu gérer toutes les séries actuelles ?

Les séries existantes :

5 à 105

117 à 131

147 à 257

Les TextBox à vocations "Texte" :

5, 22, 39, 56, 73, 90, 91, 92 et 148 à 165...

A+

@galopin

Pour celles qui ont du texte, je propose de mettre dans leur propriété Tag, la valeur "Texte", ce qui permettra de les différencier.

Dans la version que je j'ai communiquée, je me suis arrêté au MultiPage1 et donc à 5, 22, 39, 56, 73.

Bonjour à Tous,

Comme je l'ai précisé, le code proposé par THEV fonctionne très bien et je l'en remercie, mais il ne règle pas le problème des quelques textbox non numériques destinées à transmettre du texte sur mes feuilles excel (libellés de produits ou de charges par exemple).

J’ai essayé de trouver une solution depuis hier, mais je n’ai jamais suivi de cours d’informatique (VBA ou autres) et compte tenu de ces lacunes, il y a beaucoup de codes ou de notions que j’ignore ou que je ne comprends pas. J'apprends progressivement sur les forums ou les tutos mais s'est insuffisant pour atteindre mon objectif immédiat.

J'espère que je peux encore compter sur votre disponibilité et votre efficacité.

Oups !!!

Excusez moi je viens de voir qu'il y avait une deuxième page sur le forum et vos échanges d'hier après midi, je vais procéder selon vos indications et reviens vers vous.

THEV & GALOPIN01,

Un Grand Grand MERCI à tous les deux !!!

C'est exactement ce que je souhaitais et ça fonctionne super !!!!!

Une fois terminé le travail, je vous enverrai un exemplaire au cas où vous auriez besoin d'établir un plan d'affaires prévisionnel.

Encore merci !!

Rechercher des sujets similaires à "erreur execution indice appartient pas selection"