Recuperer par macro les valeurs d'un tableau sans les doublons ?

C

carlos

Guest
est il possible de recuperer par macro les valeurs d'un tableau(tout) sans les doublons pour les coller dans une colonne (K) en vue de les utiliser dans une liste déroulante (combobox) ?
 
H

Hervé

Guest
Bonsoir

une proposition, en passant par une collection :

Private Sub vev()
Dim c As Range
Dim datanoms As New Collection
Dim item
'----------on crée la collection-----------
On Error Resume Next
For Each c In Range("a1:a" & Range("a65000").End(xlUp).Row)
datanoms.Add c.Text, c.Text
Next c
'------------on renvoi chaque élément de la collection vers la combobox--------
For Each item In datanoms
ComboBox1.AddItem item
Next item

End Sub

Je vois pas l'intéret de passer par la colonne K, c'est une étape que l'on peut éviter, mais si tu y tiens particulierement :

'------------on renvoi chaque élément de la collection vers la colonne K--------
i=1
For Each item In datanoms
range("K"& i).value=item
Next item

pour alimenter un combobox depuis la colonne K :

Me.combobox1.rowsource="tafeuille!k1:k" & Range("k65000").End(xlUp).Row

Salut
Hervé
 
C

carlos

Guest
Bonjour Hervé

Je vois que tu as travailler tard pour m'aider .
Merci

Tu as raison pour la colonne K, je pensais qu'il fallait un espace de stockage sur la feuille mais si on peux s'en passer ce serait mieux.

Donc je me suis limité à :

Private Sub vev()
Dim c As Range
Dim datanoms As New Collection
Dim item
'----------on crée la collection-----------
On Error Resume Next
For Each c In Range("d1:d" & Range("f500").End(xlUp).Row)
datanoms.Add c.Text, c.Text
Next c
'------------on renvoi chaque élément de la collection vers la combobox--------
For Each item In datanoms
ComboBox1.AddItem item
Next item

End Sub

j'ai crée une combobox1 à laquelle j'ai associé :

Private Sub ComboBox1_Change()
vev
End Sub

mais la combo ne se remplit pas des valeurs.
et le message suivant apparait :"erreur de compilation :Sub ou fonction non definie"
C'est certainement une erreur de debutant (ce que je suis d'ailleur)
Voila je suis un peu perdu .
 
H

Hervé

Guest
re

code à placer dans le module de la feuille (clic droit sur l'onglet, puis visualiser le code)

j'ai rajouté combobox1.clear pour vider la combobox avant l'initilalisation.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
Dim datanoms As New Collection
Dim item
ComboBox1.Clear
'----------on crée la collection-----------
On Error Resume Next
For Each c In Range("d1:d" & Range("f500").End(xlUp).Row)
datanoms.Add c.Text, c.Text
Next c
'------------on renvoi chaque élément de la collection vers la combobox--------
For Each item In datanoms
ComboBox1.AddItem item
Next item

End Sub

Tu as raison il faut un espace de stockage, c'est pour cela que l'on passe par une collection.

Salut
Hervé
 
C

carlos

Guest
Salut Hervé

Bravo car je n'avais jamais eu sur le net de réponse à ce que tu viens de réaliser.

j'ai mis le code dans la feuille de vba . Ca marche

Les valeurs d'une colonne sont inserees dans le combobox . Impec
( Cependant, j'ai testé avec un tableau à 2 colonnes:In Range("d2:d" & Range("e500") mais seulement la col d est prise en compte ????? pourquoi?).

pour le moment j'essaie de comprendre l'ensemble que tu as construit .
Merciiiiiiiiiiiiiiiiiiii
 
H

Hervé

Guest
re

2 solutions :

soit tu fais référence à une deuxième collections d'adresse :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
Dim datanoms As New Collection
Dim dataadresse As New Collection

Dim item
ComboBox1.Clear
'----------on crée la collection-----------
On Error Resume Next
For Each c In Range("d1:d" & Range("f500").End(xlUp).Row)
datanoms.Add c.Text, c.Text
dataadresse.Add c.Address, c.Text
Next c
'------------on renvoi chaque élément de la collection vers la combobox--------
For Each item In datanoms
ComboBox1.AddItem item
ComboBox1.List(x, 1) = Range(dataadresse.item(item)).Offset(0, 1).Value
x = x + 1
Next item

End Sub


soit tu boucles sur ta plage en comparant chaque cellule avec un item de ta collection et tu renvoi en colonne 2 la valeur de la cellule de droite.

Offset(0, 1) doit être adapté, on travaille sur la colonne D et on veut renvoyer en 2ème colonne la valeur de E.

la synthaxe pour le remplissage d'une colonne dans combobox est combobox1.list.

Ca commence à être de la haute voltige .

Salut
Hervé
 
C

carlos

Guest
Hervé , j'ai expedié le fichier joint y a qq minutes mais je ne le vois pas sur le forum ....

Ké passa ...Es ce normal ?
Vérifiez vous les pJ avant de les placer sur ce forum?

Dois je renvoyer un autre ou attendre ?
 
C

carlos

Guest
RE re re re re re Hervé

Il y a en faite deux problemes

1- Il s'agit de faire apparaitre dans le combobox les diférentes valeurs recuperées sans doublon dans la plage "D E F" de la feuille F_ele

2 - j'aimerais que par la suite ce combobox se trouve dans la feuille classe mais qu'il conserve les valeurs du 1-

De la je selectionnerais une valeur du combo ( critere de filtrage )
Mais ca j'ai réussi à le faire (grace d'ailleurs à ce forum)

J'espere que je suis assez clair ...

Carlos
 

Pièces jointes

  • classefiltremacro.zip
    24.4 KB · Affichages: 72
  • classefiltremacro.zip
    24.4 KB · Affichages: 78
  • classefiltremacro.zip
    24.4 KB · Affichages: 80
C

ChTi'160

Guest
Salut"carlos "
bonsoir à toutes et à tous
il y a apparemment un problème avec le fichier joint message
Signature de fin de rép. central non trouvée. Soit ce fichier n'est pas un fichier Zip, soit il constitue un disque d'une archive multi-volume.
quezz a co
A+++
Jean Marie
 

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 459
Membres
103 547
dernier inscrit
matospi