Indice tableau [Résolu]

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

Votre réponse

9 réponses

Meilleure réponse
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
38
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

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

Tchao
Commenter la réponse de jijudu
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
38
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
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Dernière intervention
20 novembre 2011
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
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Dernière intervention
20 novembre 2011
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
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
17
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
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
38
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
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Dernière intervention
20 novembre 2011
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.