Problème de recherche de données dans une plage de cellules

Bonjour à tous;

Néophyte en VBA bien que codeur confirmé, je suis face à un problème dont je n'arrive pas à me dépatouiller avec les recherches que j'ai effectué sur le net jusqu'à présent ; c'est pourquoi je sollicite votre aide.

Voici mon problème :

Je dispose d'un tableau dont une colonne (qu'on appellera A) contient des codes numériques (ex. : 750248, 920457, 354785, etc ...).

Je dispose d'une autre colonne (qu'on appellera B) contenant une partie de ces codes (environ 200 codes pour la première colonne, qui représente ma liste complète, et une dizaine de codes pour ma seconde colonne qui représente un extrait).

Je souhaiterais pouvoir indiquer, dans la case correspondante, un "OK" lorsqu'un code présent dans la Colonne B se retrouve dans la colonne A.

J'en suis arrivé à cette étape là pour le moment :

Sub MAJSites()

    Dim ColonneA As Range
    Dim ColonneB As Range
    Dim x As Variant

    Set ColonneB = Range("K3:K10")

    For Each x In ColonneB

        Set ColonneA = Range("B2:B200").Find(x, LookIn:=xlValues)
        If Not x Is Nothing Then
            'on écrit OK dans la ligne correspondante'
        Else
            'on écrit rien'
        End If
    Next x
    Set ColonneB = Nothing
    Set ColonneA = Nothing

End Sub

J'ai déjà essayé plusieurs solutions, mais il semblerait que mon algo soit complètement foireux ...

L'un d'entre vous aurait-il des solutions envisageables ?

Merci d'avance ! =)

Bonjour

1ère solution avec le résultat en colonne C

Sub MAJSites()
Dim J As Long
Dim Cel As Range

  For J = 3 To 10
    Set Cel = Range("B2:B200").Find(what:=Range("K" & J), LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      'on écrit OK dans la ligne correspondante
      Range("C" & Cel.Row) = "Ok"
    End If
  Next J
End Sub

2ème solution avec le résultat en colonne L

Sub MAJSitesbis()
Dim J As Long

  For J = 3 To 10
    If Application.CountIf(Range("B2:B200"), Range("K" & J)) > 0 Then
      'on écrit OK dans la ligne correspondante'
      Range("L" & J) = "Ok"
    End If
  Next J
End Sub

Bonjour, et merci de la réponse rapide !

Néanmoins, je n'ai pas exposé le problème dans son intégralité, et il semblerait que cela soit plus compliqué que ça malheureusement ...

ci-joint le fichier de tous mes maux :'( !

et ce-dessous l'explication correspondante :

Pour tout vous dire, j'ai fait précédemment une macro qui récupère les objets d'emails reçus L'objet de ces emails contient entre autre un code numérique, un statut et une date.

Je traite ensuite sous excel ces objets pour extraire ce qu'il me faut (code, Statut et Date).

Il faut ensuite que je compare les codes numériques extraits à ma liste existante en colonne A, et que je mette dans la colonne "Date Changement de Statut" la date à laquelle j'ai reçu le mail, quand les codes numériques correspondent. (si un code de la colonne B correspond avec un code de la colonne A, je mets la date correspondant à ce code dans la case à coté de la colonne A).

Voila voila ! j'espère avoir été un tant soit peu clair ...

Je vous remercie par avance ! Je me suis lancé dans une aventure un peu trop compliquée pour moi :'(

19exemple.xlsm (32.99 Ko)

Bonjour

Si je comprends bien : Si le numéro colonne E existe en colonne B, on note en colonne C la date de la colonne G, sinon on note "NOk" en colonne D (c'est marrant même en me relisant j'ai les yeux qui se croisent)

A vérifier

Sub MAJSites()
Dim J As Long
Dim Cel As Range

  Range("C2:D" & Range("B" & Rows.Count).End(xlUp).Row).ClearContents
  For J = 3 To 10
    If Range("E" & J) <> "" Then
      Set Cel = Range("B2:B200").Find(what:=Range("E" & J), LookIn:=xlValues, lookat:=xlWhole)
      If Not Cel Is Nothing Then
        'on écrit OK dans la ligne correspondante
        Range("C" & Cel.Row) = Range("G" & J)   '"Ok"
      Else
        Range("D" & J) = "NOk"
      End If
    End If
  Next J
End Sub

Content de voir que je ne suis pas le seul pour qui les yeux s'exorbitaient et les méninges surchauffaient en essayant de formuler par écrit ce problème ... !

En tout cas je te remercie vivement, car c'est absolument ça que je cherchais depuis maintenant 7H ! Je passe le problème en validé

Néanmoins (je vais abuser de ta bonté jusqu'au bout, en tant que Français de base ) je ne comprends pas très bien ta ligne suivante :

Range("D2:E" & Range("B" & Rows.Count).End(xlUp).Row).ClearContents

Que fait-elle, en fait ? =)

Merci encore, et bonne journée sous ce soleil de plomb !

Bonjour

Tu as mal recopié le code (Original)

Range("C2:D" & Range("B" & Rows.Count).End(xlUp).Row).ClearContents

Ta recopie

Range("D2:E" & Range("B" & Rows.Count).End(xlUp).Row).ClearContents

Cette instruction efface les colonnes C et D de la ligne 2 jusqu'à hauteur de la dernière ligne de la colonne B

Ok merci !

c'est parfait.

(Je n'avais pas mal recopié, juste copié collé la ligne depuis mon fichier, où j'avais effectué des modifications )

Sujet à Clore

Rechercher des sujets similaires à "probleme recherche donnees plage"