VBA rechercheV avec Si

  • Initiateur de la discussion Initiateur de la discussion Arpette
  • 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 !

Arpette

XLDnaute Impliqué
Bonsoir à tous, je souhaite faire une rechercheV sur une feuille2 en allant chercher les données sur une feuille1. Sur ma feuille 2 je souhaite que la recherche se fasse de la ligne B21 à la dernière ligne vide, dès qu'il y a du texte je m'arrête. En plus si la recherche renvoie NA avoir un message "code non trouvé".
Je l'ai fait avec l'enregistreur de macro, mais c'est pas top.

Merci de votre aide.
 
Re : VBA rechercheV avec Si

Re,

A priori dans l'événement "change" tu fais déjà cette recherche, non....
Re, oui dans l'évènement change je fais une recherche et c'est la que je souhaite après avoir saisie la quantité faire l'opération F*H = J mais je ne sais pas comment l'écrire et où le placer. L'évenement double click me sert qu'à insérer des lignes quand j'arrive à la dernière ligne de mon tableau.
Merci de ton aide.
 
Re : VBA rechercheV avec Si

Re,

peut être en modifiant le code de Robert🙂 ainsi :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
 
'si la modification a lieu ailleurs qu'en B21:B100, sort de la procédure
If Not Intersect(Target, Range("B21:B100")) Is Nothing Then

With Sheets("Fournisseurs") 'prend en compte l'onglet "Fournisseurs"
    Set pl = .Range("A2:A" & .Range("A65536").End(xlUp).Row) 'définit la plage de recherche
End With 'fin de la prise en compte de l'onglet "Fournisseurs"
 
Set r = pl.Find(Target.Value, , xlValues, xlWhole) 'définit la recherche
If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de B dans la plage pl
    'place le résultat en D,E,F (tu adapteras à ton cas en modifiant les valeurs des offset (Ligne, Colonnes))
    Target.Offset(0, 2).Value = r.Offset(0, 1).Value
    Target.Offset(0, 3).Value = r.Offset(0, 2).Value
    Target.Offset(0, 6).Value = r.Offset(0, 4).Value

Else 'sinon
    MsgBox "Code non trouvé !" 'message
    Range("B21").Select 'place le curseur dans la cellule B21
End If
'si B est effacée, D,E,F sont effacées également, sort de la procédure
If Target.Value = "" Then
    Target.Offset(0, 2).Value = ""
    Target.Offset(0, 3).Value = ""
    Target.Offset(0, 6).Value = ""
: Exit Sub
End If

End If

If Not Intersect(Target, Range("F21:F100")) Is Nothing Then
    Cells(Target.Row, 10).Value = Cells(Target.Row, 6).Value * Cells(Target.Row, 8).Value
End If

End Sub
 
Re : VBA rechercheV avec Si

Re,

peut être en modifiant le code de Robert🙂 ainsi :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
 
'si la modification a lieu ailleurs qu'en B21:B100, sort de la procédure
If Not Intersect(Target, Range("B21:B100")) Is Nothing Then

With Sheets("Fournisseurs") 'prend en compte l'onglet "Fournisseurs"
    Set pl = .Range("A2:A" & .Range("A65536").End(xlUp).Row) 'définit la plage de recherche
End With 'fin de la prise en compte de l'onglet "Fournisseurs"
 
Set r = pl.Find(Target.Value, , xlValues, xlWhole) 'définit la recherche
If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de B dans la plage pl
    'place le résultat en D,E,F (tu adapteras à ton cas en modifiant les valeurs des offset (Ligne, Colonnes))
    Target.Offset(0, 2).Value = r.Offset(0, 1).Value
    Target.Offset(0, 3).Value = r.Offset(0, 2).Value
    Target.Offset(0, 6).Value = r.Offset(0, 4).Value

Else 'sinon
    MsgBox "Code non trouvé !" 'message
    Range("B21").Select 'place le curseur dans la cellule B21
End If
'si B est effacée, D,E,F sont effacées également, sort de la procédure
If Target.Value = "" Then
    Target.Offset(0, 2).Value = ""
    Target.Offset(0, 3).Value = ""
    Target.Offset(0, 6).Value = ""
: Exit Sub
End If

End If

If Not Intersect(Target, Range("F21:F100")) Is Nothing Then
    Cells(Target.Row, 10).Value = Cells(Target.Row, 6).Value * Cells(Target.Row, 8).Value
End If

End Sub
Merci Pierrot c'est nickel, j'ai obté pour la seconde solution. Merci encore pour ton aide.
Bonne journée
 
Re : VBA rechercheV avec Si

Merci Pierrot c'est nickel, j'ai obté pour la seconde solution. Merci encore pour ton aide.
Bonne journée
Bonsoir Pierrot et le forum, j'ai encore un bug, j'ai rajouté avec click droit suppresion des lignes, ça fonctionne mais j'ai un message d'erreur.
Je joints le fichier.
PS: comment faites vous quand vous donnez des exemples de codes davoir un ascenseur, c'est plus joli et plus lisible.

Merci pour votre aide.
 

Pièces jointes

Re : VBA rechercheV avec Si

Re,

en l'état tu veux supprimer 54 lignes.... et ce en remontant, est ce bien cela que tu veux faire ? il ne restera plus rien de tes données.... Il faut sans doute tester que la ligne cliquée soit supérieure à 54.... rajouter ce test en début de procédure...

Code:
If Target.Row < 54 Then Exit Sub

bonne soirée
@+
 
Re : VBA rechercheV avec Si

Re,

en l'état tu veux supprimer 54 lignes.... et ce en remontant, est ce bien cela que tu veux faire ? il ne restera plus rien de tes données.... Il faut sans doute tester que la ligne cliquée soit supérieure à 54.... rajouter ce test en début de procédure...

Code:
If Target.Row < 54 Then Exit Sub

bonne soirée
@+
Oui Pierrot, c'est bien ça. Si j'insère je me positionne en B46 et si je supprime je me positionne en B100. C'est dans le cas où j'ai inséré et que je n'en ai pas besoin. Mais j'ai message sur la ligne 100 dans la procédure de recherche.
Merci de ton aide
 
- 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

Discussions similaires

Réponses
6
Affichages
330
Retour