Recherche d'une valeur dans un tableau

Le
Apitos
Bonjour à tous,

J'aimerais trouver une valeur dans un tableau pour ensuite déclencher =
un traitement de données, pour cela j'utilise les deux fonctions :

Application.Match et Application.Index

mais voila une erreur d'exécution '5' est declenché :

Argument ou appel de procédure incorrect


Voila le code utilisé :

-
Sub test()
Dim Txt(), TbRacc()
Dim i As Long, r As Long, lr As Long, n$

ReDim Txt(1 To 10)
Txt(1) = "-->> Ksr Chl 0 [19]"
Txt(2) = "-->> Ksr Chl 1 [21]"
Txt(3) = "-->> Zmlt [30]"
Txt(4) = "-->> Srg [4]"
Txt(5) = "-->> Rchg [5]"
Txt(6) = "-->> Hmd [26]"
Txt(7) = "-->> Frn 0 [73]"
Txt(8) = "-->> Frn 1 [89]"
Txt(9) = "-->> Mdrs [15]"
Txt(10) = "-->> Tghm [12]"

For i = LBound(Txt) To UBound(Txt)

'Scinder une ligne de txt
nn = Split(Txt(i), " ")
' On récupère un nom
' et éviter d'avoir le chiffre en dernier
' dans certain noms (0,1 ou 2)
If Len(nn(UBound(nn) - 1)) > 1 Then
n = nn(UBound(nn) - 1)
Else
n = nn(UBound(nn) - 2)
End If

h = Split(Split(Txt(i), "[")(1), "]")(0)

' MsgBox "Ligne : " & Txt(i) & vbCrLf & _
"Site : " & n & vbCrLf & _
"Nbr raccordés : " & h

' Doublures de noms de sites
' Test si des noms se répètent dans le tableau Txt

If IsInArray(n, Array("CC", "Trt", "Frn", "Sgr", "Ksr Chl")) Then
' If n = "Frenda" Then MsgBox "Frenda !!"
EstDans = Application.Match(n, Application.Index(TbRacc, 1), 0=
)
' EstDans = Application.VLookup(n, TbRacc, 2,=
False)
If IsError(EstDans) Then
On Error GoTo 0
r = r + 1
lr = r
ReDim Preserve TbRacc(1 To 2, 1 To r)

TbRacc(1, r) = n: TbRacc(2, r) = TbRacc(2, r) + h
Else
TbRacc(2, lr) = TbRacc(2, lr) + h
End If
Else
r = r + 1
ReDim Preserve TbRacc(1 To 2, 1 To r)
TbRacc(1, r) = n: TbRacc(2, r) = h
' MsgBox "Ajout du site : " & n & vbCrLf & _
"Avec Abn Raccor : " & h
End If
Next i
End Sub
Public Function IsInArray(stringToBeFound As String, arr As Variant) As Boo=
lean
Dim i
For i = LBound(arr) To UBound(arr)
' If arr(i) = stringToBeFound Then
If InStr(1, arr(i), stringToBeFound) > 0 Then
IsInArray = True
Exit Function
End If
Next i
IsInArray = False

End Function
'


Merci d'avance.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26450225
Bonjour,
Cette variable "TbRacc" est déclarée comme tableau (array) mais en aucun
moment tu n'as défini le contenu de ce tableau. C'est ce pour quoi tu
obtiens ce message d'erreur lors de l'exécution de cette ligne de code :
EstDans = Application.Match(n, Application.Index(TbRacc, 1), 0)
Et la variable "EstDans" devrait déclarer As Variant.
MichD
Apitos
Le #26450227
Bonjour MichD,
TbRacc ne contient aucune valeur de départ.
TbRacc est alimenté selon des critères.
On peut dire faire des sous totaux de valeurs en Txt() dans TbRacc().
De mon exemple :
Txt(1) = "----->> Ksr Chl 0 [19]"
Txt(2) = "----->> Ksr Chl 1 [21]"
Txt(3) = "----->> Zmlt [30]"
Txt(4) = "----->> Srg [4]"
Txt(5) = "----->> Rchg [5]"
Txt(6) = "----->> Hmd [26]"
Txt(7) = "----->> Frn 0 [73]"
Txt(8) = "----->> Frn 1 [89]"
Txt(9) = "----->> Mdrs [15]"
Txt(10) = "----->> Tghm [12]"
Le tableau TbRacc obtenu sera :
TbRacc(1, 1) = "Chl"
TbRacc(1, 2) = "Zmlt"
TbRacc(1, 3) = "Srg"
TbRacc(1, 4) = "Rchg"
TbRacc(1, 5) = "Hmd"
TbRacc(1, 6) = "Frn"
TbRacc(1, 7) = "Mdrs"
TbRacc(1, 8) = "Tghm"
TbRacc(2, 1) = 40 ' 19+21
TbRacc(2, 2) = 30
TbRacc(2, 3) = 4
TbRacc(2, 4) = 5
TbRacc(2, 5) = 26
TbRacc(2, 6) = 162 ' 73+89
TbRacc(2, 7) = 15
TbRacc(2, 8) = 12
MichD
Le #26450237
Ce n'est pas à moi que tu dois dire ce que contient le tableau TbRacc() mais
tu dois définir ta variable dans la procédure. Quand cette dernière essaie
de résoudre cette ligne de code, ton tableau TbRacc() est vide. Si tu veux
que la procédure passe par dessus cette erreur, tu dois utiliser la ligne de
code "On Error Resume Next". Cependant, il serait surprenant que tu
réussisses à obtenir le résultat attendu.
EstDans = Application.Match(n, Application.Index(TbRacc, 1), 0)
MichD
Apitos
Publicité
Poster une réponse
Anonyme