Extraire valeur si unique

Bonjour,

Je n'arrive pas extraire la valeur des différents nombres dans une plage. Je m'explique:

Si j'ai une colonne contenant les valeurs 1 1 1 4 4 4 4 3 8 8 8 alors j'aimerais avoir le résultat 1 4 3 8 stoker dans 4 variables de tel sorte que je puisse les utiliser.

Avec la fonction countif j'obtiens le nombre de valeur mais moi je veux les valeurs!!

Merci d'avance si quelqu'un peut m'aider!

Bonsoir,

Dans quel contexte ?

Bonsoir MFerrant!

Je travaille sur différents tableaux et pour ça j'utilise VBA que j'apprends depuis peu longtemps!!

Un bout de code à compléter :

Sub essai()
    Dim d As Object, v, k%, n%, i%
    'k =  'numéro colonne concernée
    'n =  'ligne où se termine la suite de valeurs
    Set d = CreateObject("Scripting.Dictionary")
    With ActiveSheet
        For i = 2 To n
            d(.Cells(i, k).Value) = "x"
        Next i
    End With
    v = d.keys
    For i = LBound(v) To UBound(v)
        v(i) = CInt(v(i))
        MsgBox v(i)
    Next i
End Sub

Tu affectes k et n pour identifier la colonne et son extension selon ta config.

A la fin tu disposes d'un tableau de valeurs uniques. Le MsgBox pour vérifier...

Cordialement.

Bonjour,

Merci pour ce code il fonctionne!! C'est pratiquement ça, mais en faite je veux que la valeur des chiffres soit conservée dans une variable, c'est à dire une variable par nombre différent. Variable que je peux utiliser par la suite... et non pas le "nombre total". Je suis débutant donc je vais étudier ce morceau de code et voir comment je l'adapte!

Merci encore!

Si tu n'en es pas encore conscient un tableau est une variable qui en contient plusieurs et qui sont toutes utilisables individuellement !

Donc en plus d'afficher le nombre de valeurs différentes le code les stocke en mémoire? Je travailler la structure dictionnaire pour comprendre exactement ce qui ce passe...

Le dictionnaire est un moyen d'extraire des valeurs uniques. En créant un élément de dictionnaire dont la clé est constituée par la valeur que tu veux récupérer une seule fois, à la fin de la création de ces éléments il n'y a qu'un nombre qui se distinguent par leur clé qui est différente, donc une collection d'éléments uniques. Tu peux les dénombrer avec d.Count, et les rassembler dans un tableau regroupant l'ensemble des clés pour les utiliser plus facilement. Ils apparaissent dans le tableau dans l'ordre de création, mais on pourrait les trier pour les ordonner du plus petit au plus grand...

Tout dépend de l'utilisation pour veut en faire.

Bonjour et merci pour ta réponse!

Si je comprends bien "d.keys" représente l'ensemble des clé générées, et elles sont placées dans le tableau "v"?

Bonjour maroon,

Re MFerrand,

Pour information pour toi maroon, si tu veux en savoir plus sur les dictionnaires (et je te le conseille vivement), je te recommande le site de Jacques Boisgontier. C'est une mine d'informations !

C'est par ici. Voir section Dictionary.

Je laisse la main à MFerrand pour la suite.

Re vba-new ! On n'arrête pas ce soir !

Si plus de question, j'ai rien à dire !

Bon weekend.

Merci pour le lien! C'est pas facile à comprendre mais il y a beaucoup de choses intéressantes!


MFerrand a écrit :

Re vba-new ! On n'arrête pas ce soir !

Si plus de question, j'ai rien à dire !

Bon weekend.

Oui ma question c'était :

maroon a écrit :

Bonjour et merci pour ta réponse!

Si je comprends bien "d.keys" représente l'ensemble des clé générées, et elles sont placées dans le tableau "v"?

Si question, oui c'est ça !

vba-new a écrit :

Bonjour maroon,

Re MFerrand,

Pour information pour toi maroon, si tu veux en savoir plus sur les dictionnaires (et je te le conseille vivement), je te recommande le site de Jacques Boisgontier. C'est une mine d'informations !

C'est par ici. Voir section Dictionary.

Je laisse la main à MFerrand pour la suite.

Est-ce que les bout de code sont utilisables directement? Il y a un exemple qui répond aussi à mon problème je pense mais il me marque l'erreur "utilisation incorrecte de Me":

Private Sub UserForm_Initialize()
  Set f = Sheets("BD")
  Set MonDico = CreateObject("Scripting.Dictionary")
  a = f.Range("A2:A" & f.[A65000].End(xlUp).Row)     ' tableau a(n,1) pour rapidité
  For i = LBound(a) To UBound(a)
     If a(i, 1) <> "" Then MonDico(a(i, 1)) = ""
  Next i
  Me.ComboBox1.List = MonDico.keys
End Sub 

Dans quel module es-tu ?

Désolé je suis débutant et pas sûr de la question!

Je suis dans le module du classeur ou j'ai mis des données pour tester le code

Après ta remarque j'ai remplacé "me" par le nom du module et ça ne bug plus!

Par contre maintenant c'est au niveau de .combobox1 que ça bloque" membre de méthode ou de données introuvable"!

C'est bon!! Fallait pas modifier "me" mais placer le code dans une userform! Merci de m'avoir mis sur la piste! J'en avait jamais utilisé!

Cordialement,

Si tu utilises Me, c'est que tu es dans un module d'objet (Workbook, Worksheet, Userform)

Une procédure Initialize concerne un Userform. Tu dois donc avoir créé un Userform et mis au moins un ComboBox dedans, puisque c'est l'objet de ta procédure (qui doit se trouver dans le module du Userform).

Cette procédure se lance au chargement du Userform, avant son affichage.

Tu crées une autre macro avec au moins : Userform1.Show (ou le nom du Userform), pour le lancer.

Et tu vérifies que le ComboBox a sa liste déroulante alimentée par ta procédure.

Merci pour ces précisions!

Par contre j'ai vraiment du mal à comprendre comment utiliser les clés. En fait mon but est d'appliquer des instructions sur chaque clé et pas de les afficher dans une liste.

Je m'explique:

Si la 1ère clé générée correspond à une valeur qui se trouve dans la colonne A par exemple, alors copier sa valeur associée (qui se trouve dans la colonne B) dans la cellule (i,1) d'une autre feuille.

J'ai essayé différents codes comme :

If mondico.keys = p.Range("A & i") Then Range("B & i") = p.Range("B & i")

mais ça ne fonctionne pas! apparemment je peux pas les utiliser comme ça!

Si je peux avoir encore une piste!?

Rechercher des sujets similaires à "extraire valeur unique"