Indice tableau

Résolu
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011 - 17 mai 2008 à 18:12
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 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 !

9 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
17 mai 2008 à 18:17
salut,

http://www.codyx.org/snippet_trier-donnees-tableau-liste-as-string_278.aspx

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
jijudu Messages postés 211 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 3 septembre 2009
17 mai 2008 à 18:37
Merci pour le lien. jvais en prendre connaissance tranquillement.

Tchao
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 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

Comme cela le code ?

Merci de ton aide casy !!!
0
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011
19 mai 2008 à 12:06
Oupss.. probléme de vocabulaire:/

VB2005= Excel 2005 ?? :p

Moi j'ai Excel 2003, donc comme 2003<2005 ; ) je pense que ca va poser un probléme .....

Merci de tes conseils  casy !!
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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.

Bref, tout ça pour dire que tu es en VBA

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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.

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011
19 mai 2008 à 21:19
Bonjour,

Merci pour la solutipon et les conseils qui me seront utiles.
+
et Bonne Réponse !: )
0
Rejoignez-nous