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

  • Initiateur de la discussion Initiateur de la discussion carlos
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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) ?
 
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é
 
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 .
 
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é
 
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
 
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é
 
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 ?
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL 2016 liste
Réponses
10
Affichages
235
Réponses
17
Affichages
533
Réponses
9
Affichages
452
Retour