Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche d'une valeur dans un tableau

4 réponses
Avatar
Apitos
Bonjour =C3=A0 tous,

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

Application.Match et Application.Index

mais voila une erreur d'ex=C3=A9cution '5' est declench=C3=A9 :

Argument ou appel de proc=C3=A9dure incorrect


Voila le code utilis=C3=A9 :

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

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

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

'Scinder une ligne de txt
nn =3D Split(Txt(i), " ")
' On r=C3=A9cup=C3=A8re un nom
' et =C3=A9viter d'avoir le chiffre en dernier
' dans certain noms (0,1 ou 2)
If Len(nn(UBound(nn) - 1)) > 1 Then
n =3D nn(UBound(nn) - 1)
Else
n =3D nn(UBound(nn) - 2)
End If

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

' MsgBox "Ligne : " & Txt(i) & vbCrLf & _
"Site : " & n & vbCrLf & _
"Nbr raccord=C3=A9s : " & h

' Doublures de noms de sites
' Test si des noms se r=C3=A9p=C3=A8tent dans le tableau Txt

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

TbRacc(1, r) =3D n: TbRacc(2, r) =3D TbRacc(2, r) + h
Else
TbRacc(2, lr) =3D TbRacc(2, lr) + h
End If
Else
r =3D r + 1
ReDim Preserve TbRacc(1 To 2, 1 To r)
TbRacc(1, r) =3D n: TbRacc(2, r) =3D 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 =3D LBound(arr) To UBound(arr)
' If arr(i) =3D stringToBeFound Then
If InStr(1, arr(i), stringToBeFound) > 0 Then
IsInArray =3D True
Exit Function
End If
Next i
IsInArray =3D False

End Function
'------------------------------------------=20


Merci d'avance.

4 réponses

Avatar
MichD
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
Avatar
Apitos
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
Avatar
MichD
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
Avatar
Apitos
Merci MichD.