Rechercher : dans
Par :

Création d'une liste sous VBA

Dernière réponse le 23 oct 2007 à 18:07:45 Pierre, le 17 aoû 2005 à 16:34:13 
 Signaler ce message aux modérateurs

Bonjour,

je travaille actuellement à la création d'une liste pour une macro sur mon fichier. Je rentre les lignes suivantes (seules celles liées à mon probleme sont presentes) :

Dim Tab_LE() As String
If Left(UCase(Sheets("package").Cells(17, col).Value), 1) = "Y" Then
j = j + 1
ReDim Tab_LE(j)
Tab_LE(j - 1) = Sheets("package").Cells(16, col).Value
End If

Mon problème est le suivant :
Ma table Tab_LE ne contient que la dernière valeur de la boucle or je voudrais qu'elle contiennnent tous les élements répondant aux critères. Que dois je changer?

Merci de votre aide

1

Lupin.Arsene, le 17 aoû 2005 à 17:45:14

Bonjour,

ReDim Preserve Tab_LE(j) 


Lupin
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

2

pierre, le 17 aoû 2005 à 17:58:56

Merci lupin!!

ca n a pas l air d aider donc, soit ce n est pas ca (mais il devait deja manqué ca...), soit j ai planté ma fonction suivante :

If Sheets(i).Range("Z18").Value = "Dim8" And InList(UCase(Sheets(i).Name), Tab_LE, NBLe) _
And UCase(Sheets(i).Name) <> "TABLE" And UCase(Sheets(i).Name) <> "HFM" And UCase(Sheets(i).Name) <> "PACKAGE" And UCase(Sheets(i).Name) <> "E" Then


Function InList(Valeur As String, Tableau() As String, NbElements As Integer) As Boolean
' ---------------------------------------------------------------
' Fonction qui retourne VRAI si la valeur existe dans le Tableau
' ---------------------------------------------------------------
i = 0
trouve = False
While i < NbElements And Not trouve
If UCase(Tableau(i)) = UCase(Valeur) Then
trouve = True
End If
i = i + 1
Wend
InList = trouve
End Function

Apparement, mon Ucase(valeur) n est pas bon puisqu'il ne contient toujours que le dernier élément de ma liste ...

Merci encore de votre aide

Répondre à pierre

3

Lupin.Arsene, le 17 aoû 2005 à 20:34:45

Re:

je vois bien le paramètre [Valeur] dans la fonction, mais avant
l'appel, je ne vois pas l'affectation !

or ce doit être a ce niveau !

comment affectue tu la valeur de [Valeur] ?

Lupin
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

4

Lupin.Arsene, le 18 aoû 2005 à 00:36:24

Re :

quelques détails seulements pour la procédure

Function InList(Valeur As String, Tableau() As String, NbElements As Integer) As Boolean
' ------------------------------------------------------------­---
' Fonction qui retourne VRAI si la valeur existe dans le Tableau
' ------------------------------------------------------------­---
    Dim i As Integer
    Dim trouve As Boolean
    
    i = 0
    trouve = False
    InList = False
    While ((i < NbElements) And (Not (trouve)))
        If UCase(Tableau(i)) = UCase(Valeur) Then
            trouve = True
        End If
        i = i + 1
    Wend
    InList = trouve
    
End Function


je ne vois pas d'erreur dans ta fonction !
outre le fait que tu n'opère pas de contrôle
sur les données avant de tester, ça doit tourner !
If ( tableau(i) <> Null ) Then ...
...If ( Valeur <> Null ) Then ...

Lupin
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

5

pierre, le 18 aoû 2005 à 09:46:35

Re merci,

Oui oui ca tourne effectivement!
Je n'affecte pas [valeur] puisque je croyais tous les paramêtres suffisants. Quelle commande devrais je mettre.

Dans l'etat actuel des choses, ca tourne, mais c est incomplet.
Je n'ai toujours que la dernière valeur de ma liste

Peut être que je n ai pas utilisé le bon schéma de construction... Je n en sais rien...

Répondre à pierre

6

Lupin.Arsene, le 18 aoû 2005 à 15:08:20

Re:

j'ai a tout hazard regardé les premières lignes
que tu as déposé !

une fois remanier ça fonctionne !

Sub Test()

    Dim Tab_LE() As String
    Dim i, j As Integer
    
    j = 1
    For i = 1 To 7
        If Left(UCase(Sheets("feuil1").Cells(i, 2).Value), 1) = "Y" Then
            ReDim Preserve Tab_LE(j) As String
            Tab_LE(j) = Sheets("feuil1").Cells(i, 1).Value
            j = j + 1
        End If
    Next i

    For i = 1 To (j - 1)
        MsgBox Tab_LE(i)
    Next i

End Sub


~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

7

pierre, le 18 aoû 2005 à 15:57:07

Merci Lupin,

hehe, apres avoir trifouiller mille fois dans cette liste j ai fini par tomber sur l erreur suite a ton message! J ai fait une erreur de compteur et donc ca me planté :-)

Maintenant ca marche!

Merci de ta précieuse aide!

Répondre à pierre

8

 ISSAM, le 23 oct 2007 à 18:07:45

Bonjour,
MOI AUSSI J'AI UN SOUCI JE VEUX CREER UNE LISTE DE DONNEE PROVENANT D'OTRE CLASSEUR EXCEL... EN FAITE A CHAK SAISI SUR UN D CLASSEUR,JE SOUHAITERAI KE CA TRANSFERT LES DONNEE SUR MA LISTE PRINCIPALE;;;AU SECOUR MERCI

Répondre à ISSAM