Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3 plus
fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3 plus
fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3 plus
fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Merci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Merci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Merci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Merci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
A(1)=0
A(2)=0
A(3)=2
A(4)=0
A(5)=2
A(6)=8
A(7)=2
A(8)=2
A(9)=0
A(10)=0
A(11)=1
A(12)=1
A(13)=2
A(14)=0
A(15)=0
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Le 20.02.2011 13:01, isabelle a écrit :bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Merci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
A(1)=0
A(2)=0
A(3)=2
A(4)=0
A(5)=2
A(6)=8
A(7)=2
A(8)=2
A(9)=0
A(10)=0
A(11)=1
A(12)=1
A(13)=2
A(14)=0
A(15)=0
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Le 20.02.2011 13:01, isabelle a écrit :
bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Merci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
A(1)=0
A(2)=0
A(3)=2
A(4)=0
A(5)=2
A(6)=8
A(7)=2
A(8)=2
A(9)=0
A(10)=0
A(11)=1
A(12)=1
A(13)=2
A(14)=0
A(15)=0
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Le 20.02.2011 13:01, isabelle a écrit :bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Sub test()
Dim a(15), b(), c(), d()
a(1) = 0
a(2) = 0
a(3) = 2
a(4) = 0
a(5) = 2
a(6) = 8
a(7) = 2
a(8) = 2
a(9) = 0
a(10) = 0
a(11) = 1
a(12) = 1
a(13) = 2
a(14) = 0
a(15) = 0
Set Robert = CreateObject("scripting.dictionary")
For i = 1 To UBound(a)
If Not Robert.exists(a(i)) Then
Robert.Add a(i), a(i)
End If
Next i
With Application
Un = .Max(Robert.Items)
Deux = .Large(Robert.Items, 2)
Trois = .Large(Robert.Items, 3)
End With
ReDim b(1), c(1), d(1)
For i = 1 To UBound(a)
If a(i) = Un Then
x = x + 1
ReDim Preserve b(x)
b(x) = a(i)
ElseIf a(i) = Deux Then
y = y + 1
ReDim Preserve c(y)
c(y) = a(i)
ElseIf a(i) = Trois Then
Z = Z + 1
ReDim Preserve d(Z)
d(Z) = a(i)
End If
Next
End Sub
DanielMerci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
A(1)=0
A(2)=0
A(3)=2
A(4)=0
A(5)=2
A(6)=8
A(7)=2
A(8)=2
A(9)=0
A(10)=0
A(11)=1
A(12)=1
A(13)=2
A(14)=0
A(15)=0
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Le 20.02.2011 13:01, isabelle a écrit :bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Sub test()
Dim a(15), b(), c(), d()
a(1) = 0
a(2) = 0
a(3) = 2
a(4) = 0
a(5) = 2
a(6) = 8
a(7) = 2
a(8) = 2
a(9) = 0
a(10) = 0
a(11) = 1
a(12) = 1
a(13) = 2
a(14) = 0
a(15) = 0
Set Robert = CreateObject("scripting.dictionary")
For i = 1 To UBound(a)
If Not Robert.exists(a(i)) Then
Robert.Add a(i), a(i)
End If
Next i
With Application
Un = .Max(Robert.Items)
Deux = .Large(Robert.Items, 2)
Trois = .Large(Robert.Items, 3)
End With
ReDim b(1), c(1), d(1)
For i = 1 To UBound(a)
If a(i) = Un Then
x = x + 1
ReDim Preserve b(x)
b(x) = a(i)
ElseIf a(i) = Deux Then
y = y + 1
ReDim Preserve c(y)
c(y) = a(i)
ElseIf a(i) = Trois Then
Z = Z + 1
ReDim Preserve d(Z)
d(Z) = a(i)
End If
Next
End Sub
Daniel
Merci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
A(1)=0
A(2)=0
A(3)=2
A(4)=0
A(5)=2
A(6)=8
A(7)=2
A(8)=2
A(9)=0
A(10)=0
A(11)=1
A(12)=1
A(13)=2
A(14)=0
A(15)=0
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Le 20.02.2011 13:01, isabelle a écrit :
bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :
Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?
Sub test()
Dim a(15), b(), c(), d()
a(1) = 0
a(2) = 0
a(3) = 2
a(4) = 0
a(5) = 2
a(6) = 8
a(7) = 2
a(8) = 2
a(9) = 0
a(10) = 0
a(11) = 1
a(12) = 1
a(13) = 2
a(14) = 0
a(15) = 0
Set Robert = CreateObject("scripting.dictionary")
For i = 1 To UBound(a)
If Not Robert.exists(a(i)) Then
Robert.Add a(i), a(i)
End If
Next i
With Application
Un = .Max(Robert.Items)
Deux = .Large(Robert.Items, 2)
Trois = .Large(Robert.Items, 3)
End With
ReDim b(1), c(1), d(1)
For i = 1 To UBound(a)
If a(i) = Un Then
x = x + 1
ReDim Preserve b(x)
b(x) = a(i)
ElseIf a(i) = Deux Then
y = y + 1
ReDim Preserve c(y)
c(y) = a(i)
ElseIf a(i) = Trois Then
Z = Z + 1
ReDim Preserve d(Z)
d(Z) = a(i)
End If
Next
End Sub
DanielMerci à tous les 2 mais j'ai un petit pb avec le code application.large
en effet si ma variable A contient les données suivantes
A(1)=0
A(2)=0
A(3)=2
A(4)=0
A(5)=2
A(6)=8
A(7)=2
A(8)=2
A(9)=0
A(10)=0
A(11)=1
A(12)=1
A(13)=2
A(14)=0
A(15)=0
Application.large(A,1) me donne 8. C'est bon
Application.large(A,2) me donne 2. C'est bon
Application.large(A,3) me donne 2 au lieu de 1. Là c'est pas terrible
Quel est ce mystère ?
Xavier
Le 20.02.2011 13:01, isabelle a écrit :bonjour merguez,
Option Base 1
Sub test()
Dim A(7)
Dim B()
Dim C()
Dim D()
Dim x As Integer, i As Integer
x = 1
A(1) = 20
A(2) = 10
A(3) = 10
A(4) = 5
A(5) = 5
A(6) = 2
A(7) = 15
ReDim Preserve B(x)
ReDim Preserve C(x)
ReDim Preserve D(x)
B(x) = Application.Match(Application.Large(A, 1), A, 0)
C(x) = Application.Match(Application.Large(A, 2), A, 0)
D(x) = Application.Match(Application.Large(A, 3), A, 0)
For i = 1 To 7
If A(B(1)) = A(i) And B(1) <> i Then
x = x + 1
ReDim Preserve B(x)
B(x) = i
End If
Next
For i = 1 To 7
If A(C(1)) = A(i) And C(1) <> i Then
x = x + 1
ReDim Preserve C(x)
C(x) = i
End If
Next
For i = 1 To 7
If A(D(1)) = A(i) And D(1) <> i Then
x = x + 1
ReDim Preserve D(x)
D(x) = i
End If
Next
End Sub
isabelle
Le 2011-02-20 05:58, merguez07 a écrit :Bonjour à tous
Mon pb est assez simple mais je trouve pas une technique simple
En VBA J'ai une variable de type variant qui contient 7 valeurs
A(1)= 20
A(2)= 10
A(3)= 10
A(4)= 5
A(5)= 5
A(6)= 2
A(7)= 15
Je voudrais créer 3 variables contenant les index de A contenant les 3
plus fortes valeurs
B(1)= 1 "B contient les index A A ayant la 1ere plus grande valeur"
C(1)= 7 "C contient les index de A ayant la 2eme plus grande valeur"
D(1)= 2 "D contient les index de A ayant les 3eme plus grande valeur
D(2)= 3
Any Idea ?