Indice tableau [Résolu]

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

Votre réponse

9 réponses

Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 mai 2008 à 16:31
3
Merci
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

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de cs_casy
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 17 mai 2008 à 18:17
0
Merci
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
Commenter la réponse de mortalino
jijudu 211 Messages postés jeudi 15 mai 2008Date d'inscription 3 septembre 2009 Dernière intervention - 17 mai 2008 à 18:37
0
Merci
Merci pour le lien. jvais en prendre connaissance tranquillement.

Tchao
Commenter la réponse de jijudu
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 17 mai 2008 à 19:15
0
Merci
"...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
Commenter la réponse de cs_casy
jeanjeandada 152 Messages postés lundi 21 avril 2008Date d'inscription 20 novembre 2011 Dernière intervention - 18 mai 2008 à 15:38
0
Merci
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 !!!
Commenter la réponse de jeanjeandada
jeanjeandada 152 Messages postés lundi 21 avril 2008Date d'inscription 20 novembre 2011 Dernière intervention - 19 mai 2008 à 12:06
0
Merci
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 !!
Commenter la réponse de jeanjeandada
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 19 mai 2008 à 12:13
0
Merci
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
Commenter la réponse de mortalino
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 19 mai 2008 à 12:26
0
Merci
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
Commenter la réponse de cs_casy
jeanjeandada 152 Messages postés lundi 21 avril 2008Date d'inscription 20 novembre 2011 Dernière intervention - 19 mai 2008 à 21:19
0
Merci
Bonjour,

Merci pour la solutipon et les conseils qui me seront utiles.
+
et Bonne Réponse !: )
Commenter la réponse de jeanjeandada

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.