Indice en dehors de plage dans un array

Résolu
theclem35 Messages postés 8 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 24 décembre 2007 - 24 déc. 2007 à 15:34
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 24 déc. 2007 à 17:19
Bonjour !

Suite à l'édition d'un array pour alleger le code, j'ai une erreur d'indice en dehors de plage.

Le code de base pour lequel ca marche est celui-ci :


Dim ProcedureFinie as Variant

ProcedureFinie = Array(0, "ANNULER", 1, "ANNULER", 1, "VOILIER", 1, "MER", 1, "VALIDER", 1, _
"VOILIER", 1, "MER", 2, "VALIDER", 1, _
"VOILIER", 1, "MER", 4, "VALIDER", 1, _
"CATAMARAN", 1, "MER", 1, "VOILIER", 1, "MER", 3, "VALIDER", 1, _
"CATAMARAN", 1, "MER", 3, "VOILIER", 1, "MER", 1, "VALIDER", 1, _
"BARQUE", 1, "MER", 1, "CATAMARAN", 1, "MER", 1, "VOILIER", 1, "MER", 2, "VALIDER", 1, _
"BARQUE", 1, "MER", 2, "CATAMARAN", 1, "MER", 2, "VOILIER", 1, "MER", 4, "VALIDER", 1, _
"BARQUE", 1, "MER", 5, "VOILIER", 1, "MER", 3, "VALIDER", 1, _
"FREGATE", 1, "MER", 2, "BARQUE", 1, "MER", 2, "VOILIER", 1, "MER", 6, "VALIDER", 1, _
"FREGATE", 1, "MER", 5, "CATAMARAN", 1, "MER", 2, "VOILIER", 1, "MER", 2, "VALIDER", 1, _
"FREGATE", 1, "MER", 10, "VALIDER", 1)

La fonction traitant cet array est une boucle éxecutant ligne par ligne l'array tant que le resultat n'est pas satisfaisant.



Pour alléger le code voici comment j'ai procédé :

Dim ProcedureFinie As Variant
Dim Procedure1 As String, Procedure2 As String

Ligne1 = "0, 'ANNULER', 1, 'ANNULER', 1, 'VOILIER', 1, 'MER', 1, 'VALIDER', 1, _"
Ligne2 = "'VOILIER', 1, 'MER', 2, 'VALIDER', 1, _"
Ligne3 = "'VOILIER', 1, 'MER', 4, 'VALIDER', 1, _"
Ligne4 = "'CATAMARAN', 1, 'MER', 1, 'VOILIER', 1, 'MER', 3, 'VALIDER', 1, _"
Ligne5 = "'CATAMARAN', 1, 'MER', 3, 'VOILIER', 1, 'MER', 1, 'VALIDER', 1, _"
Ligne6 = "'BARQUE', 1, 'MER', 1, 'CATAMARAN', 1, 'MER', 1, 'VOILIER', 1, 'MER', 2, 'VALIDER', 1, _"
Ligne7 = "'BARQUE', 1, 'MER', 2, 'CATAMARAN', 1, 'MER', 2, 'VOILIER', 1, 'MER', 4, 'VALIDER', 1, _"
Ligne8 = "'BARQUE', 1, 'MER', 5, 'VOILIER', 1, 'MER', 3, 'VALIDER', 1, _"
Ligne9 = "'FREGATE', 1, 'MER', 2, 'BARQUE', 1, 'MER', 2, 'VOILIER', 1, 'MER', 6, 'VALIDER', 1, _"
Ligne10 = "'FREGATE', 1, 'MER', 5, 'CATAMARAN', 1, 'MER', 2, 'VOILIER', 1, 'MER', 2, 'VALIDER', 1, _"
Ligne11 = "'FREGATE', 1, 'MER', 10, 'VALIDER', 1"

Procedure1 = Ligne1 & vbCrLf & Ligne2 & vbCrLf & Ligne3 & vbCrLf & Ligne4 & vbCrLf & Ligne5 & vbCrLf & Ligne6 & vbCrLf & Ligne7 & vbCrLf & Ligne8 & vbCrLf & Ligne9 & vbCrLf & Ligne10 & vbCrLf & Ligne11

Procedure2 = Replace(Procedure1, "'", Chr(34))

MsgBox (Procedure2)

ProcedureFinie = Array(Procedure2)


Explications d'une ligne pour les curieux : Ligne5 = "'CATAMARAN', 1, 'MER', 3, 'VOILIER', 1, 'MER', 1, 'VALIDER', 1, _"
On dépose 3 catamarans dans la mer et 1 voilier et on valide.

Vous pourriez vous dire que c'est drolement allégé... Mais en fait il y a plein d'autres procedures IDENTIQUES sauf que sur les autres on depose d'autres bateaux avant tout cela, c'est donc pour éviter de recopier 30 fois ce bout de procedure dans les autres.

La MsgBox m'affiche bien :

0, "ANNULER", 1, "ANNULER", 1, "VOILIER", 1, "MER", 1, "VALIDER", 1, _
"VOILIER", 1, "MER", 2, "VALIDER", 1, _
"VOILIER", 1, "MER", 4, "VALIDER", 1, _
"CATAMARAN", 1, "MER", 1, "VOILIER", 1, "MER", 3, "VALIDER", 1, _
"CATAMARAN", 1, "MER", 3, "VOILIER", 1, "MER", 1, "VALIDER", 1, _
"BARQUE", 1, "MER", 1, "CATAMARAN", 1, "MER", 1, "VOILIER", 1, "MER", 2, "VALIDER", 1, _
"BARQUE", 1, "MER", 2, "CATAMARAN", 1, "MER", 2, "VOILIER", 1, "MER", 4, "VALIDER", 1, _
"BARQUE", 1, "MER", 5, "VOILIER", 1, "MER", 3, "VALIDER", 1, _
"FREGATE", 1, "MER", 2, "BARQUE", 1, "MER", 2, "VOILIER", 1, "MER", 6, "VALIDER", 1, _
"FREGATE", 1, "MER", 5, "CATAMARAN", 1, "MER", 2, "VOILIER", 1, "MER", 2, "VALIDER", 1, _
"FREGATE", 1, "MER", 10, "VALIDER", 1

D'où mon incompréhension quand je met tout ca dans le Array : ProcedureFinie = Array(Procedure2), et que ca m'indique un indice en dehors de plage.

Je pense que ce doit etre un probleme minime si quelqu'un le décèle ce serait genial !!

Merci
Clément

4 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 déc. 2007 à 17:19
salut,

en effet çà n'a aucun sens
c'est comme si tu faisais :
msgbox "bonjour", vbInformation, "mon titre"
dim s$: s = "bonjour, vbInformation, mon titre"
msgbox s

mis à part que je ne vois pas pourquoi tu veux "simplifier" en compliquant....
çà serait plutôt :

Private Sub Form_Load()
    Dim sStr As String
    sStr = "0, ANNULER, 1, ANNULER, 1,
VOILIER, 1, MER, 1, VALIDER, 1, VOILIER, 1, MER, 2, VALIDER, 1, VOILIER, 1, MER,
4, VALIDER, 1, " & _
           "CATAMARAN, 1, MER, 1, VOILIER, 1, MER, 3, VALIDER, 1, CATAMARAN,
1, MER, 3, VOILIER, 1, MER, 1, VALIDER, 1, " & _
           "BARQUE, 1, MER,
1, CATAMARAN, 1, MER, 1, VOILIER, 1, MER, 2, VALIDER, 1, BARQUE, 1, MER, 2,
CATAMARAN, 1, MER, 2, VOILIER, 1, MER, 4, VALIDER, 1, " & _
           "BARQUE, 1, MER,
5, VOILIER, 1, MER, 3, VALIDER, 1, FREGATE, 1, MER, 2, BARQUE, 1, MER, 2,
VOILIER, 1, MER, 6, VALIDER, 1, " & _
           "FREGATE, 1, MER,
5, CATAMARAN, 1, MER, 2, VOILIER, 1, MER, 2, VALIDER, 1, FREGATE, 1, MER, 10,
VALIDER, 1"
    MsgBox sStr
    
    Dim aRes() As String
    aRes = GetArray(sStr)
    MsgBox aRes(30) & ",
" & aRes(31)
End Sub

Function GetArray(ByVal sStr As String) As String()
    GetArray = Split(sStr, ", ")
End Function

++
PCPT [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
Utilisateur anonyme
24 déc. 2007 à 15:45
Je pense que le probleme viens de tes fin de ligne, les underscore
regarde la:
ProcedureFinie = Array(0, "ANNULER", 1, "ANNULER", 1, "VOILIER", 1, "MER", 1, "VALIDER", 1, _

pas de guillement autour de l'underscore, et la:
"0, 'ANNULER', 1, 'ANNULER', 1, 'VOILIER', 1, 'MER', 1, 'VALIDER', 1, _"

l'underscore est DANS les guillements, du coup ça t'ajoute des infos en plus, et forcément au bout ça déborde.
0
theclem35 Messages postés 8 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 24 décembre 2007
24 déc. 2007 à 16:00
Ben les underscore servent de marques pour ma boucle, pour savoir où chaque ligne s'arrete avant de commencer l'autre.

Les guillemets servent juste a definir l'expression à laquelle est egale LigneX

A moins que tu veuille que je mette les underscore dans cette expression avant chaque retour chariot ?

Procedure1 = Ligne1 & vbCrLf & Ligne2 & vbCrLf & Ligne3 & vbCrLf & Ligne4 & vbCrLf & Ligne5 & vbCrLf & Ligne6 & vbCrLf & Ligne7 & vbCrLf & Ligne8 & vbCrLf & Ligne9 & vbCrLf & Ligne10 & vbCrLf & Ligne11 ?
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 déc. 2007 à 16:30
Bonjour,

on ne peut pas plus traiter un array en se référant à une chaîne de caractères qu'on ne peut invoquer une variable par la chaîne de caractères qui représenterait son nom !!!

or, procedure2 est une chaîne de caractères. Mise dans un array, elle en devient l'élément d'indice 0 et le seul élément.


 


Tu ne peux traiter ainsi un array.
0
Rejoignez-nous