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 ?
(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
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:
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 )
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
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) ?
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
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.
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
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 completDossier pluscelui duFichier 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
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.
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...