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 SubJ'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 Sub2è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 SubBonjour, 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 :'(
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 SubContent 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
Range("D2:E" & Range("B" & Rows.Count).End(xlUp).Row).ClearContentsQue 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).ClearContentsTa recopie
Range("D2:E" & Range("B" & Rows.Count).End(xlUp).Row).ClearContentsCette 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