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:
Dans le Userform concerné libellé "Année1":
"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é.
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é.