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

Meilleures réponses pour « Création d'une liste sous VBA » dans :
Listes déroulantes simples avec Excel VoirDans votre tableau, vous souhaitez insérer un texte ou une valeur choisi dans une liste (déroulante). vous créez votre liste, ligne aprés ligne, sur votre feuille en cours ou sur une autre feuille du classeur en cours. vous la nommez : INSERTION...
VBA et les collections d'objets. VoirVBA et les collections d'objets Quand plusieurs (beaucoup de) contrôles sont mis sur une feuille ou un Userform il est parfois fastidieux d'écrire du code dans chaque évènement des contrôles. Ce Tuto vous permet de traiter vos contrôles comme...
Langage C - Les listes chaînées VoirLa notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...
Listes de diffusion (mailing lists) VoirNotion de liste de diffusion Une liste de diffusion (en anglais mailing-list) est un des services les plus couramment utilisés sur internet, permettant à un expéditeur d'envoyer un message à un ou plusieurs destinataires. Le courrier électronique a...

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