Recherche en VBA

Colombine

XLDnaute Junior
Bonsoir à tous, je suis débutante en VBA et la je colle face à une recherche ( style recherchev sous excel mais là en VBA:
Valeur cherchée = valeurs en colonne A dans ma feuil2
Vecteur de recherche = valeurs en colonne A dans ma feuil1
Vecteur valeurs trouvés = valeurs en colonne N dans ma feuil1

Voici le début de programme que j'ai fait mais qui ne m'affiche pas de résultat à part : #nom?

---------------------------------------------------------
Sub Essai4()

Dim maplagerecherche, maplagetrouve As Variant
Dim ChercheTest As String

Worksheets("feuil1").Select

maplagerecherche = Range("a1:a200")
maplagetrouve = Range("n1:n200")


Worksheets("feuil2").Select

ChercheTest = Cells(2, 1).Value
Cells(2, 147) = ActiveCell.FormulaR1C1 = "=VLOOKUP(Cherchetest,CPsuivies!maplagerechercheCP, CPsuivies!maplagetrouveCP)"

End Sub

__________________________________________________________

Pour le moment je fais une recherche d'une cellule mais par la suite j'aimerais l'étendre à une colonne.
Pouvez vous me dire si c'est une erreur de code ou de choix dans la fonction?

Merci d'avance pour votre aide en espérant que je poste au bon endroit :)
 

jpb388

XLDnaute Accro
Re : Recherche en VBA

Bonjour à tous
dans ta formule tu as rajoutée cp à la fin cela devient une nouvelle variable qui est égale à rien d'où l'erreur
et la prochaine fois met ton fichier c'est plus facile pour nous. L'aide est mieux cernée
 

Colombine

XLDnaute Junior
Re : Recherche en VBA

Bonjour,

en effet je voulais mettre le fichier mais comme c'est des infos pro c'est difficile.

dans la formule en effet, il y a CP mais c'est juste une erreur de recopiage car j'ai voulu mettre des noms de variables plus courtes dans le forum.

Le nom de mes variables dans ma formule est bien le nom déclaré .

Bref je cale !!!
 

francedemo

XLDnaute Occasionnel
Re : Recherche en VBA

bonjour Colombine, jpb388,

à essayer :
Code:
Sub Essai4()

Dim MaPlageRecherche As Range
'Dim MaPlageTrouve As Range
Dim ValeurCherche As String
'Dim ChercheTest As String
Dim Ref As Long

With Worksheets("feuil1")
    .Activate
    ValeurCherche = .[A2].Value
    MaPlageRecherche = .[A1:A200]
    'MaPlageTrouve = .[N1:N200]
    Ref = Application.Match(ValeurCherche, MaPlageRecherche, 0)
    .Hyperlinks.Add _
        Anchor:=.[A3], _
        Address:="", _
        SubAddress:="#Feuil2!A" & Ref + 1, _
        ScreenTip:="Cliquer pour aller sur la ligne", _
        TextToDisplay:="vers => " & ValeurCherche & " (ligne = " & Ref + 1 & ")"
End With
'Cells(2, 147) = ActiveCell.FormulaR1C1 = "=VLOOKUP(Cherchetest,CPsuivies!maplagerechercheCP , CPsuivies!maplagetrouveCP)"

End Sub
le texte à chercher est en feuil1!A2
la zone de recherche est en feuil2!A&:A200
le résultat (ligne de référence) est en feuil1!A3
ça crée un lien hypertext qui t’emmène sur la ligne correspondante
(pas compris ta zone valeur trouvée en colonne n, à expliquer)

à essayer et corriger

à+

edit: j'ai laissé ta ligne de formule à la fin avec une coche
 

frangy

XLDnaute Occasionnel
Re : Recherche en VBA

Bonjour,

Si j’ai bien compris ta demande, voici un code qui effectue une RECHERCHEV.
Il cherche la valeur de ChercheTest (valeur de A2 dans Feuil2) dans la colonne A de la Feuil1 et renvoie la valeur se trouvant sur la même ligne, colonne N, le résultat étant copié en EQ2 dans Feuil2.
Code:
Sub Essai4()
Dim MaPlageRecherche As Range
Dim ChercheTest As String
Dim Ws As Worksheet
    Set Ws = Worksheets("Feuil2")
    With Worksheets("Feuil1")
        DerLigne = .Range("A" & .Rows.Count).End(xlUp).Row
        Set MaPlageRecherche = .Range("A1:N" & DerLigne)
        ChercheTest = Ws.Cells(2, 1).Value
        Ws.Cells(2, 147) = Application.VLookup(ChercheTest, MaPlageRecherche, 14, False)
    End With
End Sub

A+
 

Colombine

XLDnaute Junior
Re : Recherche en VBA

Je n'ai qu'un mot à dire : SUPER !

Francedemo --> Merci beaucoup pour ce petit programme qui ne correspond pas exactement à mes attentes mais que je garde bien au chaud car sources de bons apprentissages:)

Frangy --> En plein dans le mil, ça fonctionne à la perfection.

Si je peux me permettre d'abuser, j'aurais besoin d'y intégrer des éléments variables par l'intermédiaire d'une boucle : En effet, cette recherche doit s'appliquer non pas en EQ (colonne 147) mais dans la première colonne vide trouvée dans Feuil2 puis étendre cette recherche sur la colonne complète ( tant que la colonne A contient des informations bien entendu).

Merci beaucoup déjà pour cette précieuse aide
 

Colombine

XLDnaute Junior
Re : Recherche en VBA

Sur l'exemple qu'on vient de faire il effectue une recherche de la valeur A2 de la feuil2 via la feuil1 et met le résultat en EQ.
Mon soucis est que je veux l'appliquer sur des tableaux mais dont le nombre de lignes et de colonnes n'est jamais pareil.

J'ai donc besoin de deux choses:

1 / qu'on repete cette recherche pour toutes les lignes de mon tableau (exemple : je cherche A2 et je met le résultat en EQ2 , je cherche A3 et je met le résultat en EQ3 ... et ce jusqu'à ce que j'ai une cellule vide dans ma colonne A)

2 / Je ne veux pas qu'il le mette en EQ car cet emplacement change en fonction de mes tableaux --> je veux qu'il le mette dans la premiere colonne vide qu'il trouve ( exemple : ma premiere colonne vide est AA , il doit mettre les résultats de la recherche en colonne AA et non EQ)

Voilà j'espère que c'est plus clair pour vous
 

frangy

XLDnaute Occasionnel
Re : Recherche en VBA

Voila, voila ...
Code:
Sub Essai4()
Dim MaPlageRecherche As Range, Cel As Range
Dim DerCol As Integer
Dim DerLigne1 As Long, DerLigne2 As Long, Ligne As Long
Dim Ws As Worksheet
    Ligne = 2
    Set Ws = Worksheets("Feuil2")
    DerCol = Ws.Cells(1, Ws.Columns.Count).End(xlToLeft).Column
    DerLigne2 = Ws.Range("A" & Ws.Rows.Count).End(xlUp).Row
    With Worksheets("Feuil1")
        DerLigne1 = .Range("A" & .Rows.Count).End(xlUp).Row
        Set MaPlageRecherche = .Range("A1:N" & DerLigne1)
        For Each Cel In Ws.Range("A2:A" & DerLigne2)
            Ws.Cells(Ligne, DerCol + 1) = Application.VLookup(Cel.Value, MaPlageRecherche, 14, False)
            Ligne = Ligne + 1
        Next Cel
    End With
End Sub

A+
 

Colombine

XLDnaute Junior
Re : Recherche en VBA

Bonjour DPX --> Bonne idée mais c'est pas tout à fait mon souhait.

Frangy, ton code ne marche pas mais je crois que j'ai trouvé de mon côté:
______________________________________________________________________
Sub Essai5()

Dim MaPlageRecherche As Range
Dim ChercheTest As String
Dim Ws As Worksheet
Dim i, derlign, DerCol As Integer

Worksheets("Feuil2").Select
derlign = ActiveSheet.UsedRange.Rows.Count
DerCol = ActiveSheet.UsedRange.Columns.Count

For i = 2 To derlign - 1

Set Ws = Worksheets("Feuil2")
With Worksheets("Feuil1")
DerLigne = .Range("A" & .Rows.Count).End(xlUp).Row
Set MaPlageRecherche = .Range("A1:N" & DerLigne)
ChercheTest = Ws.Cells(i, 1).Value
Ws.Cells(i, DerCol) = Application.VLookup(ChercheTest, MaPlageRecherche, 14, False)
End With
Next i

End Sub
___________________________________________________________________________________

Tu vas me dire c'est super facile d'adapter quand on a un beau programme tout propre au départ ( Rires : Merci Frangy).


Je profiterais bien pour vous poser une question mais c'est pas tout a fait le même thème, je vous le met quand même ici ou j'ouvre une autre discussion?
 

Discussions similaires

Réponses
16
Affichages
1 K