Outils logiciels pour les cours Paris II

Cours Paris II

edit SideBar

Cours 5

VBA Suite

  • Rappels des instructions de boucle
  For I=1 to N step 1
  ....
  Next


  Do While (test)
  ....
  Loop
  • Rappel de l'instruction de test
  If (test) then 
  Else  ...
  End if
  • Exemples
    • Fonction Fréquence =FREQUENCE(A1:A15;B1:B4)

Tableau de données: A1:A15

Tableau d'intervalles: B1:B4

Principe: Combinaisons de boucles et de tests.

  • Parcourir la liste des intervalles
  • Pour chaque intervalle, parcourir la liste des données et décider si k=k+1
  • Résultat= C1:C5
 Sub Frequence1()


 'M est la dimension du tableau résultat colonne 3, M-1 la dimension du tableau intervalle, colonne 2
 'N est la dimension du tableau à analyser, colonne 1
 'P est la valeur précédente de l'intervalle

 M = 5
 N = 15
 For j = 1 To M
 k = 0
   For i = 1 To N
   If (j = 1 And Cells(i, 1) <= Cells(j, 2)) Then
     k = k + 1
   ElseIf (j > 1 And j < M And Cells(i, 1) <= Cells(j, 2) And Cells(i, 1) > P) Then
     k = k + 1
   ElseIf (j = M And Cells(i, 1) > P) Then
     k = k + 1
   End If
   Next i
 Cells(j, 3) = k
 P = Cells(j, 2)
 Next j
 End Sub
  • Tri d'une liste: Tri rapide
    • Choisir un pivot (élément en position début, fin, milieu ou aléatoire)
    • parcourir la liste en construisant une liste inf (éléments inférieurs au pivot) et une liste sup (éléments supérieurs au pivot),
    • Résultat= Tri(inf),pivot,Tri(sup)

[http://fr.wikipedia.org/wiki/Tri_rapide| Détails de Quicksort]

 Sub Main()
   Dim myArray(15) As Double
   For I = 1 To 15 Step 1
   myArray(I) = Cells(I, 1)
   Next

   Call QSort(myArray, 0, 4)

   For I = 1 To 15 Step 1
   Cells(I, 6) = myArray(I)
   Next

 End Sub

 Sub QSort(sortArray() As Double, ByVal leftIndex As Integer, _
                                     ByVal rightIndex As Integer)
    Dim compValue As Double
    Dim I As Integer
    Dim J As Integer
    Dim tempNum As Double

    I = leftIndex
    J = rightIndex
    compValue = sortArray(Int((I + J) / 2))

    Do
        Do While (sortArray(I) < compValue And I < rightIndex)
            I = I + 1
        Loop
        Do While (compValue < sortArray(J) And J > leftIndex)
            J = J - 1
        Loop
        If I <= J Then
            tempNum = sortArray(I)
            sortArray(I) = sortArray(J)
            sortArray(J) = tempNum
            I = I + 1
            J = J - 1
        End If
    Loop While I <= J

    If leftIndex < J Then QSort sortArray(), leftIndex, J
    If I < rightIndex Then QSort sortArray(), I, rightIndex
 End Sub
  • Recherche dichotomique

Recherche dans un tableau trié A(N), d'une valeur a:

  • If ( A(int(N/2))= a) : Résultat=1
  • If ( A(int(N/2))> a) : A = A(int(N/2)+1, N) else A = A(1,int(N/2)-1)
  • Résultat= Recherche(A)

Fichier Excel avec ces macros

UP2