Création d'une liste sous VBA [Fermé]

Signaler
-
 ISSAM -
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

8 réponses

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
1
Merci

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

CCM 60511 internautes nous ont dit merci ce mois-ci


Bonjour,

ReDim Preserve Tab_LE(j) 


Lupin
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

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

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
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...

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


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!