modif code pour macro

  • Initiateur de la discussion Initiateur de la discussion JEREMS
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

JEREMS

Guest
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😀65536"
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
9
Affichages
508
Réponses
4
Affichages
735
Retour