Recherchev en vba

Roger

XLDnaute Junior
A tous bonjour,
Es-t'il possible d'utiliser vba pour faire une recherche comparable à RECHERCHEV ?
Et d'utiliser les résultats des colonnes successives ?

Merci d'avance pour l'aide reçue.
Roger
 

Pierrot93

XLDnaute Barbatruc
Re : Recherchev en vba

Bonjour Roger

regarde le code ci dessous, si cela peut t'aider :

Code:
Sub test()
With Sheets("Feuil1")
    .Range("B1").Value = WorksheetFunction.VLookup(.Range("A1").Value, Sheets("Feuil2").Range("A1:B100"), 2, False)
End With
End Sub

bon après midi
@+
 

jjjerome

XLDnaute Occasionnel
Re : Recherchev en vba

Bonsoir Roger, Pierrot 93,

Je cherchais depuis un moment et je viens de trouver cette réponse, qui marche parfaitement bien sur des feuilles d'un même classeur, mais est-il possible de l'adapter à une feuille présente dans un autre classeur dans un répertoire distant ?

Merci pour votre réponse
 

Pierrot93

XLDnaute Barbatruc
Re : Recherchev en vba

Bonjour Jérome,

oui à condition que celui-ci soit ouvert :

Code:
Option Explicit
Sub test()
With Workbooks("NomClasseur.xls").Sheets("Feuil1")
    .Range("B1").Value = WorksheetFunction.VLookup(.Range("A1").Value, _
        Workbooks("NomClasseur.xls").Sheets("Feuil2").Range("A1:B100"), 2, False)
End With
End Sub

bonne journée
@+
 

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Salut
Bonjour le Fil
Bonjour le Forum

je ne sais pas si j'ai compris mais un exemple (parmi d'autres)

où les deux fichiers Source et Cible sont dans le même dossier

Le lien : Cijoint.fr - Service gratuit de dépôt de fichiers

le Classeur1 étant le classeur d'ou va être faite la recherche (voir bouton)
on met en A2 la valeur à rechercher (dans Classeur1 colonne 1) et en B2 s'affiche la valeur équivalente trouvée (dans Classeur1 colonne 2 )
voir le code pour plus d'infos sur la procédure
Bonne fin de Journée
 
Dernière édition:

jjjerome

XLDnaute Occasionnel
Re : Recherchev en vba

Merci Pierrot93 et Chti160 pour vos réponses !!!

Pierrot93, j'ai un peu modifier ton code pour qu'il fonctionne dans mon cas :

Code:
Sub test()
With Sheets("Feuil1")
    .Range("B1").Value = WorksheetFunction.VLookup(.Range("A1").Value, _
        Workbooks("NomClasseur.xls").Sheets("Feuil2").Range("A1:B100"), 2, False)
End With
End Sub

Chti160, ton code semble aussi interressant, mais malheureusement, je ne peux pas avoir les 2 fichiers Source et Cible sont dans le même dossier.

Donc sur le code de Pierrot93, est-il possible d'avoir juste un message d'erreur indiquant que le fichier n'est pas ouvert, plutôt que de renvoyer l'erreur de la page VBA ?
J'ai aussi entendu dire qu'il était possible de travailler sur un fichier fermé (ouverture virtuelle), est ce possible dans ce cas, sachant que le fichier cible se trouve dans un repertoire fixe ?

Merci à tous.
 

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Re jjjerome
Bonjour le Fil
Bonjour le Forum
si j'ai bien compris les deux fichiers se trouvent dans des dossiers différents
ensuite ce que tu appelles "ouverture virtuelle" c'est un peut ce que j'ai fait tu ouvres sans l'afficher le fichier et tu le refermes après avoir fait ce que tu as a faire dedans lol

j'ai cru comprendre que tu as l'adresse du fichier Cible il me semble que tu peux donc adapter la procédure en y incluant cette adresse pour l'ouverture virtuelle
Exemple
Const NomClasseur As String = "Classeur2.xls" 'ici le nom du Fichier Cible
Chemin = "C:\Moi\Mes Documents\Test\" 'ici l'adresse du fichier Cible
tu as aussi d'autres façons de faire
ici par exemple
Lire et écrire dans les classeurs Excel fermés - Club des décideurs et professionnels en Informatique
FAQ MS-Excel - Club des décideurs et professionnels en Informatique
Bonne journée
 
Dernière édition:

jjjerome

XLDnaute Occasionnel
Re : Recherchev en vba

Bonjour le forum, Chti160,

Oui, les fichiers se trouvent dans des répertoires différents.
J'ai essayé ton cade pour ouvrir virtuellement le fichier, mais sans succès, pourais-tu me dire comment le mettre STP ?

Voici ci-dessous le code que j'utilise actuellement, j'avais ajouté ton code complet, parce que la fenetre informamt que le fichier n'est pas ouvert m'interressait, amis en essayant de l'adapter, j'ai des erreurs alors que ça fonctionne sur tes fichiers... :(Par contre je n'ai pas l'impression que l'ouverture virtuelle fonctionne)


Code:
Sub test()

'Workbooks("Classeur1.xls").Sheets ("Feuil1")
  With Sheets("Feuil1")
    .Range("J7:J20").Value = WorksheetFunction.VLookup(.Range("G7:G10").Value, _
        Workbooks("Classeur1.xls").Sheets("Feuil1").Range("B1:C100"), 2, False)


End With

End Sub

Merci !!
 

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Salut jjjerome

Dans un premier temps il faut que tu définisses l'adresse du Fichier à ouvrir et son Nom
Exemple Chemin ="C:\Moi\Mes Documents\Test\" 'ici l'adresse du fichier Cible
Const NomClasseur As String = "Classeur2.xls" 'ici le nom du Fichier Cible

de plus au début de ta demande tu transférais une cellule vers une autre cellule la , tu travailles sur une plage ?????

Bonne fin de Soirée
 

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Re
ci dessous pour l'exemple ce que j'ai mis (chez moi) pour répondre à ta demande le fichier Source se trouve dans un autre Dossier que le Fichier Cible
Sub Test()
Dim Chemin As String
Dim WkbB As Workbook
Const Wsht As String = "Feuil1" 'ici on donne le nom de la feuille Cible
Dim Ok As Boolean
Dim DerLgn As Long
Application.ScreenUpdating = False
Const NomClasseur As String = "Classeur2.xls"
'ci dessous j'ai mis en toutes lettres le chemin du fichier Source
en lieu et place de ThisWorkbook.Path & "\"
Chemin = "C:\Users\Jean Marie\Mes Documents\Downloads\"
Ok = ExistFile(Chemin & NomClasseur) 'ici on teste l'existence du fichier Source via son chemin et son nom
If Ok Then
Set WkbB = Workbooks.Open(NomClasseur) 'on affecte ce fichier à la variable en l'ouvrant
With WkbB
DerLgn = .Worksheets(Wsht).Range("A65536").End(xlUp).Row
End With
With Workbooks("Classeur1.xls").Sheets("Feuil1") 'avec le classeur actif
.Range("B2").Value = WorksheetFunction.VLookup(.Range("A2").Value, _
WkbB.Sheets(Wsht).Range("A1:B" & DerLgn), 2, False)
End With
Application.DisplayAlerts = False 'on inhibe le défilement
WkbB.Close False 'on ferme le classeur source ouvert
Else
MsgBox "Le fichier : " & NomClasseur & " N'existe pas " 'on affiche un message si le classeur n'existe pas
End If
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
ensuite si tu veux retourner l'ensemble d'une plage il faudra modifier (VLookup ne renvoie qu'une valeur à la fois je pense) Lol
Bons tests
Bonne fin de Soirée
 
Dernière édition:

abarthelemy

XLDnaute Nouveau
Re : Recherchev en vba

Bonjour Roger

regarde le code ci dessous, si cela peut t'aider :

Code:
Sub test()
With Sheets("Feuil1")
    .Range("B1").Value = WorksheetFunction.VLookup(.Range("A1").Value, Sheets("Feuil2").Range("A1:B100"), 2, False)
End With
End Sub

bon après midi
@+

Bonjour,
J'ai écris un code similaire à celui proposé par Pierrot mais adapté à ma situation. Pour moi il n'y a pas d'erreur mais lors de l'éxécution, je rencontre l'erreur 1004 avec le message "Impossible de lire la propriété VLookup de la classe WorksheetFunction".
Quelqu'un pourrait-il m'aider.
 

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Salut
Bonjour le Fil
Bonjour le Forum

en faisant une recherche sur le net avec comme texte "Impossible de lire la propriété VLookup de la classe WorksheetFunction". tu verras qu'il peut y avoir plusieurs raisons , à toi de voir ce qui te correspond (exemple recherche dans la colonne 2 de ta plage de la feuille Sheeets(2) d'un Numeric alors que les données sont en string ou inverse à voir )
en espérant avoir fait avancer le ChimilinmBlick) ,car on a pas de fichier pour pouvoir tester lol
Bonne journée
 

abarthelemy

XLDnaute Nouveau
Re : Recherchev en vba

En fait je crois que mon problème vient du fait que ma plage pour faire la recherchev est une union de plusieurs lignes qui ne sont pas forcément collées les unes aux autres.
J'ai un fichier qui donne les ventes réalisées dans l'année par références produits, avec une ligne par vente, et le total des ventes pour cette même référence est donné sur une ligne. Et moi il n y a que ce total qui m'intéresse donc j'ai créé une plage qui ne garde que ces totaux (en utilisant la propriété que les totaux sont écris en gras et le reste non)...
J'espère que c'est clair. Est-ce que quelqu'un a une idée ?

En gros ma question c'est est-ce que la rechercheV peut fonctionner avec une plage de données dont les cellules ne se touchent pas ?
 
Dernière édition:

Discussions similaires