Erreur d'exécution 9, l'indice n'appartient pas à la selection

Erreur d'exécution 9, l'indice n'appartient pas à la selection - VB/VBA/VBS - Programmation

Marsh Posté le 25-02-2017 à 21:25:37    

Bonjour,
 
Je suis entrain d’écrire une fonction qui me permet d'initialiser des vecteurs en interagissant avec l'utilisateur en lui demandant:
 
nom As String 'nom du vecteur
NbrElt As Long 'nombre de composantes
Comp() As Double 'composantes des vecteurs
 
La fonction est la suivante:
 
Function udtInitVect() As udtVecteur
 
udtInitVect.nom = Application.InputBox("Donner le nom du vecteur", Type:=2)
 
udtInitVect.NbrElt = Application.InputBox("Donner le nombre de composantes", Type:=1)
 
ReDim Comp(udtInitVect.NbrElt)
 
Dim i As Long
 
Do
 
udtInitVect.Comp(i) = Application.InputBox("Entrez la valeur de la composante " + CStr(i) + " de " + udtInitVect.nom, Type:=1)
 
Loop While i <= udtInitVect.NbrElt
 
 
End Function
 
Mon problème est qu'au moment d'entrer la valeur des composantes, il y a affiché:
"Erreur d’exécution 9, l'indice n'appartient pas à la sélection"
 
Quelqu'un aurait il une idée d’où se situe le problème?
 
Merci d'avance.

Reply

Marsh Posté le 25-02-2017 à 21:25:37   

Reply

Marsh Posté le 06-03-2017 à 01:45:33    

Bonjour,
 
Peut-être comme ceci :

Code :
  1. Option Explicit
  2. Type udtVecteur
  3.   nom As String 'nom du vecteur
  4.   NbrElt As Long 'nombre de composantes
  5.   Comp() As Double 'composantes des vecteurs
  6. End Type
  7. Function udtInitVect() As udtVecteur
  8. Dim r As Variant
  9. Dim i As Long
  10.   r = Application.InputBox("Donner le nom du vecteur", Type:=2)
  11.   If r <> False Then udtInitVect.nom = r Else Exit Function
  12.   r = Application.InputBox("Donner le nombre de composantes", Type:=1)
  13.   If r <> False Then
  14.     udtInitVect.NbrElt = r
  15.   Else
  16.     udtInitVect.nom = ""
  17.     Exit Function
  18.   End If
  19.   ReDim udtInitVect.Comp(1 To udtInitVect.NbrElt)
  20.   Do
  21.     r = Application.InputBox("Entrez la valeur de la composante " + CStr(i + 1) + " de " + udtInitVect.nom, Type:=1)
  22.     If r <> False Then
  23.       i = i + 1
  24.       udtInitVect.Comp(i) = r
  25.     Else
  26.       udtInitVect.nom = ""
  27.       udtInitVect.NbrElt = 0
  28.       Erase udtInitVect.Comp
  29.     End If
  30.   Loop While i < udtInitVect.NbrElt
  31. End Function


---------------
Cordialement, Patrice
Reply

Marsh Posté le 08-03-2017 à 23:03:41    

(code initial)
Faudrait pas initialiser i quelque part avant la boucle?


Message édité par rat de combat le 08-03-2017 à 23:03:54
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed