modif code pour macro

JEREMS

XLDnaute Nouveau
Bonjour,

Ci-dessous un code qui effectue une recherchev.
J'aimerais pouvoir faire la même chose mais en effectuant une recherche dans une autre feuille que la feuille active.
Pouvez-vous m'aider? (j'espère que je suis explicite)

Merci
Jerems

----------------------------------------------------------
Option Explicit

Const AdrTableau1 As String = "B1:A65536"
Const AdrTableau2 As String = "C1:D65536"
Const AdrCellule As String = "F1"

Const MsgErreur As String = "Valeur non trouvée"

Dim InEvent As Boolean
'

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim Resultat As Variant
'
If Not InEvent Then

InEvent = True

If Not Intersect(Target, Range(AdrTableau1 & "," & _
AdrTableau2 & "," & AdrCellule)) Is Nothing Then

If IsEmpty(Range(AdrCellule)) Then
Range("G10").ClearContents
InEvent = False
Exit Sub
End If
With Application.WorksheetFunction

On Error Resume Next

Resultat = .VLookup(Range(AdrCellule), Range(AdrTableau1) _
, 2, False)

If Err <> 0 Then

Err.Clear

Resultat = .VLookup(Range(AdrCellule), Range(AdrTableau2) _
, 2, False)

End If

End With

Range("H1") = IIf(Err <> 0, MsgErreur, Resultat)

End If

InEvent = False

End If

End Sub
 

marco57

XLDnaute Occasionnel
Re : modif code pour macro

Bonsoir Jerems et toi le Forum,

L' "AdrTableau2" comporte un smiley!!!!!

Si j'ai bien compris ton problème, le code suivant, que tu devras peut-être adapter en fonction de tes adresses, devrait répondre à ton attente.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Valeurs1 As Range
Dim Valeurs2 As Range
Dim Cellule As Range
Dim InEvent As Boolean
Dim Resultat As Variant

Set Valeurs1 = Feuil2.Range("B1:A65536")
Set Valeurs2 = Feuil2.Range("C1:d65536")
Set Cellule = Range("F1")

If Not InEvent Then
InEvent = True
If Not Intersect(Target, Cellule) Is Nothing Then
If IsEmpty(Cellule) Then
Range("G10").ClearContents
InEvent = False
Exit Sub
End If
With Application.WorksheetFunction
On Error Resume Next
Resultat = .VLookup(Cellule.Value, Valeurs1, 2, 0)
If Err <> 0 Then
Err.Clear
Resultat = .VLookup(Cellule.Value, Valeurs2, 2, 0)
End If
End With
Range("H1") = IIf(Err <> 0, "Valeur introuvable", Resultat)
End If
InEvent = False
End If

End Sub

Je suis surpris de voir la déclaration de champs (Range) par l'utilisation d'un constante String pour son adresse. C'est assez inhabituel. Je n'ai pas changé le type de la variable Resultat car je n'ai pas tes données mais le type Variant est le plus lourd.

Bonne soirée

Marco
 

Statistiques des forums

Discussions
312 482
Messages
2 088 765
Membres
103 954
dernier inscrit
SirJah