jeanjeandada
Messages postés152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 novembre 2011
-
17 mai 2008 à 18:12
jeanjeandada
Messages postés152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 novembre 2011
-
19 mai 2008 à 21:19
Slt !
Voila j'ai un tableau qui contient des valeurs ^^.
Ces valeurs sont obtenue par la fonction DateDiff. De plus ces valeurs sont peuvent êtrepositifs comme négatifs.
Le probléme c'est que j'aimerai récupérer l'indice du le tableau de la valeur qui est le plus proche de ZéRo.
Exemple :
si le tableau contient comme valeur : 3 ; 2,5 ; 2 ; 1,9 ; 1; 0,5 ; -0,1 ; -1 ; -3 il faudrai que j'obtienne l'indice de la valeur -0,1 du tableau.
J'ai juste une petite idée : il faut faire une boucle for
Dim w as integer
For w = LBound(tableau) to Ubound(tableau)
if tableau(w)
......
Next w
En espérant que se soit rélisable.
Merci pour votre précieuse aide !
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 18 mai 2008 à 16:31
Ah, c'était pas loin, l'idée est là.
dans tableau(w), w n'est qu'un index, il ne représente pas la valeur de la case dans le tableau.
Donc tableau(w*-1) ne représente pas la valeur absolue de tableau(w), au pire ça ne te donnera que la valeur présente dans une autre case du tableau (à supposé qu'elle existe) et en l'ocurence en tableau(-w)
Mais pour ce qui est de la valeur absolue, autant utiliser la fonction déjà existante.
Le code exact sera plutot ceci :
Dim w As Integer
Dim nombre As Integer
Dim memorise As Integer
nombre = 9999999
For w = LBound(tableau) To UBound(tableau)
If Math.Abs(tableau(w)) < nombre Then
nombre = Math.Abs(tableau(w))
memorise = w
End If
Next w
A noter que ce code est pour VB2005, rubrique ou tu as posté. Si tu es en VB6, remplace Math.Abs par Abs
A noter aussi qu'en VB2005, l'index inférieur d'un tableau (LBound) est toujours =0, ce n'est pas forcément le cas en VB6.
Donc en VB2005, tu pourrais sans crainte remplacer LBound(tableau) par 0
ATTENTION, ton tableau semble contenir des décimaux, c'est donc un tableau de Single ou de Double. nombre doit absolument etre du même type que les données dans ton tableau, donc pas un Integer mais un Single ou un Double
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 17 mai 2008 à 19:15
"...J'ai juste une petite idée : il faut faire une boucle for..."
C'est quoi ? un exercice scolaire ???
Tu peux effectivement faire une boucle, passer en revue l'ensemble du tableau à la recherche du minimum.
Mais puisque tu peux avoir aussi bien des valeurs positives comme négatives, c'est le minimum de la valeur absolue qu'il te faut rechercher.
En gros, t'initialise une variable à une valeur très grande positive avant la boucle.
Tu lis chaque entrée du tableau. Si la valeur absolue de l'entrée du tabeau est inférieure à ta variable, tu mémorise cette entrée dans la variable, et tu mémorise l'index correspondant dans le tableau et tu continue la boucle. Sinon, tu ne fais rien et tu continue la boucle.
A la fin de la boucle normalement, tu récupère l'index de l'élément le plus petit en valeur absolue, c'est à dire le plus proche de 0
jeanjeandada
Messages postés152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 novembre 2011 18 mai 2008 à 15:38
C'est quoi ? un exercice scolaire ???
xD non mais c'est gentil de s'inquiéter pour moi ^^.
Dim w as integer
Dim nombre as integer
Dim memorise as integer
nombre = 9999999
For w = LBound(tableau) to Ubound(tableau)
If tableau(w) < 0 Then
tableau(w*-1) ' pour la valeur absolue
end if
If tableau(w) < nombre Then
nombre = tableau(w)
memorise = w
End if
Next w
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 19 mai 2008 à 12:13
nop
vb 2005 = dot net
avec excel, quelle que soit la version (pour le moment) c'est du VBA.
Casy connait un peu plus ORCAS ? Peut-être !
moi perso, pas encore trop regardé mais me semble que les prochaines versions vb de la suite office seront en dot net (et tourne donc autour du framework dot net)
Ah si, je crois que InfoPath tourne déjà en dot net.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 mai 2008 à 12:26
Excel = VBA = VB6.3, une version modifiée et adaptée de VB6
Pour toi, c'est donc le code VB6 qui marchera.
" ...Casy connait un peu plus ORCAS ? Peut-être !... "
Après plusieurs années de codage en VB5/6, c'est vrai que depuis que je fais du .Net, j'ai un peu perdu, mais bon. Par contre, que c'est dur de revenir à VB6 qu'en on est à l'aise avec VB2005
"...mais me semble que les prochaines versions vb de la suite office seront en dot net..."
Je n'ai pas vu une telle info, mais pourquoi pas (je ne me tiens pas forcément au courant sur ce point).
On peut l'espérer puisque tous les nouveaux produits qui avance chez M$ (Sharepoint, Dynamics CRM, ....) sont sur le framework, Office y viendra peut-etre.
En tous cas Office 2007 (dernière version en date) inclue toujours VBA (VB6.3). Mais une rumeur avait quand même circulée comme quoi VBA ne serait pas inclue dans Office2007. Donc on peut craindre aussi que VBA soit abandonné pour autre chose à terme.