Sir_DEC
Messages postés143Date d'inscriptionmardi 17 avril 2007StatutMembreDernière intervention12 mai 2012
-
11 mai 2007 à 09:18
Sir_DEC
Messages postés143Date d'inscriptionmardi 17 avril 2007StatutMembreDernière intervention12 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%).
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.
Sir_DEC
Messages postés143Date d'inscriptionmardi 17 avril 2007StatutMembreDernière intervention12 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