Macro RechercheV

Résolu/Fermé
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024 - Modifié par pijaku le 5/08/2014 à 15:46
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024 - 10 août 2014 à 15:40
Bonjour,

J'ai trouvé cette macro sur le net que j'arrive un peu à comprendre (je n'y connais pas grand chose en VBA) et je bloque.

 Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("B5")) Is Nothing Then
  Target.Offset(0, 1).Formula = "=VLOOKUP(B5,Feuil1!A2:D7,2,0)"
   Target.Offset(0, 1).Value = Target.Offset(0, 1).Value

  End If
  End Sub


Je voudrais la modifier pour faire des recherches de la colonne B de la Feuil2 et afficher les valeurs des colonnes B à D de la Feuil1 si les valeurs sont trouvées, sinon afficher NA.
Y a t'il quelqu'un pour me répondre avec une macro simple que je puisse comprendre

Fichier joint : https://www.cjoint.com/?0HfpGOu6EBH

Merci
A voir également:

1 réponse

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
5 août 2014 à 17:08
Bonjour,

Pourquoi voulez-vous une macro ??????
0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
5 août 2014 à 18:13
Même si je maitrise plutôt bien la fonction recherche que j'utilise actuellement, je cherche à simplifier, avoir un tableau plus léger (mes données font près de 10000 lignes), et éviter les suppressions de formules par les utilisateurs...Et en même temps découvrir ce qui est possible en VBA !
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
6 août 2014 à 07:34
Bonjour,

Ok. Je vous fais un fichier exemple.

A+
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
6 août 2014 à 09:21
Re,

fichier exemple: https://www.cjoint.com/?DHgjuRPaInh

A+
0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
6 août 2014 à 14:57
Bonjour,
J'ai testé, et si je comprends, les 2 macros sont donc liées, et une doit être dans la Feuil2 et l'autre laissé dans Module 1.
Que fait la 1ère macro, car je ne vois que la colonne B
La 2ème je comprends mieux, elle écrit dans C,D,E si B est trouvé dans A Feuil1, sinon écrit NA (texte de TNA, qu'il est possible de modifier) dans les cellules.
Y a t'il moyen de mettre les 2 dans le module1.
Merci de vos explications
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
Modifié par f894009 le 6/08/2014 à 15:48
Re,

Y a t'il moyen de mettre les 2 dans le module1. Non, tout dans le code VBA de la feuil2 oui. Le code dans la feuil2 vous permet de traiter en temps reel la recherche sur l'evenement change d'une cellule, sinon il faut un autre evenement (ex: un click bouton ou une combinaison de touches) pour lancer le code si vous voulez tout mettre dans le module1

Private Sub Worksheet_Change(ByVal Target As Range)
Dim derlig As Long, lig, Ligne, Plage As Range, Nb
Dim TNA
'si erreur rendre evenements excel actifs
On Error GoTo traite_erreur
'Desactive les evenements excel: cause--->passage en majuscule de la cellule active cree une recurcivite qui plante excel
Application.EnableEvents = False
'derniere cellule non vide colonne B
derlig = Range("B" & Rows.Count).End(xlUp).Row
'test cellule active colonne B
If Not Application.Intersect(Target, Range("B5:B" & derlig)) Is Nothing Then
'ecriture en majuscule
Target = UCase(Target)
'ligne cellule active
Ligne = Target.Row
'Tableau NA
TNA = Array("NA", "NA", "NA")
With Worksheets("feuil1")
'derniere cellule non vide colonne A
derlig = .Range("A" & Rows.Count).End(xlUp).Row
'mise en memoire plage cellule colonnre A---> recherche plus rapide (vous avez 10000 lignes)
Set Plage = .Range("A1:A" & derlig)
'recherche si l'infos existe
Nb = Application.CountIf(Plage, Target)
'test si >0
If Nb > 0 Then
lig = 1
'recherche ligne des infos a copier
lig = .Columns("A").Find(Target, .Cells(lig, "A"), , xlWhole).Row
'ecriture des infos sur feuil1
Range("C" & Ligne).Resize(, 3) = .Range("B" & lig).Resize(, 3).Value
Else
'ecriture NA si infos pas trouvees
Range("C" & Ligne).Resize(, 3) = TNA
End If
'libere la memoire
Set Plage = Nothing
End With
End If
traite_erreur:
Application.EnableEvents = True
End Sub
0