Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème de recherche verticale par VBA

6 réponses
Avatar
Guy
Bonjour à tous

Je coince depuis quelque temps sur un problème de recherche verticale dans
une macro

je voudrais pour une selection de lignes, qu'en colonne Z la macro
m'inscrive le résultat d'une recherhe
verticale faite dans une plage dont le nom se trouve
en colonne D et la valeur recherchée en colonne E

Je ne sais pas si je me suis bien faire comprendre, voici ce que pourrai
être la macro ( si elle fonctionnait ) :-/

Sub nommer_les_equipes()
For Each Cell In Range("Z1:Z10") ' ( en réalité il y en a bien
plus )
lign = Cell.Row
tableaucible =("C" & lign).Value
Cell.FormulaR1C1 = "=VLOOKUP(RC[-21],tableaucible,2,FALSE)"
Next Cell

Remarque : s'il était possible que la macro inscrive directement le résultat
plutot que la formule ( en Z ) ce serait encore mieux
Si quelqu'un a une petite piste, merci d'avance

Guy

6 réponses

Avatar
Guy
bouuuuhhhh Personne ne sait ?

"Guy" a écrit dans le message news:
bljreo$sgo$
Bonjour à tous

Je coince depuis quelque temps sur un problème de recherche verticale dans
une macro

je voudrais pour une selection de lignes, qu'en colonne Z la macro
m'inscrive le résultat d'une recherhe
verticale faite dans une plage dont le nom se trouve
en colonne D et la valeur recherchée en colonne E

Je ne sais pas si je me suis bien faire comprendre, voici ce que pourrai
être la macro ( si elle fonctionnait ) :-/

Sub nommer_les_equipes()
For Each Cell In Range("Z1:Z10") ' ( en réalité il y en a bien
plus )
lign = Cell.Row
tableaucible =("C" & lign).Value
Cell.FormulaR1C1 = "=VLOOKUP(RC[-21],tableaucible,2,FALSE)"
Next Cell

Remarque : s'il était possible que la macro inscrive directement le
résultat

plutot que la formule ( en Z ) ce serait encore mieux
Si quelqu'un a une petite piste, merci d'avance

Guy












Avatar
Daniel.M
Bonjour Guy,

Si j'ai compris.

Sub NommerMachin()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,$C:$D,2,0)"
.Value = .Value
End With
End Sub

Salutations,

Daniel M.

"Guy" wrote in message news:blkc79$3et$
bouuuuhhhh Personne ne sait ?

"Guy" a écrit dans le message news:
bljreo$sgo$
Bonjour à tous

Je coince depuis quelque temps sur un problème de recherche verticale dans
une macro

je voudrais pour une selection de lignes, qu'en colonne Z la macro
m'inscrive le résultat d'une recherhe
verticale faite dans une plage dont le nom se trouve
en colonne D et la valeur recherchée en colonne E

Je ne sais pas si je me suis bien faire comprendre, voici ce que pourrai
être la macro ( si elle fonctionnait ) :-/

Sub nommer_les_equipes()
For Each Cell In Range("Z1:Z10") ' ( en réalité il y en a bien
plus )
lign = Cell.Row
tableaucible =("C" & lign).Value
Cell.FormulaR1C1 = "=VLOOKUP(RC[-21],tableaucible,2,FALSE)"
Next Cell

Remarque : s'il était possible que la macro inscrive directement le
résultat

plutot que la formule ( en Z ) ce serait encore mieux
Si quelqu'un a une petite piste, merci d'avance

Guy
















Avatar
Guy
Bonjour Daniel ( ou plutot Bonsoir pour ce qui me concerne )

Merci de ton intérêt
Ta soluce est bien plus élégante que la mienne mais elle ne fonctionne pas
J'ai du mal m'expliquer
La formule inscrite "=RechercheV ....etc est correcte sauf que la
table_matrice dans laquelle on fait la recherche n'est pas
sur la même feuille
comme il y a beaucoup de tables différentes je les ai nommées ( UT60001, UT
6002, etc )
la colonne D contient le nom de cette table
D1 contenant le texte UT60001, il faudrait donc
Sub NommerMachin()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,$D1,2,0)"
.Value = .Value
End With
End Sub
Le problème est qu'excel va rechercher dans D1 et je n'arrive pas à lui

faire comprendre que c'est dans la matrice dont le nom est indiqué dans D1
que je veux qu'il cherche
Il y a surement une fontion qui permet de le faire mais je ne la trouve pas
Guy






"Daniel.M" a écrit dans le message news:
9Iifb.30701$
Bonjour Guy,

Si j'ai compris.

Sub NommerMachin()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,$C:$D,2,0)"
.Value = .Value
End With
End Sub

Salutations,

Daniel M.

"Guy" wrote in message news:blkc79$3et$
bouuuuhhhh Personne ne sait ?

"Guy" a écrit dans le message news:
bljreo$sgo$
Bonjour à tous

Je coince depuis quelque temps sur un problème de recherche verticale
dans



une macro

je voudrais pour une selection de lignes, qu'en colonne Z la macro
m'inscrive le résultat d'une recherhe
verticale faite dans une plage dont le nom se trouve
en colonne D et la valeur recherchée en colonne E

Je ne sais pas si je me suis bien faire comprendre, voici ce que
pourrai



être la macro ( si elle fonctionnait ) :-/

Sub nommer_les_equipes()
For Each Cell In Range("Z1:Z10") ' ( en réalité il y en a bien
plus )
lign = Cell.Row
tableaucible =("C" & lign).Value
Cell.FormulaR1C1 = "=VLOOKUP(RC[-21],tableaucible,2,FALSE)"
Next Cell

Remarque : s'il était possible que la macro inscrive directement le
résultat

plutot que la formule ( en Z ) ce serait encore mieux
Si quelqu'un a une petite piste, merci d'avance

Guy




















Avatar
Daniel.M
Bonjour Guy,

Tu cherches la fonction INDIRECT().
Si tes tableaux (UT60001,UT60002, etc.) ont au moins 2 colonnes de large.

Sub NommerMachin2()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,INDIRECT($D1),2,0)"
.Value = .Value
End With
End Sub


Si tes tableaux (UT60001,UT60002, etc.) ont plutôt 1 colonne de large.

Sub NommerMachin3()
Range("Z1").FormulaArray = _
"=OFFSET(INDIRECT(RC4),MATCH(RC5,INDIRECT(RC4),0)-1,1)"
Range("Z1").AutoFill Destination:=Range("Z1:Z20"), Type:=xlFillDefault
Range("Z1:Z20").Value = Range("Z1:Z20").Value
End Sub


Salutations,

Daniel M.

"Guy" wrote in message news:blkeqt$4bj$
Bonjour Daniel ( ou plutot Bonsoir pour ce qui me concerne )

Merci de ton intérêt
Ta soluce est bien plus élégante que la mienne mais elle ne fonctionne pas
J'ai du mal m'expliquer
La formule inscrite "=RechercheV ....etc est correcte sauf que la
table_matrice dans laquelle on fait la recherche n'est pas
sur la même feuille
comme il y a beaucoup de tables différentes je les ai nommées ( UT60001, UT
6002, etc )
la colonne D contient le nom de cette table
D1 contenant le texte UT60001, il faudrait donc
Sub NommerMachin()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,$D1,2,0)"
.Value = .Value
End With
End Sub
Le problème est qu'excel va rechercher dans D1 et je n'arrive pas à lui

faire comprendre que c'est dans la matrice dont le nom est indiqué dans D1
que je veux qu'il cherche
Il y a surement une fontion qui permet de le faire mais je ne la trouve pas
Guy






"Daniel.M" a écrit dans le message news:
9Iifb.30701$
Bonjour Guy,

Si j'ai compris.

Sub NommerMachin()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,$C:$D,2,0)"
.Value = .Value
End With
End Sub

Salutations,

Daniel M.

"Guy" wrote in message news:blkc79$3et$
bouuuuhhhh Personne ne sait ?

"Guy" a écrit dans le message news:
bljreo$sgo$
Bonjour à tous

Je coince depuis quelque temps sur un problème de recherche verticale
dans



une macro

je voudrais pour une selection de lignes, qu'en colonne Z la macro
m'inscrive le résultat d'une recherhe
verticale faite dans une plage dont le nom se trouve
en colonne D et la valeur recherchée en colonne E

Je ne sais pas si je me suis bien faire comprendre, voici ce que
pourrai



être la macro ( si elle fonctionnait ) :-/

Sub nommer_les_equipes()
For Each Cell In Range("Z1:Z10") ' ( en réalité il y en a bien
plus )
lign = Cell.Row
tableaucible =("C" & lign).Value
Cell.FormulaR1C1 = "=VLOOKUP(RC[-21],tableaucible,2,FALSE)"
Next Cell

Remarque : s'il était possible que la macro inscrive directement le
résultat

plutot que la formule ( en Z ) ce serait encore mieux
Si quelqu'un a une petite piste, merci d'avance

Guy
























Avatar
Guy
C'est exactement ce qui me manquait
Sauf qu'il faut revenir au " for each cell in ... )
car l'expression indirect(D1) ne renvoie pas la même valeur pour chaque
ligne : expression volatile
C'est moins joli, mais ca marche
Merci de ton aide et bonne soirée
Guy


"Daniel.M" a écrit dans le message news:
Czkfb.30899$
Bonjour Guy,

Tu cherches la fonction INDIRECT().
Si tes tableaux (UT60001,UT60002, etc.) ont au moins 2 colonnes de large.

Sub NommerMachin2()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,INDIRECT($D1),2,0)"
.Value = .Value
End With
End Sub


Si tes tableaux (UT60001,UT60002, etc.) ont plutôt 1 colonne de large.

Sub NommerMachin3()
Range("Z1").FormulaArray = _
"=OFFSET(INDIRECT(RC4),MATCH(RC5,INDIRECT(RC4),0)-1,1)"
Range("Z1").AutoFill Destination:=Range("Z1:Z20"), Type:=xlFillDefault
Range("Z1:Z20").Value = Range("Z1:Z20").Value
End Sub


Salutations,

Daniel M.

"Guy" wrote in message news:blkeqt$4bj$
Bonjour Daniel ( ou plutot Bonsoir pour ce qui me concerne )

Merci de ton intérêt
Ta soluce est bien plus élégante que la mienne mais elle ne fonctionne
pas


J'ai du mal m'expliquer
La formule inscrite "=RechercheV ....etc est correcte sauf que la
table_matrice dans laquelle on fait la recherche n'est pas
sur la même feuille
comme il y a beaucoup de tables différentes je les ai nommées ( UT60001,
UT


6002, etc )
la colonne D contient le nom de cette table
D1 contenant le texte UT60001, il faudrait donc
Sub NommerMachin()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,$D1,2,0)"
.Value = .Value
End With
End Sub
Le problème est qu'excel va rechercher dans D1 et je n'arrive pas à lui

faire comprendre que c'est dans la matrice dont le nom est indiqué dans
D1


que je veux qu'il cherche
Il y a surement une fontion qui permet de le faire mais je ne la trouve
pas


Guy






"Daniel.M" a écrit dans le message
news:


9Iifb.30701$
Bonjour Guy,

Si j'ai compris.

Sub NommerMachin()
With Range("Z1:Z10")
.Formula = "=VLOOKUP($E1,$C:$D,2,0)"
.Value = .Value
End With
End Sub

Salutations,

Daniel M.

"Guy" wrote in message
news:blkc79$3et$



bouuuuhhhh Personne ne sait ?

"Guy" a écrit dans le message news:
bljreo$sgo$
Bonjour à tous

Je coince depuis quelque temps sur un problème de recherche
verticale





dans
une macro

je voudrais pour une selection de lignes, qu'en colonne Z la macro
m'inscrive le résultat d'une recherhe
verticale faite dans une plage dont le nom se trouve
en colonne D et la valeur recherchée en colonne E

Je ne sais pas si je me suis bien faire comprendre, voici ce que
pourrai



être la macro ( si elle fonctionnait ) :-/

Sub nommer_les_equipes()
For Each Cell In Range("Z1:Z10") ' ( en réalité il y en a
bien





plus )
lign = Cell.Row
tableaucible =("C" & lign).Value
Cell.FormulaR1C1 = "=VLOOKUP(RC[-21],tableaucible,2,FALSE)"
Next Cell

Remarque : s'il était possible que la macro inscrive directement
le





résultat
plutot que la formule ( en Z ) ce serait encore mieux
Si quelqu'un a une petite piste, merci d'avance

Guy




























Avatar
Daniel.M
Salut Guy,

C'est exactement ce qui me manquait
Sauf qu'il faut revenir au " for each cell in ... )
car l'expression indirect(D1) ne renvoie pas la même valeur pour chaque
ligne : expression volatile


?
En l'état, le code fourni décale le D1 vers D2, D2 jusqu'à D20­.
Tu peux vérifier en mettant en commentaire la dernière ligne (.value .value).

Ainsi, en Z2, tu devrais avoir :
=RECHERCHEV($E2;INDIRECT($D2);2;0)

Je croyais que c'est ce que tu voulais dire lorsque tu écrivais:
">la colonne D contient le nom de cette table"

En tout cas, si t'as trouvé ton bonheur, c'est le principal :-)

Salutations,

Daniel M.