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
 

jjjerome

XLDnaute Occasionnel
Re : Recherchev en vba

Bonjour le forum,

(Je n'ai pas encore eu le temps d'essayer de travailler si les fichier fermé).

Je rencontre des problèmes lorsque je répète le code VLookup plusieurs fois pour des colonnes différentes. Ce code a t il des limites ??

En fait j'ai systématiquement les colonnes qui s'effacent losrsque je le répète plus de 3 fois.. ?? ...

Voici le code que j'utilise :
HTML:
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

With Sheets("Feuil1")
    .Range("K7:K20").Value = WorksheetFunction.VLookup(.Range("G7:G10").Value, _
        Workbooks("Classeur1.xls").Sheets("Feuil1").Range("B1:C100"), 3, False)


End With

With Sheets("Feuil1")
    .Range("L7:L20").Value = WorksheetFunction.VLookup(.Range("G7:G10").Value, _
        Workbooks("Classeur1.xls").Sheets("Feuil1").Range("B1:C100"), 4, False)


End With


End Sub

Est ce qu'il serait possible d'adapter le code sur plusieurs colonnes ex :
HTML:
Sub test()
End With

With Sheets("Feuil1")
    .Range("J7:L20").Value = WorksheetFunction.VLookup(.Range("G7:G10").Value, _
        Workbooks("Classeur1.xls").Sheets("Feuil1").Range("B1:C100"), [COLOR="Red"]2 à 4[/COLOR], False)


End With


End Sub
en remplaçant le 2 à 4 ??
 

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Salut jjjerome
Bonjour le Fil
Bonjour Le Forum


arffff tu vas un peu vite,il faudrait que tu regardes ce que fait la Fonction
VLookup (les arguments utilisés par cette fonction) cette fonction Vba et l'équivalent de la fonction Excel RechercheV
La syntaxe de base de la fonction RECHERCHEV est:
=RECHERCHEV(valeur_recherchée;table_matrice;no_index_col;valeur_proche)
valeur_recherchée au singulier donc une cellule par exemple et non une plage
car là tu n'y es pas, tu recherches une plage pour la coller dans une autre .
peut être qu'une boucle pourrait répondre à ton attente
explique nous un peu et met un fichier exemple de ce que tu as et de ce que tu veux faire (avec explications )

Merci d'avance
Bonne journée
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Re
je ne suis pas sur d'avoir compris (pas de fichier )
mais ceci peut être la solution une boucle ??????
Code:
Dim Col As Byte
Dim Lgn As Integer
With Sheets("Feuil1")
For [COLOR=Blue]Col[/COLOR] = 2 To 4 '[COLOR=DarkGreen]ici pour les colonnes à passé en revue[/COLOR]
  For[COLOR=Red] Lgn[/COLOR] = 7 To 20[COLOR=DarkGreen] 'ici pour les lignes à passer en revue[/COLOR]
      .Cells([COLOR=Red]Lgn[/COLOR],[COLOR=Blue] Col[/COLOR]).Value = WorksheetFunction.VLookup(.Range("G" & [COLOR=Red]Lgn[/COLOR]) _
.Value,Workbooks("Classeur1.xls").Sheets("Feuil1").Range("B1:C100"), [COLOR=Blue]Col[/COLOR], False)

  Next[COLOR=Red] Lgn[/COLOR]
Next [COLOR=Blue]Col[/COLOR]
End With
non testé
Bonne journée
 

jjjerome

XLDnaute Occasionnel
Re : Recherchev en vba

Bonjour le forum,
Merci chti60 pour tes réponses, je vais mettre un fichier simplifié et essayer ce que tu me proposes, mais ça parait convenir à mon besoin !

Serait-il aussi possible d'ajouter une condition (exemple : ne s' éxecute que si les valeurs de la colonne 'D' du fichier destination sont vide) ?
 

jjjerome

XLDnaute Occasionnel
Re : Recherchev en vba

Bonjour le forum, Chti160,

Je pense que c'est effectivement la solution, mais j'ai un pronlème sur le code... :cool:

Voici ci-joint un exemple de mes fichiers (source et destination)

Par contre les colonnes de mon fichier source et destnation ne sont pas les même, et je n'ai pas réussi a adapter le code.

Merci encore
 

Pièces jointes

  • GEO SOURCE.xls
    19 KB · Affichages: 306
  • A DESTINATION.xls
    22.5 KB · Affichages: 274

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Salut jjjerome
Bonjour le Fil
Bonjour Le Forum

Voila comment j'ai modifié la procédure , pour l'adapter à tes nouveaux fichiers
Sub TEST_G()
Dim Col As Byte
Dim Lgn As Integer
Dim DerLgn As Long
Dim ColSearch As Integer
ColSearch = 2 'ici on initialise la variable car les colonnes
'des feuilles ne sont pas les même
With Workbooks("A DESTINATION.xls").Sheets("SUIVI A")
DerLgn = .Cells(.Rows.Count, 7).End(xlUp).Row 'ici on détermine la dernière ligne de la plage à passer en revue
For Col = 8 To 103 'ici pour les colonnes à passé en revue
Select Case Col
Case Is = 8

For Lgn = 7 To DerLgn 'ici pour les lignes à passer en revue
.Cells(Lgn, Col).Value = WorksheetFunction.VLookup(.Range("G" & Lgn).Value, _
Workbooks("GEO SOURCE.xls").Sheets("SUIVI").Range("G6:AE700"), ColSearch, False)
Next Lgn
Case 91 To 103
ColSearch = ColSearch + 1 'ici on augmente de 1
For Lgn = 7 To DerLgn 'ici pour les lignes à passer en revue
.Cells(Lgn, Col).Value = WorksheetFunction.VLookup(.Range("G" & Lgn).Value, _
Workbooks("GEO SOURCE.xls").Sheets("SUIVI").Range("G6:AE700"), ColSearch, False)
Next Lgn
End Select
Next Col
End With
End Sub
Bons tests
Bonne journée
 
Dernière édition:

jjjerome

XLDnaute Occasionnel
Re : Recherchev en vba

Bonsoir a tous,
Excellent Chti160, ça marche parfaitement.
Petite remarque, lorsque j'ai un nombre (en colonne G) non présent dans la liste source, j'ai une erreur sur le code.

Et encore une petite chose, on vient de majouter un nouveau besoin... comment faire la même chose avec une colonne indépendante : colonne 'N' du fichier source avec la colonne'BZ' (98) du fichier destination.

Déjà un grand merci !!!
 

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Salut
Bonjour le Fil
Bonjour le Forum

voici la procédure modifiée
Sub TEST_G()
Dim Col As Byte
Dim Lgn As Integer
Dim DerLgn As Long
Dim ColSearch As Integer
Dim Ok As Boolean
Dim Ws_S As Worksheet
Dim Ws_C As Worksheet
Set Ws_S = Workbooks("GEO SOURCE.xls").Sheets("SUIVI")
Set Ws_C = Workbooks("A DESTINATION.xls").Sheets("SUIVI A")
Application.ScreenUpdating = False
With Ws_C
DerLgn = .Cells(.Rows.Count, 7).End(xlUp).Row
For Col = 8 To 103 'ici pour les colonnes à passer en revue
Ok = False
For Lgn = 7 To DerLgn 'ici pour les lignes à passer en revue
If Application.WorksheetFunction.CountIf(Ws_S.Range("G6:AE700"), .Range("G" & Lgn).Value) <> 0 Then
Select Case Col
Case Is = 8
ColSearch = 2: Ok = True
Case 91
ColSearch = 3: Ok = True
Case 92
ColSearch = 4: Ok = True
Case 93
ColSearch = 5: Ok = True
Case 94
ColSearch = 6: Ok = True
Case 98
ColSearch = 8: Ok = True
End Select
If Ok = True Then
.Cells(Lgn, Col).Value = WorksheetFunction.VLookup(.Range("G" & Lgn).Value, _
Ws_S.Range("G6:AE" & Ws_S.Range("G65536").End(xlUp).Row), ColSearch, False)
Ok = False
End If
End If

Next Lgn

Next Col

End With

Application.ScreenUpdating = True
End Sub
elle prend en compte ta demande
colonne 'N' du fichier source avec la colonne 'BZ' (98) du fichier destination
je n'ai pas compris le
comment faire la même chose avec une colonne indépendante
Bonne Journée
n'hésite pas si besoin d'infos
 
Dernière édition:

Joannie

XLDnaute Nouveau
Re : Recherchev en vba

Bonjour,


J'essai de faire une recherche avec 2 fichiers qui ne sont pas dans le même classeur et ça ne fonctionne pas.

Sub Bouton3_Clic()

With Sheets("macro")

.Range("F3:F100").Value = WorksheetFunction.VLookup(.Range("B3:B100").Value, Sheets("Gabarit").Range("A2:J1000"), 10, False)

End With

End Sub


Merci de m'aider!
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re : Recherchev en vba

Salut jjjerome
Bonjour le fil
Bonjour le Forum
arff réponse à Joannie il faut déjà que tes deux fichiers soient ouvert
ensuite il faut indiquer dans la procédure le nom complet Dossier pluscelui du Fichier plus celui de la Feuille
exemple
For L=3 to 100
.Range("F"&L).Value = WorksheetFunction.VLookup(.Range("B"&L).Value, WorkBooks("Nom Du Classeur Source").Sheets("Gabarit").Range("A2:J1000"), 10, False)
Next L
en espérant avoir pu t'aider
Bonne journée
 

kellipse

XLDnaute Nouveau
Re : Recherchev en vba

bonjour,
j'ai un problème qui ressemble au problème au début de la discussion. je veux utiliser la fonction RECHERCHEV ou une autre fonction, si cela existe, pour avoir les données stockées dans la cellule juste avant la cellule recherchée. En fait, je saisis une date, et je veux qu'excel me renvoie les données correspondant à cette date et à la date qui la précède. j'espère que c'est clair. Aider moi SVP.
 

Mulder

XLDnaute Junior
Re : Recherchev en vba

Bonjour à tous,

Je me permets de prendre le fil de cette discussion plutôt que d'en recréer un, car je rencontre un problème similaire.
Dans un Userform, en modifiant le contenu d'un combobox1, je souhaite par recherchev sur une base de donnée présente dans une feuille "Settings", faire afficher une valeur dans un combobox3.
J'ai repiqué et adapté le code donné par Pierrot, mais sans succès.
J'en suis pour le moment rendu à ceci :

Code:
Private Sub ComboBox1_Change()
    ComboBox3.Value = Active.WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Settings").Range("A1:D" & .Range("A65536").End(xlUp).Row).Value, 4, False)
End Sub

En d'autres termes, j'ai une base de données en Settings.
Les valeurs possibles pour combobox1 (une liste de fournisseurs) sont en colonne A.
J'ai défini un produit par défaut pour chaque fournisseur possible saisi en combobox1.
Quand je sélectionne un fournisseur en combobox1, je souhaite faire apparaître mon produit par défaut via le combobox1_change, tout en gardant la possibilité de modifier ensuite le combobox3.
Sachant que ma liste de fournisseurs est vouée à être modifier (plus ou moins de fournisseurs), je ne fixe donc pas la longueur de la base de données, je la laisse libre (d'où l'utilisation du endxlup...

D'avance merci pour toute aide offerte !!
 

Discussions similaires

Statistiques des forums

Discussions
312 080
Messages
2 085 150
Membres
102 794
dernier inscrit
espinata