Valeurs ligne et colonne à partir d'adresse cellule
5 réponses
Willy Gruner
Bonsoir à toutes et tous
J'ai une plage A1:E10 et une valeur (par exemple 8.5) dans une cellule de
cette plage.
Comment sans vba rechercher cette valeur pour obtenir l'adresse de cette
cellule, la valeur de la colonne A de cette ligne ainsi que la première
valeur de la colonne où cette valeur se situe.
La valeur cherchée ne se situe pas dans la colonne A.
Exemple : je cherche la valeur minimum pour les bananes
A B C D
E
1 Auchan Carrefour Champion
2 Bananes 2.5 1.90 2.00
3 Oranges 1.5 2.05 1.87
4 Pommes 1.05 2.04 2..04
J'aimerai obtenir dans la cellule D2, le nom carrefour.
Il y a un autre problème lorsque plusieurs grandes surfaces pratiquent le
même prix : exemple pour les pommes.
Comment faire apparaitre ces 2 grandes surfaces dans les cellules D4
(Carrefour) et E4 (Champion) ? Le cas maximum d'égalités est 4 pour mon cas.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent.
Il y a un espace qui s'insère au début du résultat. Tu pourras pallier cet ennui avec un test : If isnull(NomMarque) then NomsMarques = Application. _ WorksheetFunction.Index(PlageMarque, 1, i).Value else NomsMarques = NomsMarques & " " & Application. _ WorksheetFunction.Index(PlageMarque, 1, i).Value EndIf
-----Message d'origine----- Je ne sais pas quoi répondre... Avec Excel et sans VBA, ça
ne m'a pas l'air faisable. S'il n'y avait pas d'égalité sur les lignes, la fonction : =Index(B1:C1;1;equiv(min(Ligne);Ligne))) où Ligne = Bx:Cx pour la ligne x
Tu peux même déterminer le nombre d'égalité avec : =nb.si(Ligne;min(Ligne)
Avec VBA, il faudrait créer une fonction :
Function PrixMini(ByVal PlagePrix As Range, ByVal PlageMarque As Range) Dim Prix As Double Prix = Application.WorksheetFunction.Min(PlagePrix)
Dim NomsMarques As String Dim i As Integer i = 0 Dim Cel As Range For Each Cel In PlagePrix.Cells i = i + 1 If Cel.Value = Prix Then NomsMarques = NomsMarques & " " & _ Application.WorksheetFunction. _ Index(PlageMarque, 1, i).Value End If Next Cel PrixMini = NomsMarques End Function
Et ça marche...
Il y a un espace qui s'insère au début du résultat. Tu
pourras pallier cet ennui avec un test :
If isnull(NomMarque) then
NomsMarques = Application. _
WorksheetFunction.Index(PlageMarque, 1, i).Value
else
NomsMarques = NomsMarques & " " & Application. _
WorksheetFunction.Index(PlageMarque, 1, i).Value
EndIf
-----Message d'origine-----
Je ne sais pas quoi répondre... Avec Excel et sans VBA,
ça
ne m'a pas l'air faisable. S'il n'y avait pas d'égalité
sur les lignes, la fonction :
=Index(B1:C1;1;equiv(min(Ligne);Ligne)))
où Ligne = Bx:Cx pour la ligne x
Tu peux même déterminer le nombre d'égalité avec :
=nb.si(Ligne;min(Ligne)
Avec VBA, il faudrait créer une fonction :
Function PrixMini(ByVal PlagePrix As Range, ByVal
PlageMarque As Range)
Dim Prix As Double
Prix = Application.WorksheetFunction.Min(PlagePrix)
Dim NomsMarques As String
Dim i As Integer
i = 0
Dim Cel As Range
For Each Cel In PlagePrix.Cells
i = i + 1
If Cel.Value = Prix Then
NomsMarques = NomsMarques & " " & _
Application.WorksheetFunction. _
Index(PlageMarque, 1, i).Value
End If
Next Cel
PrixMini = NomsMarques
End Function
Il y a un espace qui s'insère au début du résultat. Tu pourras pallier cet ennui avec un test : If isnull(NomMarque) then NomsMarques = Application. _ WorksheetFunction.Index(PlageMarque, 1, i).Value else NomsMarques = NomsMarques & " " & Application. _ WorksheetFunction.Index(PlageMarque, 1, i).Value EndIf
-----Message d'origine----- Je ne sais pas quoi répondre... Avec Excel et sans VBA, ça
ne m'a pas l'air faisable. S'il n'y avait pas d'égalité sur les lignes, la fonction : =Index(B1:C1;1;equiv(min(Ligne);Ligne))) où Ligne = Bx:Cx pour la ligne x
Tu peux même déterminer le nombre d'égalité avec : =nb.si(Ligne;min(Ligne)
Avec VBA, il faudrait créer une fonction :
Function PrixMini(ByVal PlagePrix As Range, ByVal PlageMarque As Range) Dim Prix As Double Prix = Application.WorksheetFunction.Min(PlagePrix)
Dim NomsMarques As String Dim i As Integer i = 0 Dim Cel As Range For Each Cel In PlagePrix.Cells i = i + 1 If Cel.Value = Prix Then NomsMarques = NomsMarques & " " & _ Application.WorksheetFunction. _ Index(PlageMarque, 1, i).Value End If Next Cel PrixMini = NomsMarques End Function
Et ça marche...
ChrisV
Bonjour Vincent, bonjour Willy,
Avec Excel et sans VBA, ça ne m'a pas l'air faisable...
Juste en passant... entre 2 apéros ! ;-) Avec la plage (selon les données de ton exemple) B2:D2 nommée "gdS" et A3:A5 nommée "pdT" en F2: Données/Validation/Options/Autoriser: Liste Source: =pdT
en G2:G4 (à saisir sans les { } et valider par Ctrl+shift+Entrée) {=TRANSPOSE(INDIRECT("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)))}
en H2:H4 (à saisir sans les { } et valider par Ctrl+shift+Entrée) {=TRANSPOSE(gdS)}
G2:H4 nommée Zn
en I2:I4 (à saisir sans les { } et valider par Ctrl+shift+Entrée) {=SI(ESTERR(INDEX(Zn;PETITE.VALEUR(SI(DECALER(Zn;;;;1)=MIN (INDIRECT("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)));{2;3;4}-1);{1;2;3}) ;2));"";INDEX(Zn;PETITE.VALEUR(SI(DECALER(Zn;;;;1)=MIN(INDIRECT ("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)));{2;3;4}-1);{1;2;3});2))}
masquer ensuite les colonnes G:H
@ bientôt
ChrisV
"Vincent." a écrit dans le message de news: 063101c36003$23803900$ Je ne sais pas quoi répondre... Avec Excel et sans VBA, ça ne m'a pas l'air faisable. S'il n'y avait pas d'égalité sur les lignes, la fonction : =Index(B1:C1;1;equiv(min(Ligne);Ligne))) où Ligne = Bx:Cx pour la ligne x
Tu peux même déterminer le nombre d'égalité avec : =nb.si(Ligne;min(Ligne)
Avec VBA, il faudrait créer une fonction :
Function PrixMini(ByVal PlagePrix As Range, ByVal PlageMarque As Range) Dim Prix As Double Prix = Application.WorksheetFunction.Min(PlagePrix)
Dim NomsMarques As String Dim i As Integer i = 0 Dim Cel As Range For Each Cel In PlagePrix.Cells i = i + 1 If Cel.Value = Prix Then NomsMarques = NomsMarques & " " & _ Application.WorksheetFunction. _ Index(PlageMarque, 1, i).Value End If Next Cel PrixMini = NomsMarques End Function
Et ça marche...
-----Message d'origine-----
Bonsoir à toutes et tous
J'ai une plage A1:E10 et une valeur (par exemple 8.5) dans une cellule de
cette plage. Comment sans vba rechercher cette valeur pour obtenir l'adresse de cette
cellule, la valeur de la colonne A de cette ligne ainsi que la première
valeur de la colonne où cette valeur se situe. La valeur cherchée ne se situe pas dans la colonne A. Exemple : je cherche la valeur minimum pour les bananes
J'aimerai obtenir dans la cellule D2, le nom carrefour. Il y a un autre problème lorsque plusieurs grandes surfaces pratiquent le
même prix : exemple pour les pommes. Comment faire apparaitre ces 2 grandes surfaces dans les cellules D4
(Carrefour) et E4 (Champion) ? Le cas maximum d'égalités est 4 pour mon cas.
Merci d'avance pour votre aide
M. Willy Gruner
.
Bonjour Vincent, bonjour Willy,
Avec Excel et sans VBA, ça ne m'a pas l'air faisable...
Juste en passant... entre 2 apéros ! ;-)
Avec la plage (selon les données de ton exemple) B2:D2 nommée "gdS"
et A3:A5 nommée "pdT"
en F2: Données/Validation/Options/Autoriser: Liste
Source: =pdT
en G2:G4
(à saisir sans les { } et valider par Ctrl+shift+Entrée)
{=TRANSPOSE(INDIRECT("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)))}
en H2:H4
(à saisir sans les { } et valider par Ctrl+shift+Entrée)
{=TRANSPOSE(gdS)}
G2:H4 nommée Zn
en I2:I4
(à saisir sans les { } et valider par Ctrl+shift+Entrée)
{=SI(ESTERR(INDEX(Zn;PETITE.VALEUR(SI(DECALER(Zn;;;;1)=MIN
(INDIRECT("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)));{2;3;4}-1);{1;2;3})
;2));"";INDEX(Zn;PETITE.VALEUR(SI(DECALER(Zn;;;;1)=MIN(INDIRECT
("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)));{2;3;4}-1);{1;2;3});2))}
masquer ensuite les colonnes G:H
@ bientôt
ChrisV
"Vincent." <NOSPAMvincent.fallas@fr.pwc.com> a écrit dans le message de
news: 063101c36003$23803900$a501280a@phx.gbl...
Je ne sais pas quoi répondre... Avec Excel et sans VBA, ça
ne m'a pas l'air faisable. S'il n'y avait pas d'égalité
sur les lignes, la fonction :
=Index(B1:C1;1;equiv(min(Ligne);Ligne)))
où Ligne = Bx:Cx pour la ligne x
Tu peux même déterminer le nombre d'égalité avec :
=nb.si(Ligne;min(Ligne)
Avec VBA, il faudrait créer une fonction :
Function PrixMini(ByVal PlagePrix As Range, ByVal
PlageMarque As Range)
Dim Prix As Double
Prix = Application.WorksheetFunction.Min(PlagePrix)
Dim NomsMarques As String
Dim i As Integer
i = 0
Dim Cel As Range
For Each Cel In PlagePrix.Cells
i = i + 1
If Cel.Value = Prix Then
NomsMarques = NomsMarques & " " & _
Application.WorksheetFunction. _
Index(PlageMarque, 1, i).Value
End If
Next Cel
PrixMini = NomsMarques
End Function
Et ça marche...
-----Message d'origine-----
Bonsoir à toutes et tous
J'ai une plage A1:E10 et une valeur (par exemple 8.5)
dans une cellule de
cette plage.
Comment sans vba rechercher cette valeur pour obtenir
l'adresse de cette
cellule, la valeur de la colonne A de cette ligne ainsi
que la première
valeur de la colonne où cette valeur se situe.
La valeur cherchée ne se situe pas dans la colonne A.
Exemple : je cherche la valeur minimum pour les bananes
Avec Excel et sans VBA, ça ne m'a pas l'air faisable...
Juste en passant... entre 2 apéros ! ;-) Avec la plage (selon les données de ton exemple) B2:D2 nommée "gdS" et A3:A5 nommée "pdT" en F2: Données/Validation/Options/Autoriser: Liste Source: =pdT
en G2:G4 (à saisir sans les { } et valider par Ctrl+shift+Entrée) {=TRANSPOSE(INDIRECT("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)))}
en H2:H4 (à saisir sans les { } et valider par Ctrl+shift+Entrée) {=TRANSPOSE(gdS)}
G2:H4 nommée Zn
en I2:I4 (à saisir sans les { } et valider par Ctrl+shift+Entrée) {=SI(ESTERR(INDEX(Zn;PETITE.VALEUR(SI(DECALER(Zn;;;;1)=MIN (INDIRECT("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)));{2;3;4}-1);{1;2;3}) ;2));"";INDEX(Zn;PETITE.VALEUR(SI(DECALER(Zn;;;;1)=MIN(INDIRECT ("B"&2+EQUIV(F2;pdT)&":D"&2+EQUIV(F2;pdT)));{2;3;4}-1);{1;2;3});2))}
masquer ensuite les colonnes G:H
@ bientôt
ChrisV
"Vincent." a écrit dans le message de news: 063101c36003$23803900$ Je ne sais pas quoi répondre... Avec Excel et sans VBA, ça ne m'a pas l'air faisable. S'il n'y avait pas d'égalité sur les lignes, la fonction : =Index(B1:C1;1;equiv(min(Ligne);Ligne))) où Ligne = Bx:Cx pour la ligne x
Tu peux même déterminer le nombre d'égalité avec : =nb.si(Ligne;min(Ligne)
Avec VBA, il faudrait créer une fonction :
Function PrixMini(ByVal PlagePrix As Range, ByVal PlageMarque As Range) Dim Prix As Double Prix = Application.WorksheetFunction.Min(PlagePrix)
Dim NomsMarques As String Dim i As Integer i = 0 Dim Cel As Range For Each Cel In PlagePrix.Cells i = i + 1 If Cel.Value = Prix Then NomsMarques = NomsMarques & " " & _ Application.WorksheetFunction. _ Index(PlageMarque, 1, i).Value End If Next Cel PrixMini = NomsMarques End Function
Et ça marche...
-----Message d'origine-----
Bonsoir à toutes et tous
J'ai une plage A1:E10 et une valeur (par exemple 8.5) dans une cellule de
cette plage. Comment sans vba rechercher cette valeur pour obtenir l'adresse de cette
cellule, la valeur de la colonne A de cette ligne ainsi que la première
valeur de la colonne où cette valeur se situe. La valeur cherchée ne se situe pas dans la colonne A. Exemple : je cherche la valeur minimum pour les bananes
Merci Vincent et Chris V pour vos info. je n'ai pas pu vous répondre rapidement j'avais un pb de serveur
A bientôWilly
Philippe.R
C'est comme dans beaucoup de bistrots Willy, surtout par cette chaleur ! Tu es tout excusé ;o)) -- Amicales Salutations
Retirer A_S_ pour répondre. XL97 / XL2002 "Willy Gruner" a écrit dans le message de news:bhd7qk$c5d$
Merci Vincent et Chris V pour vos info. je n'ai pas pu vous répondre rapidement j'avais un pb de serveur
A bientôWilly
C'est comme dans beaucoup de bistrots Willy, surtout par cette chaleur !
Tu es tout excusé ;o))
--
Amicales Salutations
A_S_rauphil@wanadoo.fr
Retirer A_S_ pour répondre.
XL97 / XL2002
"Willy Gruner" <willy.gruner@wanadoo.fr> a écrit dans le message de
news:bhd7qk$c5d$1@news-reader2.wanadoo.fr...
Merci Vincent et Chris V pour vos info.
je n'ai pas pu vous répondre rapidement j'avais un pb de serveur