cs_lacourge
Messages postés21Date d'inscriptionmardi 12 avril 2005StatutMembreDernière intervention27 mars 2007
-
4 janv. 2007 à 20:56
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
5 janv. 2007 à 13:12
salut
je dois remplir une base de données à partir d'un fichier texte d'ou je récupère une chaine de 4 ou 5 valeurs séparées par des ":"
c'est la dernière qui est parfois absente (même avec un if), il me met "indice en dehors de la plage"
voici mon code (vb6)
Open Fichier For Input As #1
Do While Not EOF(1) ' Lire le fichier jusqu'à la fin de celui-ci
Line Input #1, chaine
tbl = Split(chaine, ":")
With AdodcArbo.Recordset
.AddNew
.Fields("Id") = tbl(0)
.Fields("PARENTID") = tbl(1)
.Fields("Ref") = tbl(2)
.Fields("Des") = tbl(3)
If tbl(4) <> "" Then 'C'EST ICI QU'EST LE PB
.Fields("RefConst") = tbl(4)
End If
.Update
End With
Loop
Close #1
Est-ce que quelqu'un aurait une idée?
D'avance merci
cs_lacourge
Messages postés21Date d'inscriptionmardi 12 avril 2005StatutMembreDernière intervention27 mars 2007 4 janv. 2007 à 23:32
salut mortalino
j'avais fait plusieurs essais avant d'envoyer ce post mais avec UBound, il m'inscrit deux fois la quatrième valeur lorsque la cinquième est absente.
j'ai essayé une autre méthode avec InStr.
je te remercie de m'avoir répondu.
quand à l'autre interlocuteur: je me félicite que tu connaisses la réponse et que tu aies des leçons à donner mais sache si l'on peut encore t'apprendre quelque chose que ceux qui pose des questions n'ont pas tous ta science et ne sont pas tous malhonnète à vouloir qu'on leur fasse leur code. Le peu que j'ai indiqué dans ma question m'a demandé beaucoup de temps et de recherche (tu peux vérifier comme visiblement tu n'as pas grand-chose à faire, je pose peu de question depuis deux ans pour mon programme parce que j'essaie, je travaille et je cherche). Il se peut également qu'après avoir passé du temps et beaucoup cherché, on demande de l'aide alors qu'on n'est pas très loin d'une solution, ce qu'on ne peut savoir que lorsque l'on a trouvé.
s'il faut lire le réglement avant de poser une question, peut-être faudrait-il en intaurer un avant de répondre encore que le terme répondre soit indigne de certaines remarques qui n'intéressent que celui qui les expriment.
note bien mon nom: à l'avenir, je préfère pas de réponse plutôt qu'une bonne de toi.
cs_lacourge
Messages postés21Date d'inscriptionmardi 12 avril 2005StatutMembreDernière intervention27 mars 2007 5 janv. 2007 à 01:42
je rectifie:
Quand à l'autre interlocuteur: je me félicite que tu connaisses la réponse et que tu aies beaucoup de leçons à donner du haut de la haute opinion que tu as de toi, de ton savoir et de ta subtilité mais sache si l'on peut encore t'apprendre quelque chose que ceux qui réclame de l'aide (réclamer de l'aide pour trouver de l'aide, pourquoi pas?) n'ont pas tous ta science et ne sont pas tous malhonnête à vouloir qu'on leur fasse leur code. Le peu (chacun fait ce qu'il peut avec ce qu'il a, il n'y a pas de honte à savoir peu et à chercher à progresser(à moins que le forum n'ait pour fonction que d'exhiber les génies), tout le monde ne naît pas génie comme toi, mais qui sait, peut-être, avec des conseils et des soutiens comme toi, dans cent ans ...) de code que j'ai écrit dans ma question ma demandé beaucoup de temps, de travail et de recherche. Comme visiblement tu n'as pas grand-chose à faire à part scruter le forum à la recherche de fraude en tout genre ou de moral à faire, tu peux vérifier que je pose peu de question (et pour cause) depuis deux ans que je travaille sur mon programme (et pour cause également). Il se peut également qu'après avoir beaucoup cherché et travaillé, le fait de demander ou de simplement discuter avec d'autres programmeurs dont tu ne fais pas parti quoique tu participes au forum et aux sources (s'il ne faut pas surestimer, il ne faut pas plus tout dénigrer ni tout insulter) permet parfois de trouver des idées qui permettent de résoudre son problème et de s'apercevoir (quand on ne tombe pas sur des oisifs comme toi) qu'on n'était pas loin de la solution.
S'il faut lire le règlement avant de poser une question, peut-être faudrait-il en instaurer un avant de répondre encore que ce soit insulter le terme et l'action de répondre que de l'associer à des choses comme la tienne qui n'intéressent et n'apportent qu'à ceux s'en soulagent.
je n'indique pas ma solution pas très excellente à mon goût mais qui me suffira et qui me permet d'avancer un peu (çà te permettra si je m'exprime à nouveau dans le forum, peut-être, dans quelques années, d'exhiber ta science et de déverser ton ironie sur le manque d'optimisation de mon misérable code): ceci associé à ta réponse des plus judicieuses permettra à ceux qui feront des recherches dans le forum de perdre leur temps comme toi à aller visiter ta réponse inutile et stérile ainsi que d'avoir une réponse en moins à leur recherche (à rajouter aux questions sans réponses) plutôt que d'avancer dans leur problème.
si tu avais eu des professeurs comme toi, aujourd'hui, tu ne saurais même pas lire et écrire! Continu de te faire du bien!
En clair, ravale ta morgue!
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 janv. 2007 à 08:58
Hello All
[auteurdetail.aspx?ID= 488952 lacourge]
Si tu as trouvé une solution, je trouve dommage de ne pas la faire partager. Qu est ce qui t'en empêche?
Après tout le Forum est un peu là pour cela.
En revanche pour en revenir à ton problème.
L'erreur : Indice en dehors de la plage survient (le plus souvent) lorsque tu fais appel à un indice de tableau qui n'existe pas.
Je t'expliques ce qu'à voulu te dire [auteurdetail.aspx?ID=615490 jmfmarques]
Tu dis toi meme que tu récupère une chaine de 4 ou 5 valeurs.
Exemple 1:2:3:4 et 1:2:3:4:5
Le resultat de la Fonction Split sera alors Soit:
tbl(0) = 1
Hors si tu récupère 4 valeurs et que tu essaie de taper tbl(4) cela te donnera cette erreur car tbl(4) n'EXISTE PAS , ce n'est pas qu'il est egal à "" ou VbNullString, C'est Qu'il n'existe pas.
C'est donc pour cette raison que l'on te conseille de te pencher sur la fonction Ubound qui te renvoie la valeur de l'indice supérieur d'un tableau.
Donc pour en revenir à ton exemple:
If tbl(4) <> "" Then .Fields("RefConst") = tbl(4)
Ceci n'est possible QUE si Ubound(tbl) > = 4 .. et hopSoit : If UBound(tbl) >4 Then .Fields("RefConst") tbl(4)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 janv. 2007 à 12:12
Bonjour,
Je voudrais simplement dire à Lacourge que le seul professeur que j'aie eu en VB (à une époque à laquelle internet, google et les forums n'existaient pas encore....et n'étaient même pas prévisibles), c'est moi-même, précisément ... Et, bien sûr, j'ai beaucoup bûché l'aide en ligne ...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 janv. 2007 à 13:12
Re-bonjour, lacourge,
M'est-il permis de te préciser (j'ai déjà eu l'occasion de l'exprimer dans une autre discussion), que de surcroît, personnellement, je préfère (pour des raisons de rapidité), ne pas utiliser Split et me servir directement de Instr et de Mid ?
Je te conseille (petit exercice intéressant) de t'exercer à le faire également... c'est enrichissant ... et tu n'as plus à te préoccuper d'un Ubound mal compris ou jamais "rencontré" ...