Bonjour,
Je voulais savoir :
Comment savoir si dans un tableau, j'ai des doublons ?
Merci de vos indications
Arnaud
Version imprimable
Bonjour,
Je voulais savoir :
Comment savoir si dans un tableau, j'ai des doublons ?
Merci de vos indications
Arnaud
Bonjour
Quelle type de tableau ?
Doublon en ligne, en colonne ou les 2 ?
Bonjour,
En gros, j'ai un tableau dynamique
Et je veux savoir s'il n'y a pas de doublon. Je ne veux pas le dédoublonner, mais juste savoir si une valeur est en double.Code:
1
2 Dim Montableau Montableau = Array(Element1,Element2,Element3,...,Elementn)
Encore merci.
Un exemple à la volée :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Dim Montableau, i,j '(compteurs) Dim Doublon ' Booléen pour test Montableau = Array(Element1,Element2,Element3,Element4,Element5,Element6,Element7) for i=LBound(Montableau) to UBound(Montableau) montableau(i)=i+4 'Remplissage d'un tableau exemple next montableau(5) = 8 ' modification de l'une des valeur du tableau pour avoir un doublon Doublon = False For i=LBound(Montableau) to UBound(Montableau) - 1 For j = i + 1 To UBound(Montableau) If Montableau(i) = Montableau(j) Then Doublon = True Exit For End If if Doublon then msgbox "Position = " & cstr(j) & " " & Doublon Next ' pour j Next ' pour i
Merci beaucoup !
J'ai apporté quelques modifications pour l’implémenter dans mon projet :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Function Isdouble(Data) Dim Montableau, i,j '(compteurs) Dim Doublon ' Booléen pour test Montableau = Split(Data, ";") Doublon = False For i=LBound(Montableau) to UBound(Montableau) - 1 For j = i + 1 To UBound(Montableau) If Montableau(i) = Montableau(j) Then Doublon = True Exit For End If If Doublon then Isdouble = "1" Else Isdouble = "0" End if Next ' pour j Next ' pour i End Function MsgBox Isdouble("TOTO;TITI;TATA;TUTU;POPO;TOTO;TITI")
J'ai un petit problème : certains tableau à analysé comporte des "-" et j'aimerai qu'ils ne soient pas pris en compte comme doublon.
J'ai fais ceci, mais cela ne fonctionne pas :
J'ai une erreur surCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Function Isdouble(Data) Dim Montableau, i,j,x,y '(compteurs) Dim Doublon ' Booléen pour test mTab = Split(Data, ";") y=0 For x = 1 To (UBound(mTab)) If mTab(i) <> "-" Then Montableau(y) = mTab(x) y = y+1 Else y = y-1 End If Next Doublon = False For i=LBound(Montableau) to UBound(Montableau) - 1 For j = i + 1 To UBound(Montableau) If Montableau(i) = Montableau(j) Then Doublon = True Exit For End If If Doublon then Isdouble = "1" Else Isdouble = "0" End If Next ' pour j Next ' pour i End Function MsgBox Isdouble("-;-;groupe3\AE-DBI\Shared\0-STAFF;-")
Que faire ?Code:For i=LBound(Montableau) to UBound(Montableau) - 1
La ligne 7 de ton code For x = 1 To (UBound(mTab)) devrait être :
For x = 0 To (UBound(mTab)) car le 1er élément de ce type de tableau est indexé à 0(zéro).
D'autre part, tu as redimensionné le tableau Montableau et tu n'en as pris tenu compte dans la suite du code.
Justement, mon tableau peut être de taille variable.
En faite, je prend mon tableau d'origine que je filtre. Je recrée un tableau sans les caractères "-" ou vide.
Ensuite, dans ce nouveau tableau, je souhaite déterminer si j'ai des valeurs en doubles. De par le filtre effectué en amont, la taille de celui-ci est variable.
La génération et la lecture de mon tableau filtré fonctionne correctement.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Function Isdouble(Data) Dim Montableau, i,j,x,y '(compteurs) Dim Doublon ' Booléen pour test Dim Data2 ' Génération d'un tableau sans les caractères suivant : "" et "-" mTab = Split(Data, ";") for i=LBound(mTab) to UBound(mTab) If mTab(i) <> "-" AND mTab(i) <> "" Then If IsEmpty(Data2) Then Data2 = mTab(i) Else Data2 = Data2 & ";" & mTab(i) End If End If next ' Déterminer s'il y a des doublons dans le tableau Montableau = Split(Data2, ";") Doublon = False For i=LBound(Montableau) to UBound(Montableau) - 1 For j = i + 1 To UBound(Montableau) If Montableau(i) = Montableau(j) Then Doublon = True Exit For End If If Doublon then Isdouble = "1" Else Isdouble = "0" End if Next ' pour j Next ' pour i End Function MsgBox Isdouble("-;-;;xxxxxx\xx-xxx\Shared\0-xxxx;-;xxxxxx\xx-xxx\Shared\0-xxxx") MsgBox Isdouble("-;xxxxxx\xx-xxx\Shared\0-xxxx;-;yyyyyy\yy-yyy\Shared\0-yyyy;-;;-")
Cependant, pour déterminer s'il y a doublon ou pas, ca ne fonctionne pas bien. Le problème c'est que mon tableau filtré est de taille variable. Alors que ce script fonctionne pour 7 éléments
Edit : bon, je ne comprend pas, mais ça fonctionne maintenant avec une taille variable...