Condition if - Erreur 9 , indice n'appartient pas à l

Bonjour à tous, Forum,

J'ai une question qui va certainement faire sourire les spécialistes VBA mais je n'ai rien trouvé sur le forum (mais j'ai certainement mal cherché...) pour résoudre mon problème.

Je souhaite combiné un test IF avec plusieurs and et j'ai donc écrit la syntaxe suivante :

Sub Solving()

Dim MyProblem As Integer

Dim Micronage As Integer

Dim solution As String

Dim choice As Integer

choice = 0

MyProblem = 0

solution = ""

Micronage = 0

MyProblem = InputBox("Please enter the digit of your Polymer's problem " & vbNewLine & " 1 = Dirt . " & vbNewLine & " 2 = Gels")

If MyProblem = 1 Then

Micronage = InputBox("Please enter the micronage value of the impurity (in µm)")

If Micronage >= Worksheets("Media").Range("J74").Value And Micronage < Worksheets("Media").Range("K74").Value Then

solution = solution & vbNewLine & "SINTERED POWDER"

End If

If Micronage >= Worksheets("Media").Cells(49, 10) And Micronage <= Worksheets("Media").Cells(49, 11) Then

solution = solution & vbNewLine & "Dutch weave"

End If

If Micronage >= Worksheets("Media ").Cells(25, 10) And Micronage <= Worksheets("Media ").Cells(25, 11) Then

solution = solution & vbNewLine & "Multipor"

End If

If Micronage > Worksheets("Media").Cells(63, 10) And Micronage <= Worksheets("Media").Cells(63, 11) Then

solution = solution & vbNewLine & "MICRO-PERFORATED"

End If

If Micronage > 200 Then

solution = solution & vbNewLine & "CLASSICAL WEAVE"

End If

MsgBox "solution"

End If

End sub

Après avoir lancé un débogage , j'ai un message erreur " L'indice n'appartient pas à la selection". Au niveau de la ligne soulignée.

Merci d'avance pour votre aide.

Bonjour,

Enlève as INTEGER

Dim Micronage

et pour le post, ne mets pas en gras mais sélectionne la balise code

Bonjour,

D'abord j'apprécierai mieux un code indenté et mis sous balises Code...

Déclarant des variables Integer ou String, tant qu'elles ne sont pas initialisées, elles ont par défaut la valeur 0 (Integer) ou "" (String). Il est donc complètement inutile de les initialiser à ces valeurs qu'elles ont déjà !

Excel, comme VBA est toujours susceptible d'opérer des conversions d'office, pas dans les mêmes cas pour l'un et l'autre d'ailleurs... mais il est toujours prudent de ne pas s'y fier complètement...

InputBox renvoie par définition une donnée String. Il n'est pas toujours inutile de la convertir explicitement...

Sinon, exécutant ce fragment de code, je n'ai pas d'erreur, mais le contexte ou le système (si tu travailles sur MAC ?) peut provoquer des réactions différenciées...

Cordialement.

edit : Salut Steelson !

Hello MFerrand,

J'ai bien reproduit l'erreur !

capture d ecran 67

je confirme que je n'obtiens pas l'erreur ! Et dans les mêmes conditions ! Va savoir ?

Il n'y a pas longtemps je me suis énervé sur une erreur dont j'ai oublié les détails mais qui, suivie avec des MsgBox à chaque étape de calcul, fonctionnait, produisait une erreur sur le premier maillon sans les MsgBox, et que j'ai éliminée en déplaçant la dernière étape sur une autre procédure !

ton micro est plus intelligent que le mien alors !

ce qui se produit, c'est que, comme tu le mentionnes, InputBox renvoie par définition une donnée String alors que la variable est Integer ! et dans mon cas, VBA n'opére pas de conversion de ce type d'office

si c'est bien un integer qui est attendu, il faut alors faire un test et boucler sur l'inputbox si l'entrée n'est pas "numeriquable" !

Merci pour vos réponses .

Steelson a écrit :

Bonjour,

Enlève as INTEGER

Dim Micronage

et pour le post, ne mets pas en gras mais sélectionne la balise code

Je l'ai fait mais j'obtiens le meme message d'erreur.

Au même endroit ?

Enlève aussi

Micronage = 0

Cas que j'ai eu il y a peu, du même type, avec des méthodes qui peuvent renvoyer False, c'est le cas de Application.InputBox, et aussi de GetOpenFilename... Là on prend la précaution d'une variable Variant, et on teste :

If var <> False Then
...
'ou 

If var = False Then Exit Sub

On voit souvent, et c'est aussi la structure des exemples fournis par Microsoft. Et ça marche généralement !

Sauf que au cas particulier j'ai écopé d'une erreur 13 si la réponse n'était pas False, et j'ai dû bâtir une gestion d'erreur pour contourner la chose.

Pourquoi dans ce cas qui n'avait rien de spécial, alors que j'ai repris depuis du code avec ce type de condition sans que cela génère d'erreur...

  Sub Solving()

Dim MyProblem As Integer
Dim Micronage As String
Dim Micro As Double
Dim solution As String
Dim choice As Integer

MyProblem = InputBox("Please enter the digit of your Polymer's problem " & vbNewLine & " 1 = Dirt . " & vbNewLine & " 2 = Gels")

If MyProblem = 1 Then

 Micronage = InputBox("Please enter the micronage value of the impurity (in µm)")

Micro = CDbl(Micronage)

If Micro >= Worksheets("Media").Range("J74").Value And Micro < Worksheets("Media").Range("K74").Value Then
solution = solution & vbNewLine & "SINTERED POWDER"

End If

If Micro >= Worksheets("Media").Cells(49, 10) And Micro <= Worksheets("Media").Cells(49, 11) Then
solution = solution & vbNewLine & "Dutch weave"

End If

If Micro >= Worksheets("Media ").Cells(25, 10) And Micro <= Worksheets("Media ").Cells(25, 11) Then
solution = solution & vbNewLine & "Multipor"

End If

If Micro > Worksheets("Media").Cells(63, 10) And Micro <= Worksheets("Media").Cells(63, 11) Then
solution = solution & vbNewLine & "MICRO-PERFORATED"

End If

If Micro > 200 Then
solution = solution & vbNewLine & "CLASSICAL WEAVE"

End If
  MsgBox "solution"  
End If
End If
End Sub

J'ai resolu le problem en convertissant la variable "Micronage" en double.

Par contre j'ai de nouveau le meme message d'erreur à la ligne suivante :

If Micro >= Worksheets("Media").Range("J74").Value And Micro < Worksheets("Media").Range("K74").Value Then

Pourquoi convertir en Double alors que tu prévoyais au départ une variable de type Integer ? Curieux !

Je m'avise aussi que ton sujet porte sur une erreur 9, alors que l'on a raisonné implicitement sur une erreur 13 ! Et le résultat obtenu par Steelson était bien une erreur 13 !

S'il s'agit d'une erreur 9 sur cette ligne, est-ce quele nom de la feuille est bien Media ?

Sinon s'inquiéter du contenu des cellules testées.

J'ai pu déterminé d'où venait l'erreur.

Elle vient de la comparaison entre "micro" et la valeur d'une d'une cellule.

Il semblerait que la valeur d'une cellule n'est pas de type double ou integer.

Pour résoudre ce soucis dû copier la valeur micro dans une cellule avant de réaliser la comparaison.

Rechercher des sujets similaires à "condition erreur indice appartient pas"