Indice en dehors de plage dans un array

[Résolu]
Signaler
Messages postés
8
Date d'inscription
lundi 3 décembre 2007
Statut
Membre
Dernière intervention
24 décembre 2007
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
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

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.
Messages postés
8
Date d'inscription
lundi 3 décembre 2007
Statut
Membre
Dernière intervention
24 décembre 2007

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 ?
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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.