Trouver la place d'unitem dans une liste

Résolu
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008 - 25 mars 2008 à 19:28
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008 - 28 mars 2008 à 18:19
Bonjour, un petit probleme a vous soumetre, pas bien dur (je pense).

J'ai deux feuilles, une avec un tableau, une autre avec des données. Je voudrais remplir le tableau avec des données (ca vous en bouche un coin, hein ?).

feuille 1 (change toujours)
Ligne ... jeudi ... vendredi ... samedi
Ll
L3
L25
L99
LA

feuillle 2  (toujours la meme structure)
jeudi ... L1 ... 3
jeudi ... L3 ... 4
jeudi ... L25 ... 4
jeudi ... LA ... 2
vendredi ... L1 ... 3
vendredi ... L99 ... 4
samedi ... L3 ... 5

Ne me parlez pas de tableau croisé, ca ne passe pas (parce que j'ai simplifié le probleme.
Ce que je fais, pour l'instant : je passe chaque ligne de la feuille 2 en revue et je fais des tests.
Pour les lignes de bus , en début de programe, je les met dans une liste lignebus(1)="L1" ; lignebus(2) = "L3" ; ... ; lignebus(5)="LA".
Ce que je voudrais c'est savoir comment retrouver l'indicateur (le numéro de pointeur ou ce que vous voulez, je manque de vocabulaire) à partir  du nom de la ligne.
En d'autre termes, quand je dis "L3", je voudrais qu'on me réponde 2.

J'avais pensé tricher en codant :
    Select Case Sheets(feuille2).Cells(i, 4).Value ' cette value, c'est L1, L3 ou autres
        For l = 1 To nb                                          ' nb c'est le nombre de lignes, 5 dans mon exemple
        Case lignebus(l)
            ...
        Next l
    End Select

mais ca marche pas
Une idée ?
(je peux ptet faire une fonction rien que pour ca mais si y'a une instruction magique qui s'en charge déjà, je m'épargnerai cet effort )

11 réponses

Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
26 mars 2008 à 19:24
a mon avis il te faut une boucle For dans une boucle For, avec un test d'égalité à l'intérieur
3
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
28 mars 2008 à 18:19
Bon, je m'en suis tiré avec deux if imbriqués de facon pas tres propre. Mais c'est vrai qu'un for aurait pu faire l'affaire.
genre:
for i=1 to fin_liste
    if liste(i)= "value" then
       rang=i
    end if
next i

Je m'etonne qu'il n'existe pas une intruction ad hoc.
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 mars 2008 à 11:02
Pour les lignes de bus , en début de programe, je les met dans une
liste lignebus(1)="L1" ; lignebus(2) = "L3" ; ... ; lignebus(5)="LA".



Qu'est-ce que tu entends par "Liste" ? un tableau(), une liste de données sur une feuille, une Collection, une listbox ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
26 mars 2008 à 11:20
j'ecris, par programme, les valeur des lignes de bus dans un tableau à une dimention
lignebus(1)="L1" ; lignebus(2) = "L3" ; ... ; lignebus(5)="LA".
Mais évidemment, je peux changer si une autre méthode se révele plus intelligente.
0

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

Posez votre question
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
26 mars 2008 à 13:18
Pb de structure dans ton code !! Le bloc For ... Next ne peut pas encadrer 1 Case du bloc Select ... End Select ! Soit le Select ... End Select est dans le bloc For ... Next, soit le For ... Next est dans un bloc Case du Select ... End Select :
1-
For ...
Select Case ...
Case ...
Case ...
End Select
Next

2-
Select Case ...
Case ...
For ...
Next
Case ...
End Select

Alors maintenant, j'ai pas tout compris à ton PB, mais je pense que la structure de type 1 correspondra à ce que tu veux ...
0
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
26 mars 2008 à 14:16
Malheureusement non :
Mon probleme est que meme si je sais combien il y en a de différentes (dans mon exemple 5), je ne sais pas quelles vont etre les lignes qui vont apparaitre.

Dans cet exemple il faudrait que j'ecrives
select lignebus
    case "L1"
    case "L3"
    case "L25"
    case "L99"
    case "LA"
end select
Mais au prochain coup, les noms des lignes aura changé et il me faudra changer mon select case en case "L2", case L"5555", ...

Je ne suis pas obligé d'utiliser un select, bien sur
0
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
26 mars 2008 à 14:16
j'ecris, par programme, les valeur des lignes de bus dans un tableau à une dimention
lignebus(1)="L1" ; lignebus(2) = "L3" ; ... ; lignebus(5)="LA".
Mais évidemment, je peux changer si une autre méthode se révele plus intelligente.
0
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008
26 mars 2008 à 15:04
S'il s'agit d'une énumération, je conseillerais plutôt le type ENUM à la place d'un tableau Lignebus(x) (en VB.NET) maintenant en VBA???

Je pense aussi à qque chose de plus simple : les fonctions RECHERCHE, DECALER, INDEX, EQUIV. Une combinaison de ces fonctions devrait résoudre le problème.
0
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008
26 mars 2008 à 15:07
L'assistant recherche aussi (Outils/recherche)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 mars 2008 à 21:50
Si j'ai tout bien compris (?)... je pense que l'idée d'une Function serait bien choisie.

Si tu utilises la fonction Find pour trouver la valeur que tu cherches, le résultat peut te donner la ligne où la valeur a été trouvée.

ex:
Dim Recherche As Range
Set Recherche = Sheets("Feuil2").Columns("A").Find(Tablo(i)) 'si tu utilises un tableau
MsgBox Recherche.Row

Pour vérifier si la recherche est fructueuse ou non
If Not Recherche Is Nothing Then
    MaFunction = Recherche.Row
Else
    MaFunction = 0
End If

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008
27 mars 2008 à 19:45
je persiste :
La fonction ligne te renvoi le numéro de la ligne
LIGNE(A2) te renvoi 2

Tu remplace A2 par une fonction qui retrouve les coordonées : INDEX(EQUIV(..);EQUIV.....;..) Et tu devrais trouver le résultat.
0
Rejoignez-nous