Connaitre le nombre d'elements (sans doublons) d'un tableau

Résolu
nicobox2 Messages postés 23 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 14 décembre 2006 - 6 nov. 2006 à 19:09
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 8 nov. 2006 à 00:38
Bonjour,

Y a t-il une fonction VB qui permet de connaitre le nombre d'élément d'un tableau mais sans les doublons ?

Ex de tableau :

toto
titi
toto
tutu

Nombre d'éléments : 3

Car là j'ai mal au crane et j'arrive plus à reflechir ...

D'avance merci bcp !

56 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
7 nov. 2006 à 13:42
Salut Chaibat,

"et c' est mon dernier mot !"
>> t'as oublié "Jean-Pierre" ! 

Bien ta fonction, je n'ai (actuellement...) aucun moyen de déterminer avec précisions le temps d'exécution et l'utilisation du cpu de chaque code, mais je reconnais que ma collection affole (un peu) plus le cpu que les boucles. (tests visuels des perf)

Donc, voilà (faute avoué, faute ...)

Par contre, (je ne dis jamais mon dernier mot ), pour ta fonction (qui trie en plus les données alphanumériquement ), j'y aurais mis le paramètre
paramArray sTab() As String, non ?
Comme ça, T() n'est pas en dur dans la function.

Enfin, après ce n'est que du fignolage de code.
(ps : je ne t'oublie pas, je regarde cet aprem pour...)

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
nicobox2 Messages postés 23 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 14 décembre 2006
7 nov. 2006 à 14:08
Mais non .... car les listes ne fonctionnent pas en VBScript ...
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
7 nov. 2006 à 17:15
eh oui Mortalino , je sais, il ne faut jamais dire jamais !
et comment resister , surtout à toi ...
Pour la collection, c' est vrai que j' ai eu peur
pour ton cpu

Ne t' affoles pas nicobox !
Mortalino vient de te donner la solution.
Passes ton tableau en paramètres ( paramArray sTab() As String)
tries le dans la fonction, et enlève sList.


Pour plus de précision, fais nous signe...
avec nous c' est jamais fini

Ps:Mortalino, j' espère que tu n' as pas oublié ma commande ?!
     Post moi un MP à ce sujet, on en discutera après...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 nov. 2006 à 17:19
salut,
çà te va çà?

Option Explicit
'
Private Sub Form_Load()
    Dim sTableau(1 To 4)    As String

    sTableau(1) =  "proc1"
    sTableau(2) = "proc2"
    sTableau(3) = "proc1"
    sTableau(4) = "proc1"

    MsgBox CountArrayWithoutDouble(sTableau)
    Unload Me
End Sub
'
Function CountArrayWithoutDouble(aArray() As
String) As
Long
    Dim aBuff() As String
    aBuff = aArray
    
    Dim i&, j&, sBuffer As String
    i = UBound(aBuff) - LBound(aBuff) + 1
    
    If i = 1 Then
        CountArrayWithoutDouble = 1
    ElseIf i = 2 Then
        CountArrayWithoutDouble = IIf(aBuff(LBound(aBuff)) = aBuff(LBound(aBuff) + 1), 1, 2)
    Else
        CountArrayWithoutDouble = 0
        For i = LBound(aBuff) To UBound(aBuff) - 1
            For j = i + 1 To UBound(aBuff)
                If (aBuff(i) = aBuff(j)) Then aBuff(j) =
vbNullChar
            Next j
        Next i
    End If
    
    For i = LBound(aBuff) To UBound(aBuff)
        If aBuff(i) <> vbNullChar Then
CountArrayWithoutDouble = CountArrayWithoutDouble +
1
    Next i

    Erase aBuff
End Function

<small>Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
7 nov. 2006 à 17:20
Pardon Mortalino , j' ai relu, j' ai compris .
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 nov. 2006 à 17:22
WOUPS
il faut remonter la 2e boucle, ce qui donne :

Function CountArrayWithoutDouble(aArray() As
String) As
Long
    Dim aBuff() As String
    aBuff =  aArray
    
    Dim i&, j&, sBuffer As String
    i = UBound(aBuff) - LBound(aBuff) + 1
    
    If i = 1 Then
        CountArrayWithoutDouble = 1
    ElseIf i = 2 Then
        CountArrayWithoutDouble = IIf(aBuff(LBound(aBuff)) = aBuff(LBound(aBuff) + 1), 1, 2)
    Else
        CountArrayWithoutDouble = 0
        For i = LBound(aBuff) To UBound(aBuff) - 1
            For j = i + 1 To UBound(aBuff)
                If (aBuff(i) = aBuff(j)) Then aBuff(j) =
vbNullChar
            Next j
        Next i
        For i = LBound(aBuff) To UBound(aBuff)
            If aBuff(i) <> vbNullChar Then
CountArrayWithoutDouble = CountArrayWithoutDouble +
1
        Next i
    End If
    
    Erase aBuff
End Function

<small>Coloration
syntaxique automatique [AFCK] </small>
       

<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
7 nov. 2006 à 17:28
et t' étais ou depuis hier, PCPT ?
Moi ça me plait , et même si c' est pas encore testé,
ça au moins le mérite d' être inventé !
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
7 nov. 2006 à 17:31
Bon beh je pense qu'il n'y a pas photo :
côté optimisation, on est servi.

Voilà une belle fonction toute prête !
Beh tu sais ce qui te reste à faire...

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
7 nov. 2006 à 17:36
tu vois Mortalino ,
on a eu raison d' insister...
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
7 nov. 2006 à 17:44
juste une petite remarque:
Ne faudrait-il pas éviter d' utiliser le nom de la fonction
comme une variable ?
Je pense qu' il pourrait y avoir erreur à ce niveau
CountArrayWithoutDouble = CountArrayWithoutDouble + 1
non ?
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
7 nov. 2006 à 17:53
et beh non !
je viens de tester...rien à dire.
Et comme disent les gens du cinéma : c' est dans la boite .
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 nov. 2006 à 18:11
à part peut-être pour le lecteur, sinon pas d'erreur possible
fonction retourne.
donc comme fonction = ...., VB interprète correctement en tant que variable (tant que le type est OK et que la fonction ne retourne pas un tableau)
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
7 nov. 2006 à 18:18
au départ j' ai pensé à une eventuelle erreur concernanant
la fonction qui se retrouve des côtés de l' opérateur.
Mais au final, c' est Ok !

Bonne soirée à tous

PS :
on a remarqué peut être que parfois je parle tout seul
Et pourtant je n' ai pas l' habitude du chat .
C' est peut être pour ça que je compense !
0
nicobox2 Messages postés 23 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 14 décembre 2006
7 nov. 2006 à 21:33
Bonjour à tous,

Voilà ca fonctionne enfin avec le code de  PCPT ....
à l'exception que le bon resultat estCountArrayWithoutDouble  - 1 mais bon tu es quand meme le grand gagnant :-)
Pour le code de Chaibat désolé mais le résultat n'est pas toujours pas bon ...

Mais merci quand meme à tous pour votre aide !
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 nov. 2006 à 00:08
Pour le -1 c'est pas une histoire que le comptage commence à 1 et pas 0 ?
alors que le tableau commence à 0

Chris...
Web : Firstruner
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 nov. 2006 à 00:38
nop, ubound et lbound pris en compte

Prenez un instant pour répondre à ce sondage svp
0
Rejoignez-nous