mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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"
<!--
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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...
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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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 ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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)
nicobox2
Messages postés23Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention14 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 ...