Programme selon l'algorithme publié au J.O.


Il s'agit d'une fonction en VBA
Attention un petit problème, signalé par un visiteur, lié au langage Html : le symbole "différent de" n'apparait pas sur la page Html, car ce langage l'interprète comme une balise vide....
Cela conduit à des résultats GIR érronés.
Pour éviter ce problème : utilisez la procédure DANS LE SOURCE DE CETTE PAGE ! Merci.

Merci à Jean-Christophe QUOD qui m'a signalé ce bug !



Function GIR (UneChaine As Variant) As Integer
'Mise à jour du 31/3/1999

    If Len(UneChaine) < 8 Then
        GIR = 0
        Exit Function
    End If
    'Teste UneChaine pour le groupe A
    groupe = 0
    If Left$(UneChaine, 1) = "C" Then groupe = 2000
    If Mid$(UneChaine, 2, 1) = "C" Then groupe = groupe + 1200
    If Mid$(UneChaine, 3, 1) = "C" Then groupe = groupe + 40
    If Mid$(UneChaine, 4, 1) = "C" Then groupe = groupe + 40
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 60
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 100
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 800
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe + 200

    If Mid$(UneChaine, 3, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 4, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 20
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 120
    If Mid$(UneChaine, 8, 1) = "B" Then groupe = groupe + 32
    'Rang groupe A
    Select Case groupe
          Case Is >= 4380
            Rang = 1
          Case 4140 To 4379
            Rang = 2
          Case 3390 To 4139
            Rang = 3
    End Select
    If Rang <> 0 GoTo GIR '------LIRE If Rang 'différent de' 0 ...
    '
    'Teste Une Chaine pour le groupe B
    groupe = 0
    If Left$(UneChaine, 1) = "C" Then groupe = 1500
    If Mid$(UneChaine, 2, 1) = "C" Then groupe = groupe + 1200
    If Mid$(UneChaine, 3, 1) = "C" Then groupe = groupe + 40
    If Mid$(UneChaine, 4, 1) = "C" Then groupe = groupe + 40
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 60
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 100
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 800
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe - 80
    
    If Left$(UneChaine, 1) = "B" Then groupe = groupe + 320
    If Mid$(UneChaine, 2, 1) = "B" Then groupe = groupe + 120
    If Mid$(UneChaine, 3, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 4, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 0
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 120
    If Mid$(UneChaine, 8, 1) = "B" Then groupe = groupe - 40
    'Rang groupe B
    If groupe >= 2016 Then
        Rang = 4:  GoTo GIR
    Else
        Rang = 0
    End If
    'Teste Une Chaine pour le groupe C
    groupe = 0
    If Mid$(UneChaine, 3, 1) = "C" Then groupe = groupe + 40
    If Mid$(UneChaine, 4, 1) = "C" Then groupe = groupe + 40
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 60
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 160
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 1000
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe + 400

    If Mid$(UneChaine, 3, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 4, 1) = "B" Then groupe = groupe + 16
    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 20
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 20
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 8, 1) = "B" Then groupe = groupe + 40
    'Rang groupe C
    Select Case groupe
          Case Is >= 1700
            Rang = 5
          Case 1432 To 1699
            Rang = 6
    End Select
    If Rang <> 0 GoTo GIR '------LIRE If Rang 'différent de' 0 ...
    
    'Teste Une Chaine pour le groupe D
    groupe = 0
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 2000
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 400
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 2000
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe + 200

    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 200
    'Rang groupe D
    If groupe >= 2400 Then
        Rang = 7:  GoTo GIR
    Else
        Rang = 0
    End If
    
    'Teste Une Chaine pour le groupe E
    groupe = 0
    If Left$(UneChaine, 1) = "C" Then groupe = 400
    If Mid$(UneChaine, 2, 1) = "C" Then groupe = groupe + 400
    If Mid$(UneChaine, 3, 1) = "C" Then groupe = groupe + 400
    If Mid$(UneChaine, 4, 1) = "C" Then groupe = groupe + 400
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 400
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 800
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 800
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe + 200

    If Mid$(UneChaine, 3, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 4, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 100
    'Rang groupe E
    If groupe >= 1200 Then
        Rang = 8:  GoTo GIR
    Else
        Rang = 0
    End If
    
    'Teste Une Chaine pour le groupe F
    groupe = 0
    If Left$(UneChaine, 1) = "C" Then groupe = 200
    If Mid$(UneChaine, 2, 1) = "C" Then groupe = groupe + 200
    If Mid$(UneChaine, 3, 1) = "C" Then groupe = groupe + 500
    If Mid$(UneChaine, 4, 1) = "C" Then groupe = groupe + 500
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 500
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 500
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 500
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe + 200

    If Left$(UneChaine, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 2, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 3, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 4, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 100
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 100
    'Rang groupe F
    If groupe >= 800 Then
        Rang = 9:  GoTo GIR
    Else
        Rang = 0
    End If

    'Teste Une Chaine pour le groupe G
    groupe = 0
    If Left$(UneChaine, 1) = "C" Then groupe = 150
    If Mid$(UneChaine, 2, 1) = "C" Then groupe = groupe + 150
    If Mid$(UneChaine, 3, 1) = "C" Then groupe = groupe + 300
    If Mid$(UneChaine, 4, 1) = "C" Then groupe = groupe + 300
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 500
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 500
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 400
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe + 200

    If Mid$(UneChaine, 3, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 4, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 200
    If Mid$(UneChaine, 8, 1) = "B" Then groupe = groupe + 100
    'Rang groupe G
    If groupe >= 650 Then
        Rang = 10:  GoTo GIR
    Else
        Rang = 0
    End If

    'Teste Une Chaine pour le groupe H
    groupe = 0
    If Mid$(UneChaine, 3, 1) = "C" Then groupe = groupe + 3000
    If Mid$(UneChaine, 4, 1) = "C" Then groupe = groupe + 3000
    If Mid$(UneChaine, 5, 1) = "C" Then groupe = groupe + 3000
    If Mid$(UneChaine, 6, 1) = "C" Then groupe = groupe + 3000
    If Mid$(UneChaine, 7, 1) = "C" Then groupe = groupe + 1000
    If Mid$(UneChaine, 8, 1) = "C" Then groupe = groupe + 1000

    If Mid$(UneChaine, 3, 1) = "B" Then groupe = groupe + 2000
    If Mid$(UneChaine, 4, 1) = "B" Then groupe = groupe + 2000
    If Mid$(UneChaine, 5, 1) = "B" Then groupe = groupe + 2000
    If Mid$(UneChaine, 6, 1) = "B" Then groupe = groupe + 2000
    If Mid$(UneChaine, 7, 1) = "B" Then groupe = groupe + 2000
    If Mid$(UneChaine, 8, 1) = "B" Then groupe = groupe + 1000
    'Rang groupe H
    Select Case groupe
          Case Is >= 4000
            Rang = 11
          Case 2000 To 3999
            Rang = 12
          Case Is < 2000
            Rang = 13
    End Select
    GoTo GIR



GIR:
    Select Case Rang
          Case Is = 1
            GIR = 1
          Case 2 To 7
            GIR = 2
          Case 8 To 9
            GIR = 3
          Case 10 To 11
            GIR = 4
          Case 12
            GIR = 5
          Case 13
            GIR = 6
    End Select

End Function

Retour