Bonjour à tous
Merci à tous conseils ou autres approches, dans se que je souhaite faire, qui comme ça, me semblait etre simple ....
Alors, je fais se poste, puisque c'est pas si évident, de faire du trie, du moins dans l'approche que j'ai eu, il y a surement une autre façon de faire
et je serai preneur.
mon scénario de code est ci-dessous
Mon scénario est le suivant :
je collecte, les données numériques (les boules tirées ) dans la feuille "Tirages" par colonne de J à N, par année; que je récupère après
dans un tableaux occurrences(); en fonctions des indices référentielles :les indices représentent les boules tirées..de (1 à 49); je fais l'inventaire, du nombre de fois que les boules sont tirées .
Code : Sélectionner tout - Visualiser dans une fenêtre à part redim occurrences(1 TO 49)
dans l'approche actuelle cela fonctionne bien ... mais c'est après que cela deviens complexe.
puisque je fais , le trie en fonction des valeurs exemple: si occurrences(49) =3 ; soit 49 tiré 3 fois; dans mon traitement de trie, je devrais le mettre
en haut du trie , et ainsi de suite....., en ordre décroissant.
je fais en sorte, de ne pas tenir compte des occurrences(x)=Vide ; par une procédure complémentaire :pour me nettoyer le tableau
Code : Sélectionner tout - Visualiser dans une fenêtre à part suppVides occurrences, Vide
mais cela, me désordonne la structure les valeurs, et me modifie mes indices de bases, et rend mon trie erroné
Attention, je dis bien, j'essais de traiter en fonction des valeurs, et non des indices. (si l'approche est possible )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ReDim occurrences(1 To 49) ' pour contenir des valeurs de 1 à 49 '-----------------------------------------------------------------------' 'TraitBoule Do While ws.Cells(debBoule, jCol).value <> "" And debBoule <> yearTotals(Annee) boule = ws.Cells(debBoule, jCol).value occurrences(boule) = occurrences(boule) + 1 debBoule = debBoule + 1 ' passer à la ligne suivante ' Réinitialiser la valeur de i si la condition de sortie est atteinte If debBoule = yearTotals(Annee) Then Exit Do End If Loop '--------------------------------------------------------------------------' ReDim Preserve occurrences(1 To 49) SuppVides(occurrences(), Vide) ' je Trie occurrences en fonction des valeurs associées SortOccurrencesByValues occurrences les procédure annexes de traitement ci-dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 Sub SuppVides(ByRef occurrences() As Variant, Vide As String) Dim iCh As Integer Dim i as Integer ' Boucle à partir de la fin du tableau vers le début For iCh = UBound(occurrences) To LBound(occurrences) + 1 Step -1 ' je Vérifie si la valeur est égale à "Vide" If occurrences(iCh) = Vide Then ' je Supprime l'élément du tableau For i = iCh To UBound(occurrences) - 1 occurrences(i) = occurrences(i + 1) Next i ' je Redimensionne le tableau ReDim Preserve occurrences(UBound(occurrences) - 1) End If Next iCh End Sub Sub SortOccurrencesByValues(ByRef occurrences() As Integer) Dim numIndices() As Integer Dim i As Long, j As Long Dim tempIndex As Integer Dim tempValue As Integer ' je Crée un tableau temporaire d'indices ReDim numIndices(1 To UBound(occurrences)) For i = LBound(numIndices) To UBound(numIndices) numIndices(i) = i Next i ' je Trie les indices en fonction des valeurs dans le tableau occurrences For i = LBound(numIndices) To UBound(numIndices) - 1 For j = i + 1 To UBound(numIndices) If occurrences(numIndices(i)) < occurrences(numIndices(j)) Then 'j' Échange les indices tempIndex = numIndices(i) numIndices(i) = numIndices(j) numIndices(j) = tempIndex End If Next j Next i ' j'Affiche les indices triés et les valeurs associées Debug.Print "Indices triés en fonction des valeurs : " For i = LBound(numIndices) To UBound(numIndices) Debug.Print numIndices(i); Next i Debug.Print " les Valeurs associées après le tri : " For i = LBound(numIndices) To UBound(numIndices) Debug.Print occurrences(numIndices(i)); Next i End Sub
Partager