Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
les
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
les
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
les
doublons) ??? 2 dans l'exemple
merci
Mets toutes les valeurs dans une listebox triée (propriété .sorted Ce n'est pas très élégant, il exitse des algo de tri pour vb dispo sur
Mets toutes les valeurs dans une listebox triée (propriété .sorted Ce n'est pas très élégant, il exitse des algo de tri pour vb dispo sur
Mets toutes les valeurs dans une listebox triée (propriété .sorted Ce n'est pas très élégant, il exitse des algo de tri pour vb dispo sur
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
les
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
les
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
les
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs différentes (le total -
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs
différentes (le total - les
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs
différentes (le total - les
doublons) ??? 2 dans l'exemple
merci
Bonjour,
J'ai un tableau par exemple
dim z(0 to 20) as string
chaque valeur différe mais les doublons sont possibles
z(0) = "a"
z(1) = "a"
z(2) = "b"
etc...
comment faire pour compter le nombre de valeurs
différentes (le total - les
doublons) ??? 2 dans l'exemple
merci
Salut,
Le plus simple mais pas le plus rapide : utiliser un
dictionary :
voici la classe CDictionary :
Option Explicit
Option Compare Text
Private Type tcData
strID As String
vData As Variant
End Type
Private m_tblData() As tcData
Public Sub Add(ID As String, vData As Variant)
Dim tLigne As tcData
tLigne.vData = vData
tLigne.strID = ID
Call AjoutTableauLigne(tLigne, m_tblData)
End Sub
Public Sub Remove(ID As Variant)
Select Case VarType(ID)
Case vbInteger, vbLong
Call SupprimeTableauLigne(CInt(ID) - 1,
m_tblData)
Case vbString
Call
SupprimeTableauLigne(GetIndexFromID(CStr(ID)), m_tblData)
End Select
End Sub
Public Property Get Count() As Integer
Count = TableauCount(m_tblData)
End Property
Public Property Get Item(ID As Variant) As Variant
Attribute Item.VB_UserMemId = 0
Select Case VarType(ID)
Case vbInteger, vbLong
Item = m_tblData(CInt(ID) - 1).vData
Case vbString
Item =
m_tblData(GetIndexFromID(CStr(ID))).vData
End Select
End Property
Public Property Let Item(ID As Variant, ByVal vNewValue As
Variant)
Select Case VarType(ID)
Case vbInteger, vbLong
m_tblData(CInt(ID) - 1).vData = vNewValue
Case vbString
m_tblData(GetIndexFromID(CStr(ID))).vData =
vNewValue
End Select
End Property
Private Function GetIndexFromID(ID As String) As Integer
If EstTableauValide(m_tblData) Then
Dim i As Integer
For i = 0 To UBound(m_tblData)
If m_tblData(i).strID = ID Then
GetIndexFromID = i
Exit For '//BREAK
End If
Next
End If
End Function
Private Sub Class_Terminate()
Erase m_tblData
End Sub
Private Sub AjoutTableauLigne(tLigne As tcData,
tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
Dim nInd As Integer
nInd = UBound(tblTableau) + 1
ReDim Preserve tblTableau(nInd)
tblTableau(nInd) = tLigne
Else
ReDim tblTableau(0)
tblTableau(0) = tLigne
End If
End Sub
Private Function EstTableauValide(tblTableau() As tcData)
As Boolean
On Error Resume Next
Err.Clear
Dim lTest As Long
lTest = UBound(tblTableau)
EstTableauValide = (Err.Number = 0)
On Error GoTo 0
End Function
Private Sub SupprimeTableauLigne(Index As Integer,
tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
If Index <= UBound(tblTableau) Then
Dim tblTmp() As tcData, i As Integer
For i = 0 To UBound(tblTableau)
If i <> Index Then
Call AjoutTableauLigne(tblTableau(i),
tblTmp)
End If
Next
tblTableau = tblTmp
Erase tblTmp
End If
End If
End Sub
Private Function TableauCount(tblTableau() As tcData) As
Integer
If EstTableauValide(tblTableau) Then
TableauCount = UBound(tblTableau) + 1
Else
TableauCount = 0
End If
End Function
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Salut,
Le plus simple mais pas le plus rapide : utiliser un
dictionary :
voici la classe CDictionary :
Option Explicit
Option Compare Text
Private Type tcData
strID As String
vData As Variant
End Type
Private m_tblData() As tcData
Public Sub Add(ID As String, vData As Variant)
Dim tLigne As tcData
tLigne.vData = vData
tLigne.strID = ID
Call AjoutTableauLigne(tLigne, m_tblData)
End Sub
Public Sub Remove(ID As Variant)
Select Case VarType(ID)
Case vbInteger, vbLong
Call SupprimeTableauLigne(CInt(ID) - 1,
m_tblData)
Case vbString
Call
SupprimeTableauLigne(GetIndexFromID(CStr(ID)), m_tblData)
End Select
End Sub
Public Property Get Count() As Integer
Count = TableauCount(m_tblData)
End Property
Public Property Get Item(ID As Variant) As Variant
Attribute Item.VB_UserMemId = 0
Select Case VarType(ID)
Case vbInteger, vbLong
Item = m_tblData(CInt(ID) - 1).vData
Case vbString
Item =
m_tblData(GetIndexFromID(CStr(ID))).vData
End Select
End Property
Public Property Let Item(ID As Variant, ByVal vNewValue As
Variant)
Select Case VarType(ID)
Case vbInteger, vbLong
m_tblData(CInt(ID) - 1).vData = vNewValue
Case vbString
m_tblData(GetIndexFromID(CStr(ID))).vData =
vNewValue
End Select
End Property
Private Function GetIndexFromID(ID As String) As Integer
If EstTableauValide(m_tblData) Then
Dim i As Integer
For i = 0 To UBound(m_tblData)
If m_tblData(i).strID = ID Then
GetIndexFromID = i
Exit For '//BREAK
End If
Next
End If
End Function
Private Sub Class_Terminate()
Erase m_tblData
End Sub
Private Sub AjoutTableauLigne(tLigne As tcData,
tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
Dim nInd As Integer
nInd = UBound(tblTableau) + 1
ReDim Preserve tblTableau(nInd)
tblTableau(nInd) = tLigne
Else
ReDim tblTableau(0)
tblTableau(0) = tLigne
End If
End Sub
Private Function EstTableauValide(tblTableau() As tcData)
As Boolean
On Error Resume Next
Err.Clear
Dim lTest As Long
lTest = UBound(tblTableau)
EstTableauValide = (Err.Number = 0)
On Error GoTo 0
End Function
Private Sub SupprimeTableauLigne(Index As Integer,
tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
If Index <= UBound(tblTableau) Then
Dim tblTmp() As tcData, i As Integer
For i = 0 To UBound(tblTableau)
If i <> Index Then
Call AjoutTableauLigne(tblTableau(i),
tblTmp)
End If
Next
tblTableau = tblTmp
Erase tblTmp
End If
End If
End Sub
Private Function TableauCount(tblTableau() As tcData) As
Integer
If EstTableauValide(tblTableau) Then
TableauCount = UBound(tblTableau) + 1
Else
TableauCount = 0
End If
End Function
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Salut,
Le plus simple mais pas le plus rapide : utiliser un
dictionary :
voici la classe CDictionary :
Option Explicit
Option Compare Text
Private Type tcData
strID As String
vData As Variant
End Type
Private m_tblData() As tcData
Public Sub Add(ID As String, vData As Variant)
Dim tLigne As tcData
tLigne.vData = vData
tLigne.strID = ID
Call AjoutTableauLigne(tLigne, m_tblData)
End Sub
Public Sub Remove(ID As Variant)
Select Case VarType(ID)
Case vbInteger, vbLong
Call SupprimeTableauLigne(CInt(ID) - 1,
m_tblData)
Case vbString
Call
SupprimeTableauLigne(GetIndexFromID(CStr(ID)), m_tblData)
End Select
End Sub
Public Property Get Count() As Integer
Count = TableauCount(m_tblData)
End Property
Public Property Get Item(ID As Variant) As Variant
Attribute Item.VB_UserMemId = 0
Select Case VarType(ID)
Case vbInteger, vbLong
Item = m_tblData(CInt(ID) - 1).vData
Case vbString
Item =
m_tblData(GetIndexFromID(CStr(ID))).vData
End Select
End Property
Public Property Let Item(ID As Variant, ByVal vNewValue As
Variant)
Select Case VarType(ID)
Case vbInteger, vbLong
m_tblData(CInt(ID) - 1).vData = vNewValue
Case vbString
m_tblData(GetIndexFromID(CStr(ID))).vData =
vNewValue
End Select
End Property
Private Function GetIndexFromID(ID As String) As Integer
If EstTableauValide(m_tblData) Then
Dim i As Integer
For i = 0 To UBound(m_tblData)
If m_tblData(i).strID = ID Then
GetIndexFromID = i
Exit For '//BREAK
End If
Next
End If
End Function
Private Sub Class_Terminate()
Erase m_tblData
End Sub
Private Sub AjoutTableauLigne(tLigne As tcData,
tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
Dim nInd As Integer
nInd = UBound(tblTableau) + 1
ReDim Preserve tblTableau(nInd)
tblTableau(nInd) = tLigne
Else
ReDim tblTableau(0)
tblTableau(0) = tLigne
End If
End Sub
Private Function EstTableauValide(tblTableau() As tcData)
As Boolean
On Error Resume Next
Err.Clear
Dim lTest As Long
lTest = UBound(tblTableau)
EstTableauValide = (Err.Number = 0)
On Error GoTo 0
End Function
Private Sub SupprimeTableauLigne(Index As Integer,
tblTableau() As tcData)
If EstTableauValide(tblTableau) Then
If Index <= UBound(tblTableau) Then
Dim tblTmp() As tcData, i As Integer
For i = 0 To UBound(tblTableau)
If i <> Index Then
Call AjoutTableauLigne(tblTableau(i),
tblTmp)
End If
Next
tblTableau = tblTmp
Erase tblTmp
End If
End If
End Sub
Private Function TableauCount(tblTableau() As tcData) As
Integer
If EstTableauValide(tblTableau) Then
TableauCount = UBound(tblTableau) + 1
Else
TableauCount = 0
End If
End Function
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Bonjour,
Je ne connais pas de recette toute faite, mais la méthode
que j'utiliserais
est la suivante.
Faire un tri en conservant les indices.
Faire une comparaison de 1 au nombre d'éléments et sauter
lorsqu'il y a un
doublon.
Compter chaque élément unique.
Si tu le désires, je dois avoir codé une telle logique,
mais il te serait
plus formateur d'essayer auparavant ... ;-)
Aski
jc2nantes wrote:
|| Bonjour,
||
|| J'ai un tableau par exemple
||
|| dim z(0 to 20) as string
||
|| chaque valeur différe mais les doublons sont possibles
||
|| z(0) = "a"
|| z(1) = "a"
|| z(2) = "b"
|| etc...
||
|| comment faire pour compter le nombre de valeurs
différentes (le
|| total - les doublons) ??? 2 dans l'exemple
||
|| merci
Bonjour,
Je ne connais pas de recette toute faite, mais la méthode
que j'utiliserais
est la suivante.
Faire un tri en conservant les indices.
Faire une comparaison de 1 au nombre d'éléments et sauter
lorsqu'il y a un
doublon.
Compter chaque élément unique.
Si tu le désires, je dois avoir codé une telle logique,
mais il te serait
plus formateur d'essayer auparavant ... ;-)
Aski
jc2nantes wrote:
|| Bonjour,
||
|| J'ai un tableau par exemple
||
|| dim z(0 to 20) as string
||
|| chaque valeur différe mais les doublons sont possibles
||
|| z(0) = "a"
|| z(1) = "a"
|| z(2) = "b"
|| etc...
||
|| comment faire pour compter le nombre de valeurs
différentes (le
|| total - les doublons) ??? 2 dans l'exemple
||
|| merci
Bonjour,
Je ne connais pas de recette toute faite, mais la méthode
que j'utiliserais
est la suivante.
Faire un tri en conservant les indices.
Faire une comparaison de 1 au nombre d'éléments et sauter
lorsqu'il y a un
doublon.
Compter chaque élément unique.
Si tu le désires, je dois avoir codé une telle logique,
mais il te serait
plus formateur d'essayer auparavant ... ;-)
Aski
jc2nantes wrote:
|| Bonjour,
||
|| J'ai un tableau par exemple
||
|| dim z(0 to 20) as string
||
|| chaque valeur différe mais les doublons sont possibles
||
|| z(0) = "a"
|| z(1) = "a"
|| z(2) = "b"
|| etc...
||
|| comment faire pour compter le nombre de valeurs
différentes (le
|| total - les doublons) ??? 2 dans l'exemple
||
|| merci