Pinesol
Messages postés4Date d'inscriptionlundi 23 juin 2008StatutMembreDernière intervention 3 juillet 2008
-
23 juin 2008 à 17:42
sturtrid
Messages postés133Date d'inscriptiondimanche 20 mai 2007StatutMembreDernière intervention13 juillet 2012
-
4 juil. 2008 à 05:05
Bonjour,
J'ai déclaré un tableau public dans un module.
Par la suite j'essaie de remplir ce tableau dans une boucle for mais le tableau ne veut pas prendre la valeur. Il reste toujours a 0.
sturtrid
Messages postés133Date d'inscriptiondimanche 20 mai 2007StatutMembreDernière intervention13 juillet 20121 2 juil. 2008 à 20:19
Salut Pinesol !
'# L'indice des tableaux commence à 0 donc Tab_debits(30) contient 31 valeurs...
Public Tab_debits(31) As Double --> Public Tab_debits(30As Double
'# Tu fais ces déclarations en implicite, ce qui n'est pas conseillé...
'mais ça c'est à toi de voir !
An = 1 --> Dim An as integer = 1
Mois = 1--> Dim Moi as integer = 1
'# Du coup, pour ta boucle on modifie un peut...
'==> Tu avais ça:
For Janvier = 1 To 31
'# Ensuite, si tu es sure que ActiveSheet.Cells(Janvier, 40 + An).Value soit de type Double,
'c'est OK, sinon je te conseille de faire un Cast... Voir même de vérifier avant qu'elle
'est de type numérique... Je mets tout pour l'exemple:
'# En décomposant les actions: ==================================
'Test si numérique...
if IsNumeric(ActiveSheet.Cells(Janvier, 40 + An).Value) then
'Cast en type Double...
Tab_debits(Janvier) = CDbl(ActiveSheet.Cells(Janvier, 40 + An).Value)
'Incrémentation non obligatoire, tu peux utiliser ton Janvier...
Debut += 1
end if
'===============================================================
'# En une fois:
'Utilisation d'un TryCast (évite la mise en place d'un gestionnaire d'exception)...
if(Double.TryCast(ActiveSheet.Cells(Janvier, 40 + An).Value, Tab_debits(Janvier))then
[... ]
end if
ici la deuxieme solution peu sembler inutile car la dimension de ton tableau sera toujours fixe. Cette methode est interessante dans le cas de tableaux a dimensions variable.
Attention un redim efface le contenu du tableau. tu peux aussi ajouter une option lors du redim qui te permet de conserver les donnés deja dans le tableau:
Ce qui arrive, c'est que Tab_debits(Janvier) ne prend jamais la valeur de la cellule.
La valeur de "ActiveSheet.Cells(Janvier, 40 + An).Value" change a chaque fois. ( C'est correct ).
Mais la valeur que je veux que le tableau prenne ne s'inscrie jamais dans le tableau.
Pinesol
Messages postés4Date d'inscriptionlundi 23 juin 2008StatutMembreDernière intervention 3 juillet 2008 3 juil. 2008 à 21:41
Salut sturdrid
Merci beaucoup ca fonctionne à merveile mais lol
j'ai un autre pépin,
Voici le contexte
Je désire créer une fonction qui rempli un tableau passé en paramètre,
Public Function remplissage(tabl As Variant)
Dim i As Integer
For i = 1 To 20
tabl(i) = Sheets("Courbe_eff").Cells(3 + i, 3)
Next i
End Function
Je déclare un tableau dans un module :
Public Tab_eff1(21) As Double
Et j'appel la fonction de la facon suivante :
remplissage (Tab_eff1)
Résultat : Quand je le fais pas à pas, les tab(i) prennent la valeur de la cellule. Par contre le tableau que je passe en paramètre reste à 0 et ne prend pas la valeur du tabl(i)
<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Bon voilà... Après c'est juste des idées, je sais pas comment ça se passe réellement dans ta source. Vu que ça tient en 3lignes, t'as peut être pas besoin d'appeler une Sub pour faire ça...