Page 1 sur 1
Subscript out of range - Erreur dans une boucle

Publié:
20 Juin 2011 à 14:34
par Cyril Niang
Bonjour,
J'ai une erreur bizarre sur le code suivant :
- Code : Tout sélectionner
Dim recepients() As String
Dim listeNoms As Variant
Dim Nb As Integer
If (s.Fieldgettext("CycleCourt") = "") Then
If (s.fieldgettext("ProjectMngr") <> "") Then
listeNoms = Split (s.fieldgettext("ProjectMngr"), ";") ' J'ai deux noms dans ce champ multi-valué
Nb=Ubound (listeNoms) 'Il me retourne la valeur 1
Redim recipients (Nb+1) 'Car je dois rajouter une autre personne
For x = 0 To Nb
recepients(x)= listeNoms(x) & "/OU/O" ' Là j'ai l'erreur Subscript Out Of Range
Next
End If
End If
recipients(Nb+1) = s.FieldGetText("NomCommercial") & "/OU/O" ' La dernière personne à rajouter.
En mode debug, le tableau RECEPIENTS dispose bien de trois indices [0], [1], [2] et LISTENOMS, deux indices [0], [1].
Pourquoi ça me pose un problème ?

Publié:
20 Juin 2011 à 14:40
par Cyril Niang
arrrrrffffff!!!! J'ai vu mon problème c'est à cause d'une lettre!!!! recipients au lieu de recEpients!!!! Ahhh! il y a des jours, je vous jure...

Publié:
20 Juin 2011 à 14:40
par Michael DELIQUE
salut
j'ai du mal a comprendre le but de ton code !?

Publié:
20 Juin 2011 à 15:17
par Cyril Niang
Salut Michael,
Oui c'est vrai je n'ai pas mis toutes les déclarations... Mais j'ai trouvé mon erreur!!

Publié:
20 Juin 2011 à 15:18
par Michael DELIQUE
tu sais qu'il ya des functions native en Ls pour ajouter des valeurs a un array

Publié:
20 Juin 2011 à 15:42
par Cyril Niang
C'est vrai que je n'ai pas poussé ma recherche à ce sujet! Quelles sont-elles?

Publié:
20 Juin 2011 à 15:52
par Michael DELIQUE
re,
- ArrayAppend
- ArrayGetIndex
- ArrayReplace
- ArrayUnique
l'aide en ligne te donnera tous les détails

Publié:
20 Juin 2011 à 22:48
par roubech
si je peux me permettre, ce qui me gene dans ce bout de code, c'est de nommer une variable s alors qu'elle représente apparement un NotesUIDocument. s est de type NotesSession en générale
et si tu n'as pas d'obligation à travailler en UI, tu récupères directement un array avec doc.ProjectMngr plutôt que faire un split sur une chaine de texte obtenue par uidoc.FieldGetText (qui j'imagine fait un join à partir de l'array)
avec la fonction ArrayAppend indiquée par Michael, ça pourrait donner qch comme recipients = ArrayAppend( doc.ProjectMngr , doc.NomCommercial )
mais je vois que tu parcours les valeurs pour ajouter OU/O je suppose que c'est tu as remplacer par les valeurs de OU et O dans ton cas. Mais si ces valeurs sont en dur, c'est qu'il n'y a pas plusieurs OU et donc pas de risque confusion en utilisant que le CN donc si tu veux utiliser recipients comme destinataires d'un mail, OU/O n'est pas indispensable pour le routage
Mais par habitude, je préfère stocker dans les doc les noms complet plutot que les CN

Publié:
24 Juin 2011 à 11:44
par Cyril Niang
roubech,
Ce bout de code est tiré d'une fonction CHECKVALIDATION dans laquelle je passe en paramètre le UIDOC. Cette fonction est appelée dans la méthode QuerySave (Source, Continue), donc j'ai trouvé normal de passer cette variable UIDOC.
Concernant les OU/O, le champ ProjectMngr est rempli par un champ "checkbox" dans lequel je remplis en dur les noms car ils ne sont pas appelés à changer. Par soucis d'affichage, j'ai renseigné les noms tels qu'ils sont dans le CN.
Michael,
Merci pour cette astuce, je vais tacher d'améliorer mon code.