Valeurs uniques en VBA

Bonjour tout le monde

Dans la colonne C j’ai fait les sommes des valeurs qui sont dans les cellules de A de même couleur, et pour faire cela j coloré manuellement les cellules de C selon les couleurs existante dans A que j distingué manuellement.

Ce que je veux c compléter le code pour qu’il fasse d’abord lui-même la restitution des couleurs identiques sur une cellule unique.

Les Sub color_cel et color_cel_vect sont mes deux façon de faire ces sommes de la colonne C (avec couleurs constituées manuellement)

la dernière macro restitu_color je tente de restituer ces couleurs dans la colonne E mais sans succès, s'il y a dans ma tête des idées claires sur la démarche mais dès que je tente de l'appliquer avec les boucle do while, for, ou do until ..etc ça marche pas!

Merci d'avance pour l'aide le code pour restituer des valeurs de façon unique (sans doublons), pas forcement des couleurs.

re

regarde ici ce qu'elle m'a fait

je ne maitrise pas bien exit for, goto,..

Bonsoir,

Je me suis également penché sur ce problème et voici ma version :

Cordialement.

Re merci à

@ Yvouille

Le code a bien fait le travail.

Mais J’aurais aimé ne pas introduire une fonction de Excel comme equiv, recherch , car il me parais que ce genre de problème à mon sens se résout par l’imbrication de simples boucles de for , until … etc comme on résolvaient les fameux PGCD, nombres premiers etc… c là ma frustration ! (ou j'ai peut-être sous-estimé ce problème??)

crdl

bonjour le fil,

sans recherche ...

Sub Dictioniare()
     Dim Dict, c
     Set Dict = CreateObject("scripting.dictionary") 'créer un dictionaire

     For Each c In Range("A2:A16").Cells
          Dict(c.Interior.ColorIndex) = Dict(c.Interior.ColorIndex) + c.Value     'sommer les valeurs du même couleur
     Next

     For Each c In Range("C2:C5").Cells
          If Dict.exists(c.Interior.ColorIndex) Then
               c.Value = Dict(c.Interior.ColorIndex)     'coller la somme
          Else
               c.ClearContents
          End If
     Next
End Sub

Salut Kamel,

Effectivement qu'un même problème peut se résoudre de 36 manières différentes en VBA. Mais refuser l'une d'elles pour un motif aussi ambigu me semble des plus étranges !

C'est un peu comme si tu avais une maladie grave, que tu savais que tel médicament peut te sauver la vie, mais que tu refuses de le prendre car l'emballage ne te plait pas.

Bonne continuation.

Yvouille

“C'est un peu comme si tu avais une maladie grave, que tu savais que tel médicament peut te sauver la vie, mais que tu refuses de le prendre car l'emballage ne te plait pas.”

C pas un refus !

Le problème que j’ai posté ne s’agit pas d’un problème qui m’a bloqué dans mon travail ou quelque chose comme ça, si c’était le cas, je recopierai le code l’utiliser et ne revenir qu’une seul fois ici pour te dire merci ; puisqu’il m’a résolu le problème. Mon but ici n’est pas seulement résoudre le problème d’un calcule Excel quelconque il a un autre aspect : ici je cherche en plus de ça une chose bien précise qui me taraude..

Sache que je suis débutant dans vba Excel et que j’en ai appris quelque chose de ton code. Mais reste que l’idée qui est dans ma tête n’est pas satisfaite et cela ne diminue en rien en ta contribution.

Merci cordialement

Je reviendrai Bart pour ton code.

Re @ Yvouille

@ BsAlv

Je vous ai dis que le problème est plus simple que ça, j’ai sentis dès le départ qu’il s’agit juste de combinaison de boucles simples de comparaison itératives, il n’est nullement nécessaire de faire appel aux fonctions plus avancées d’excel.

Je l’ai fait ici pour de simple restitution des nombre uniques ( j’ai pas utilisé les couleurs pour faire simple, mais il est évident qu’il est applicable au couleurs il suffit juste de remplacer range par range.interior.colorindex

Sub nombre_unique()

Dim i, j, k As Byte

i = 1

j = 1

k = 1

For i = 1 To 9

For j = 1 To 9 'parcourir les cases de la colonne E pour les comparer à la ligne actuelle de A "i actuel"

If Range("e" & j) = Range("a" & i) Then ' si la valeur de la ligne actuelle de A existe déjà dans E sortir de la

'boucle de parcour de E (des j ) pour passer au prochaine "i" (à la prochaine valeur dans A)

Exit For

Else

' sinon si j est arrivé à la fin (9) sans sortir de la boucle

'et que la valeur actuelle dans A n'est pas trouvée dans E alors : mettre la valeur de la ligne

' actuelle "i" de A dans la case k de E et préparer le rang k+1 de k de la prochaine valeur unique

If j = 9 And Range("e" & j) <> Range("a" & i) Then

Range("e" & k) = Range("a" & i)

k = k + 1

End If

End If

Next j

Next i

End Sub

@ tt

RE

j toujours besoin de vous

juste un tout petit soucis dans mon code precedent concernant le 0 : il le confond avec le vide et l'interprete comme s'il existe déjà dans E

comment palier à ça ?

crdl

bonsoir

bien que j'ai trouvé une astuce pour le 0 c de remplir avec range("e1:e9")="-" au départ la colonne E avec des "-"

je ne suis pas à 100% satisfait avec ce genre de solution tant que je n'ai pas compris dans le fond le fonctionnement d'excel pour la distinction entre les vides et les 0.

@ tt

bonjour KamelG0411,

vide = ""

attention avec "Dim i, j, k As Byte, b As Boolean" seulement k est un byte, i & j ne sont pas assigné et donc "variant"

Bonjour à tous
merci BsAlv pour les remarques enrichissantes et pour l'ajout de nombre de doublons.
@ tt
Rechercher des sujets similaires à "valeurs uniques vba"