VBA vérifier la valeur des cellules

Bonjour

je cherche le code VBA qui permet de vérifier la valeur des cellules de la même ligne si c'est répété

CAD on compare la valeur entre entre les colonne A, B,C,D,càd: A<->B A<->C A<->D B<->C B<->D C<->D

au lieu de le code comme

For Each i In Range(Cells(2, 1), Cells(Nb_Lignes, 1))

For Each j In Range(Cells(2, 2), Cells(Nb_Lignes,2))

For Each k In Range(Cells(2, 3), Cells(Nb_Lignes, 3))

For Each l Range(Cells(2, 4), Cells(Nb_Lignes, 4))

If i = j Then

j.Clear

If i = kThen

k.Clear

ce code rend le système Excel hyper long, Y a des codes mieux que ça?

Bonjour,

Et si tu nous disais ce que tu souhaites obtenir en faisant ce comparatif (le plus grand, le plus petit, un ordre de valeur,...), cela sera plus évident de trovuer quelque chose de plus optimisé.

Cordialement,

Edit : Oui non j'ai compris en relisant même si ce n'est pas très clair, en gros tu supprimes les valeurs en double si j'ai bien suivi.

Par contre tu as besoin de garder les valeurs dans les colonnes de bases où elles se trouvent, ou tu veux juste trier les doublons ?

un bout de code qui enlève les doublons lignes par lignes, de la ligne 1 jusqu'en bas de page, (mais seulement sur 20 colonnes, à modifier si besoin), par contre cela decale toutes les valeurs qui restent pour les resserrer à gauche, donc si tu as besoin que t'es valeurs restent en place, ca n'ira pas, donc si tu pouvais juste préciser un peu le résultat attendu stp :

Sub es()
 Dim t, x As Variant, m As Object, i As Long

 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
 Set m = CreateObject("Scripting.Dictionary")
 x = Range(Cells(i, 1), Cells(i, 20))
 For Each t In x: m(t) = t: Next t
 Range(Cells(i, 1), Cells(i, 20)) = ""
 Cells(i, 1).Resize(1, m.Count) = m.keys
 Set m = Nothing
 Next i

 End Sub

je compare les valeurs pour enlever les informations répéter, ex : si "Swissxoy" apparait au cellule A et C aussi, je vais vide cellule C et garde celui dans cellule A

Oui ca ok, mais par exemple

tu as des valeurs en A, B, C ,D ,E

si A et C sont identiques, tu effaces C, mais faut-il que tes valeurs restent dans leur colonne (et donc tu ais A, B, (C=vide), D, E) ou si elles se décalent ce n'est pas grave (et donc tu aurais des valeurs en A, B, C, D car la valeur de D => va en C, et la valeur de E => va en D) ?

Si la 2ème solution est acceptable, le bout de macro que je t'ai fourni fonctionne, sinon il faut revoir la chose si les valerus ne doivent pas bouger.

Cordialement,

Merci Zirak d'interesse à mon problème .

Pour répondre à ta question, je veux juste vider le cellule car j'ai autre code pour décaler les cellules vides vers gauche

Si tu utilises un autre code pour faire le decalage, autant utilisé celui que j'ai fourni plus haut, qui fait directement le tri + le decalage en 1 fois.

Cordialement,

Zirak, bienque j'ai pas très compris ton code, mais je l'ai utilisé, ca marche bien!!!!T'es trop fort!!!

Zirak, après d'exécution de ton code, les colonnes traitées sont classées au 1ere rang, sachant que y a des colonnes se situent devant ces colonnes spéciales.

Est ce que je peux les faire rester où elles étaient STP

Bonjour,

Alors dans le code fourni :

x = Range(Cells(i, 1), Cells(i, 20))

le 1 et le 20 représentent les colonnes à trier

Et :

Cells(i, 1).Resize(1, m.Count) = m.keys

représente la colonne à partir de laquelle recoller le tri.

A modifier avec les numéros des colonnes que tu veux traiter.

Cordialement,

Merci ton aide, zirak, t'es génal!

Zirak a écrit :

Bonjour,

Et si tu nous disais ce que tu souhaites obtenir en faisant ce comparatif (le plus grand, le plus petit, un ordre de valeur,...), cela sera plus évident de trovuer quelque chose de plus optimisé.

Cordialement,

Edit : Oui non j'ai compris en relisant même si ce n'est pas très clair, en gros tu supprimes les valeurs en double si j'ai bien suivi.

Par contre tu as besoin de garder les valeurs dans les colonnes de bases où elles se trouvent, ou tu veux juste trier les doublons ?

un bout de code qui enlève les doublons lignes par lignes, de la ligne 1 jusqu'en bas de page, (mais seulement sur 20 colonnes, à modifier si besoin), par contre cela decale toutes les valeurs qui restent pour les resserrer à gauche, donc si tu as besoin que t'es valeurs restent en place, ca n'ira pas, donc si tu pouvais juste préciser un peu le résultat attendu stp :

Sub es()
 Dim t, x As Variant, m As Object, i As Long

 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
 Set m = CreateObject("Scripting.Dictionary")
 x = Range(Cells(i, 1), Cells(i, 20))
 For Each t In x: m(t) = t: Next t
 Range(Cells(i, 1), Cells(i, 20)) = ""
 Cells(i, 1).Resize(1, m.Count) = m.keys
 Set m = Nothing
 Next i

 End Sub

Bonsoir,

comment en peux adapter ceci pour qu'il ferra la même chose pour les les colonnes !!

Merci de voir la PJ.

Cordialement

Rechercher des sujets similaires à "vba verifier valeur"