XL 2010 erreur d'exécution 9 l'indice n'appartient pas à la sélection

ARNOLD 1er

XLDnaute Nouveau
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:

VB:
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":

Code:
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.

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

Pièces jointes

  • Essai saisie numérique.xlsm
    28.5 KB · Affichages: 4

_Thierry

XLDnaute Barbatruc
Bonjour @ARNOLD 1er , @Pounet95 , le Forum

Je pense que ton problème de recopie de code provient du fait qui tu as un module de Class et ce n'est pas autant "maléable" que du simple code.

Dans ton classeur définitif, il faut que tu créées le même Module de Class, instancing 1-Private , Name Classe1
Que tu y copies/colles le Public WithEvents et la Private Sub
Que dans le Private Module du UserForm en question, tu n'oublies pas non plus en Top de Module le Dim txtbox(1 to 15) As New Classe1 (le nom du Module de Class)
Et aussi de noter que là "1 à 15" ce n'est pas du commentaire... (Remarque de Pounet95)...

Bon courage
@+Thierry

PS de Win 8 à Win 10, normalement tu n'as pas à refaire une application Excel... Ca devrait être transparent (Quelles version d'Office ?)
 

ARNOLD 1er

XLDnaute Nouveau
Bonjour THIERRY,
Merci pour tes conseils.
En fait, j'ai cherché mais je n'ai pas compris ce que signifie "instancing 1-Private , Name Classe1"
Sinon, je joins un nouveau fichier simplifié, sachant que ce que je souhaite c'est :
- d'empêcher la saisie de valeurs non numériques dans certaines textbox (textbox de 6 à 21, puis de 23 à 38, puis de 40 à 55,...) au moment de la saisie (textbox_change il me semble) et non lors de la validation (comme c'est fait ici)
- de bloquer l'utilisateur sur la textbox en question tant que la modif n'est pas faite (mais le set focus ne fonctionne pas trop lors de mes essais)
 

Pièces jointes

  • V16 du 28 5 2020 simplifié.xlsm
    421.8 KB · Affichages: 0

_Thierry

XLDnaute Barbatruc
Re Bonjour

Ce que je veux dire c'est ceci :

1590670022422.png


Sinon oui je sais ce que tu cherches à faire et apparemment ca fonctionne dans le fichier que tu as mis en exemple dans le Post#1, mais tu ne peux pas le reproduire ensuite dans un autre classeur.

Je n'ai pas regardé le nouvel exemple, si il n'a pas l'erreur dont tu parles je ne vois pas l'utilité de poster d'autres exemples.

Bien à toi
@+Thierry
 

Discussions similaires

  • Question
Microsoft 365 ListBox TextBox
Réponses
2
Affichages
230

Statistiques des forums

Discussions
288 581
Messages
1 893 168
Membres
169 777
dernier inscrit
Bazilecr
Haut Bas