Tableau à deux dimensions

Résolu
Sir_DEC Messages postés 143 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 12 mai 2012 - 11 mai 2007 à 09:18
Sir_DEC Messages postés 143 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 12 mai 2012 - 14 mai 2007 à 09:06
Bonjour,

Voilà quelques heures que je bloque sur un problème avec un tableau à deux dimensions. Je suis donc venu chercher de l'aide ici...
Je vous présente le contexte, le but final est de renvoyer un tableau à deux dimension contenant les coefficients pour un composant donné (donc toutes les lignes d'un composant, avec 5 colonnes), les coffecient variant de 0 à 1 (0 à 100%).

Voici la table de données (elle commence en B2) :
http://img527.imageshack.us/img527/8981/modpannesl3.jpg

Je ne transmet à ma fonction que le code fiabilité sous forme d'une chaine de deux caractères.

Voici maintenant mon code, qui contient 3 fonctions :
       1. Recherche de la première ligne du composant, et boucle pour toutes les lignes de celui-ci
       2. Boucle sur les colonnes
       3. Renvoi d'un coefficient avec ligne et colonne en paramètre(simple recherche)

Option Explicit
' Affectation des colonnes dans lesquelles trouver les données voulues
Constcol_mod_intAs Integer = 3    ' Colonnes des modes de pannes (en entier)
Constcol_compo_strAs String = "I" ' Colonnes des codes fiabilité (en lettre)
Constcol_compo_intAs Integer = 9  ' Colonnes des codes fiabilité (en entier)
' Les colonnes des paramètres sont les 5 suivantes de col_mod (ici D, E, F, G et H)
<hr size="2" width="100%" />Public Functionrech_bcl_mod_panne(compoAs String) As Double()
    DimligAs Integer
    DimvarAs Integer
    DimintermedAs Double
    Dimresult() As Double
    lig = 2
    ' Pour commencer, recherche de la première ligne concernant compo
    Do While (Left(Worksheets("Mod Pannes").Range(col_compo_str & lig), 2) <> compo)
        lig = lig + 1
    Loop
    ' Comptage du nombre de modes de panne du composant
    Dimi, jAs Integer
    i = lig
    Do While (Left(Worksheets("Mod Pannes").Range(col_compo_str & i), 2) = compo)
        i = i + 1
    Loop
    ReDimresult(i - lig, 4)
    ' Ici on se trouve sur la première ligne du composant souhaité
    var = lig
    ' Boucle tant que le mode de panne concerne ce composant
    Forvar = ligToi - lig
        Forj = 0 To 4
            intermed = bcl_param_mod_panne(var)(j)
            result(var - lig, j) = intermed
        Next
    Next
    rech_bcl_mod_panne = result()
End Function
<hr size="2" width="100%" />Functionbcl_param_mod_panne(ligneAs Integer) As Double()
    Dimresult(4) As Double
    DimiAs Integer
    For i = 0 To 4
        result(i) = rech_coef_mod_panne(ligne, i + 1)
    Next
    bcl_param_mod_panne = result()
End Function
<hr size="2" width="100%" />Functionrech_coef_mod_panne(ligneAs Integer, paramAs Integer) As Double
    Dim col As Integer
    ' On se trouve déjà sur le ligne du mode de panne voulu, pour le bon composant
    ' Puis de sélectionner la colonne selon l'indice du paramètre voulu
    col = col_mod_int + param
   
    rech_coef_mod_panne = Worksheets("Mod Pannes").Cells(ligne, col).Value
End Function
<hr size="2" width="100%" />
Mon problème est que seul la première ligne fonctionne, les autres coefficients étant tous à zéro systématiquement :S

J'ai testé la fonction 2 et la fonction 3 qui fonctionnent correctement, je pense donc que le problème vient de la première...

Merci à toute personne qui s'intéressera au moins au suejt.

2 réponses

Sir_DEC Messages postés 143 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 12 mai 2012
14 mai 2007 à 09:06
J'ai résolu le problème, c'était une erreur dans la boucle "For var = lig To i - lig", il fallait remplacer le "i - lig" par "i".
3
Sir_DEC Messages postés 143 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 12 mai 2012
11 mai 2007 à 10:38
(Le code corrigé, il y avait un bug d'espace et... je n'ai pas trouvé comment éditer :S)

Option Explicit


' Affectation des colonnes dans lesquelles trouver les données voulues


Const
col_mod_int
As Integer = 3    ' Colonnes des modes de pannes (en entier)
Const col_compo_str As String = "I" ' Colonnes des codes fiabilité (en lettre)
Const col_compo_int As Integer = 9  ' Colonnes des codes fiabilité (en entier)
' Les colonnes des paramètres sont les 5 suivantes de col_mod (ici D, E, F, G et H)
<hr size="2" width="100%" />Public Function rech_bcl_mod_panne(compo As String) As Double()
    Dim lig As Integer
    Dim var As Integer
    Dim intermed As Double
    Dim result() As Double
    lig = 2
    ' Pour commencer, recherche de la première ligne concernant compo
    Do While (Left(Worksheets("Mod Pannes").Range(col_compo_str & lig), 2) <> compo)
        lig = lig + 1
    Loop
    ' Comptage du nombre de modes de panne du composant
    Dim i, j As Integer
    i = lig
    Do While (Left(Worksheets("Mod Pannes").Range(col_compo_str & i), 2) = compo)
        i = i + 1
    Loop
    ReDim result(i - lig, 4)
    ' Ici on se trouve sur la première ligne du composant souhaité
    var = lig
    ' Boucle tant que le mode de panne concerne ce composant
    For var = lig To i - lig
        For j = 0 To 4
            intermed = bcl_param_mod_panne(var)(j)
            result(var - lig, j) = intermed
        Next
    Next
    rech_bcl_mod_panne = result()
End Function
<hr size="2" width="100%" />Function bcl_param_mod_panne(ligne As Integer) As Double()
    Dim result(4) As Double
    Dim i As Integer
    Fori = 0 To 4
        result(i) = rech_coef_mod_panne(ligne, i + 1)
    Next
    bcl_param_mod_panne = result()
End Function
<hr size="2" width="100%" />Functionrech_coef_mod_panne(ligne As Integer, param As Integer) As Double
    Dimcol As Integer
    ' On se trouve déjà sur le ligne du mode de panne voulu, pour le bon composant
    ' Puis de sélectionner la colonne selon l'indice du paramètre voulu
    col = col_mod_int + param
   
    rech_coef_mod_panne = Worksheets("Mod Pannes").Cells(ligne, col).Value
End Function
0
Rejoignez-nous