Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

générer recherchev dans vba

P

pierre

Guest
Bonjour à tous.

Je voudrais écrire dans une cellule avec une macro excel générée sous vba une formule utilisant la fonction RECHERCHEV. J'ai déjà vu qu'il fallait qu'elle soit écrite en anglais. Cela donne ça:
ActiveCell.FormulaR1C1 = "IF (ISNA(VLOOKUP (D12, tablo,2,false));""NON TROUVE"";(VLOOKUP(D12,tablo,2,false)))"

tablo est le nom que j'ai donné à un ensemble de cellules dans lequel je fais ma recherche mais qui dans une autre feuille que la feuille active.

Or je récupère une erreur 1004.

Est-ce que c'est dû au fait que ma zone tablo n'est pas dans la même feuille, où que le nom de la cellule qui contient la valeur recherchée (D12) n'est pas correct (en fait c'est la cellule qui se trouve dans la même ligne et dans la colonne à gauche de la cellule active).

Merci de votre aide.
 
P

pierre

Guest
je pense que si tu mets formula R1C1 tu dois faire référence à une cellule relative à la cellule dans laquelle tu écris ta formule.
Puisque tu cherche quelque chose en D12, essaie la même chose avec ActiveCell.Formula tout court.
 
P

pierre

Guest
Merci pour cette réponse, mais en fait j'avais été clair comme du jus de chique quand j'ai posté mon message:

initialement j'avais mis "D12" comme référence de la cellule qui contient la valeur que je cherche. Mais comme la formule peut être insérée dans une autre cellule que la cellule "E12", j'ai depuis essayé de mettre une référence relative et j'ai écris:

ActiveCell.FormulaR1C1 = "=IF(ISNA(VLOOKUP(Activecell.offset(-1,0).range,tablo,2,FALSE));""NON INSCRIT"";(VLOOKUP(Activecell.offset(-1,0).range,tablo,2,FALSE)))"

Mais ça ne marche pas mieux: j'ai toujours "Erreur d'exécution '1004' Erreur définie par l'application ou par l'objet...

Je reformule donc mon besoin: écrire dans la cellule active la formule recherchev (vlookup en anglais) écrite ci-dessus, tablo étant une zone que j'ai nommée ainsi dans une autre feuille du classeur, et la valeur recherchée dans ce "tablo" étant dans la cellule à gauche de la cellule active.

Merci de votre aide.
 
V

Vériland

Guest
Bonjour Pierre, Pierre et toi le forum,

...au début je croyait qu'il s'agissait du même Pierre qui posait les questions et qui donnait aussi les réponses...heureusement que j'suis pas aussi un Pierre...hi hi hi

Bon ben moi en guise de formule je te propose un autre principe qui sera de faire un clic droit sur une cellule quelconque...

la valeur de cette cellule apparaitra sur la plage d'une autre feuille (ici Zone)...à l'éxécution toutes les valeurs seront surlignées en jaune clair...j'ai aussi mis un message qui indique le nombre de valeur trouvée dans la plage...mais si tu cliques sur une cellule vide il n'y a rien qui se passe...

Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Vériland Septembre 2003
' pour
' Recherche d'une valeur selon clic droit

Dim Valeur As String
Dim Quoi As Integer
Dim Tableau As Variant
Dim Cell As Variant
Dim Mot As Variant
Dim Nombre As String

Nombre = 0
Valeur = ActiveCell.Value

Tableau = Split(Valeur)

For Each Cell In ActiveSheet.Range("Zone")
For Each Mot In Tableau
If Cell.Text = Mot Then
Nombre = Nombre + 1
Cell.Interior.ColorIndex = 36
Exit For
End If
Next Mot
Next Cell
If Valeur = "" Then Exit Sub
MsgBox "il y a " & Nombre & " cellule(s) dont la valeur est : " & Valeur
Cancel = True
End Sub


par contre pour ton problème de formule il y a beaucoup de choses qui m'échappent...bon je vois bien rechercheV (VLOOKUP) et estna (ISNA) mais je ne vois pas pour le deuxième rechercheV...tu as dû utiliser l'enregistreur là...il m'embrouille un peu...lool

enfin c'est pas le problème...mais si tu veux insérer une formule dans la cellule active le plus clair sera de l'inscrire de cette manière dans VBA...

With ActiveCell
.Formula = "=ta formule"
End With

mais au sujet de "rechercheV" il y a aussi d'autres exemples dans le forum...il suffit de faire une recherche avec comme mot clé "RechercheV" par exemple...

voilà pour moi...



PS : Macro à copier depuis le forum auquel cas tu risques d'avoir les attributs gras du post dedans...
 
P

pierre

Guest
Merci d'avoir passé un peu de temps à répondre à mon problème, mais ce n'est pas la réponse que j'attendais. J'ai effectivement cherché dans le forum tout ce qui a été dit sur les RECHECHEV, mais je n'ai pas trouvé.


Je vais formuler ma question autrement:

je veux, par une macro sous VBA, insérer une formule dans la cellule active du type de celle qui suit:

ActiveCell.FormulaR1C1 = "IF (ISNA(VLOOKUP (xxx, yyy,2,false));""NON TROUVE"";(VLOOKUP(xxx,yyy,2,false)))"

xxx est ce qui est contenu dans la cellule à gauche de la cellule active.
yyy est une zone (tableau) qui est située dans une autre feuille (adherent) et que j'ai nommée (dans EXCEL) "tablo".

comment dois-je rédiger ma formule ?

Merci à tous, et bravo à tous ces gens qui répondent brillamment à des questions souvent pas simples !
 
V

Vériland

Guest
Bonsoir Pierre, Jean-Marie et toi le forum,

oui Jean-Marie, ta formule peut fonctionner mais elle ne donnera aucun résultat actuellement ...en fait le problème sera d'y inclure la cellule xxx et la plage yyy tout en se basant sur la valeur situé à gauche de la cellule active...lol

Pour cela j'ai adopté une autre méthode qui consiste à la portionner...car dans VBA avec les ( les " les & et compagnie elle peut facilement faire trois km de long cette formule...on va loin...lol...encore pire que les tiennes ou celles de Monique...ouarf !

donc voilà Pierre, tu vas pouvoir reproduire ce que tu souhaitais faire depuis le début avec cette macro ...

Option Explicit

Sub Formule()
' Vériland
' septembre 2003


Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim e As String
Dim f As String
Dim g As String
Dim h As String
Dim i As String
Dim j As String
Dim Complet As String

a = "=IF(ISNA(VLOOKUP("
b = ActiveCell.Offset(0, -1)
c = "tablo"
d = "FALSE))"
e = """"
f = "NON TROUVÉ"
g = "VLOOKUP("
h = 1
i = 2
j = ","

Complet = a & b & j & c & j & i & j & d & j & e & f & e & j & g & b & j & c & j & i & j & d

With ActiveCell
.Formula = Complet
.Interior.ColorIndex = 36
End With

End Sub



j'ai aussi mis de la couleur dans l'affichage...hi hi hi...normalement tout y est...yapluka...lol



PS : Macro à copier depuis le forum auquel cas tu risques d'avoir les attributs gras du post dedans...
 
P

pierre

Guest
Merci à tous d'avoir essayé de répondre à ma question. J'ai finalement trouvé la réponse partielle pour la formulation de RECHERCHEV généré pa vba:

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],adherent,2,FALSE)"

où adherent est le nom (au sens excellage de cellules nommées) du tableau où je cherche la valeur de la cellule à gauche de la cellule active

Merci encore de vos réponses
 

Discussions similaires

Réponses
3
Affichages
402
Réponses
6
Affichages
484
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…