Macro qui teste sur une valeur similaire

Bonjour

j'aimerai un peu organiser mon fichier Excel afin d'y travailler dessus et j'aimerais bien que ce soit à travers un macro parce que y'a 8000 lignes. le probléme est que on trouve des valeurs pareil dans les deux coté.

Donc j'aimerais faire un macro qui teste si la valeur est dans la colonne A ou B précédemment.

si la valeur X est dans la colonne A alors tout les X doivent l'être.

je sais pas comment m'y prendre.

Et on trouve différent type de valeur ( à peu prés 110).

Merci.


J'ai testé ce code qui m'ai été proposé auparavant mais ça marche pas. (voir le fichier joint terminal-v10)

23terminaux.xlsx (94.93 Ko)
24terminal-v0-1.xlsm (216.58 Ko)

Bonjour,

Ca fait au moins 4 fois que je vois ta question dans différents forums.

Ce n'est pas que les propositions ne fonctionnent pas, c'est que tu es incapables d'expliquer correctement les règles.

Les explications changent tout le temps et sont toujours incomplètes.

J'ai quand même fait une tentative avec ta dernière explication. Résultat : ta demande est impossible.

ligne 2 : 320251275 = Term B

ligne 223 : 32025Y3FV = Term B

ligne 225 : 32025Y3FV en A, 320251275 en B. 2 valeurs pour la même colonne Term B....

Je ne pense pas qu'il y aura une seconde tentative de ma part.

eric

edit: ajout du fichier qui n'est pas passé à cause de la taille.

Ca te fera toujours une base de départ. A toi de revoir les conditions et d'adapter en conséquence.

eric

22classeur2.zip (110.37 Ko)

Salut eric,

Oui ça fait plus de trois semaine que je cherche à trouver une solution mais en vain ça m'a rendu fou , franchement et j'ai posté partout => ça n'a toujours rien donné ou presque.

Je te remercie beaucoup pour ta solution => c'est le principe , maintenant il me reste à échanger les cellules entre elles.

Comme tu as dis le cas ou on trouve :

ligne 2 : 320251275 = Term B

ligne 223 : 32025Y3FV = Term B

ligne 225 : 32025Y3FV en A, 320251275 en B

Ah oui en effet , ça c'est un vrai problème => puisqu'il teste sur la valeur précédente.

Mais en principe c'est ce que je voulais faire, déja les colonnes sont remplies n'importe comment.

Merci.

Bonjour,

Regarde le code et le résultat en C:D, l'échange se fait quand c'est nécessaire. Et lit ce que je t'ai mis...

Tu pourras les échanger 10000 fois, à partir du moment où ces 2 valeurs apparaissent en premier en colonne B elles ne peuvent pas être mises toutes les 2 dans la même cellule pour respecter ta règle.

eric

Bonjour eric,

Oui j'ai édité mon message

Ah oui en effet , ça c'est un vrai problème => puisqu'il teste sur la valeur précédente.

Mais en principe c'est ce que je voulais faire, déja les colonnes sont remplies n'importe comment.

Du coup le macro que tu m'as donné est tout à fait correct.

Merci beaucoup tellement j'ai galéré pour trouver une solution pour ça.

Bonjour,

ok.

Version qui te coche les anomalies dans une 3ème colonne :

Sub traiter()
    Dim Dict, c As Variant, pl() As Variant
    Dim lig As Long, derlig As Long, tmp As String, ano As Long
    Set Dict = CreateObject("Scripting.Dictionary")
    derlig = [A:B].Cells.Find("*", , , , xlByRows, xlPrevious).Row
    With [C2:E2].Resize(Rows.Count - 1)
        .ClearContents
        .Interior.ColorIndex = xlNone
    End With
    pl = [A2].Resize(derlig - 1, 3).Value
    For lig = 1 To derlig - 1
        If pl(lig, 1) <> "" Then
            If Not Dict.exists(pl(lig, 1)) Then
                Dict(pl(lig, 1)) = 1
            End If
        End If
        If pl(lig, 2) <> "" Then
            If Not Dict.exists(pl(lig, 2)) Then
                Dict(pl(lig, 2)) = 2
            End If
        End If
    Next lig
    For lig = 1 To derlig - 1
        If pl(lig, 1) <> "" And pl(lig, 2) <> "" And Dict(pl(lig, 1)) = Dict(pl(lig, 2)) Then
            ano = ano + 1
            Cells(lig + 1, 3).Resize(, 2).Interior.ColorIndex = 6
            pl(lig, 3) = "x"
        ElseIf (pl(lig, 1) <> "" And Dict(pl(lig, 1)) <> 1) Or (pl(lig, 2) <> "" And Dict(pl(lig, 2)) <> 2) Then
            tmp = pl(lig, 1)
            pl(lig, 1) = pl(lig, 2)
            pl(lig, 2) = tmp
            pl(lig, 3) = ""
        End If
    Next lig
    [c2].Resize(derlig - 1, 3) = pl
    If ano > 1 Then MsgBox ano & " anomalies mises en jaune."
End Sub

eric

Eric je sais pas quoi te dire si ce n'est un grand mais un grand merci pour ton aide. Tu m'as simplifié la vie comme pas possible.

Tu n'as jamais expliqué ton but.

Mais si c'est d'avoir toutes les lignes ayant une ref il suffit d'ajouter une colonne avec =A2&","&B2 et de filtrer dessus avec 'Contient'.

eric

Rechercher des sujets similaires à "macro qui teste valeur similaire"