Extraire une valeur d'un tableau
Walles
-
Mike-31 Messages postés 19571 Statut Contributeur -
Mike-31 Messages postés 19571 Statut Contributeur -
Bonjour a tous,
Je possède un tableau sur la feuille 1 avec plusieurs lignes et plusieurs colones, en abscisses j'ai le nom des articles et en ordonnées le diametre pour avoir le prix a l'intersection des deux.
Je souhaiterai, sur la feuille 2, avoir en A1 le nom, en A2 le diametre et en A3 une formule qui me sortirai le prix. J'ai essaye avec recherchev et rechercheh mais cela ne fonctionne pas.
J'ai écris:
=recherchv(A2, Feuille1!A1:F50,rechercheh(A1,Feuille1!A1:F50,1,2)2)
Mais j'ai comme resultat "VALEUR"...
J'ai aussi essaye avec index et equiv mais rien non plus.
Merci d'avance pour vos réponses.
Je possède un tableau sur la feuille 1 avec plusieurs lignes et plusieurs colones, en abscisses j'ai le nom des articles et en ordonnées le diametre pour avoir le prix a l'intersection des deux.
Je souhaiterai, sur la feuille 2, avoir en A1 le nom, en A2 le diametre et en A3 une formule qui me sortirai le prix. J'ai essaye avec recherchev et rechercheh mais cela ne fonctionne pas.
J'ai écris:
=recherchv(A2, Feuille1!A1:F50,rechercheh(A1,Feuille1!A1:F50,1,2)2)
Mais j'ai comme resultat "VALEUR"...
J'ai aussi essaye avec index et equiv mais rien non plus.
Merci d'avance pour vos réponses.
A voir également:
- Extraire une valeur d'un tableau
- Tableau word - Guide
- Extraire une video youtube - Guide
- Trier un tableau excel - Guide
- Extraire le son d'une vidéo - Guide
- Tableau ascii - Guide
11 réponses
Re,
regarde simplement comme cela, boucle sur 100 lignes à partir de la première, à adapter
On Error Resume Next
For i = 1 To 100
Cells(i, 5) = Application.WorksheetFunction.Index(Range("List"), Application.Match(Cells(i, 2), Range("Num"), 0), Application.Match(Cells(i, 1), Range("Art"), 0))
Next
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
regarde simplement comme cela, boucle sur 100 lignes à partir de la première, à adapter
On Error Resume Next
For i = 1 To 100
Cells(i, 5) = Application.WorksheetFunction.Index(Range("List"), Application.Match(Cells(i, 2), Range("Num"), 0), Application.Match(Cells(i, 1), Range("Art"), 0))
Next
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Bonjour,
peut être comme cela, Feuil1 entre A2 et A20 les noms et entreb B1 et L1 les diamètres
Feuil2 en A1le nom recherché et en A2 le diamètre
=RECHERCHEV(A1;Feuil1!A1:L20;EQUIV(A2;Feuil1!A1:L1))
et complétée avec une gestion d'erreur
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
peut être comme cela, Feuil1 entre A2 et A20 les noms et entreb B1 et L1 les diamètres
Feuil2 en A1le nom recherché et en A2 le diamètre
=RECHERCHEV(A1;Feuil1!A1:L20;EQUIV(A2;Feuil1!A1:L1))
et complétée avec une gestion d'erreur
=SIERREUR(RECHERCHEV(A1;Feuil1!A1:L20;EQUIV(A2;Feuil1!A1:L1));"")
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Re,
il suffisait d'adapter tes plages
=RECHERCHEV(B1;Sheet1!A1:F20;EQUIV(Sheet2!A1;Sheet1!A1:F1))
ou
=INDEX(Sheet1!A1:F20;EQUIV(B1;Sheet1!A1:A20;0);EQUIV(A1;Sheet1!A1:F1;0))
je te conseille d'ajouter une gestion d'erreur
=SIERREUR(RECHERCHEV(B1;Sheet1!A1:F20;EQUIV(Sheet2!A1;Sheet1!A1:F1));"")
ou avec cette formule
=SIERREUR(INDEX(Sheet1!A1:F20;EQUIV(B1;Sheet1!A1:A20;0);EQUIV(A1;Sheet1!A1:F1;0));"")
il suffisait d'adapter tes plages
=RECHERCHEV(B1;Sheet1!A1:F20;EQUIV(Sheet2!A1;Sheet1!A1:F1))
ou
=INDEX(Sheet1!A1:F20;EQUIV(B1;Sheet1!A1:A20;0);EQUIV(A1;Sheet1!A1:F1;0))
je te conseille d'ajouter une gestion d'erreur
=SIERREUR(RECHERCHEV(B1;Sheet1!A1:F20;EQUIV(Sheet2!A1;Sheet1!A1:F1));"")
ou avec cette formule
=SIERREUR(INDEX(Sheet1!A1:F20;EQUIV(B1;Sheet1!A1:A20;0);EQUIV(A1;Sheet1!A1:F1;0));"")
Re,
oui bien sur, voila un code à placer dans un module et à associer à un bouton ou incorporer dans un code
ou pour automatiser l'action e fonction des deux saisies Sheets(2)
clic droit sur l'onglet de ta feuille 2 et coller ce code résultat en B5 à adapter
oui bien sur, voila un code à placer dans un module et à associer à un bouton ou incorporer dans un code
Sub test()
On Error Resume Next
[B5] = WorksheetFunction.VLookup(Sheets("Sheet2").Range("B1"), Sheets("Sheet1").Range("A1:F20"), Application.Match(Sheets("Sheet2").Range("A1"), Sheets("Sheet1").Range("A1:F1")))
End Sub
ou pour automatiser l'action e fonction des deux saisies Sheets(2)
clic droit sur l'onglet de ta feuille 2 et coller ce code résultat en B5 à adapter
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range([B1], [B5]) = ""
End If
If Target.Address = "$B$1" Then
[B5] = WorksheetFunction.VLookup(Sheets("Sheet2").[B1], Sheets("Sheet1").[A1:F20], Application.Match(Sheets("Sheet2").[A1], Sheets("Sheet1").[A1:F1]))
End If
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour ,
As tu essayé :
=INDEX(A1:F6;EQUIV(A1;feuille1!A1:F1);EQUIV(A2;feuille1!A1;A6))
a adapter,
Cordialement,
As tu essayé :
=INDEX(A1:F6;EQUIV(A1;feuille1!A1:F1);EQUIV(A2;feuille1!A1;A6))
a adapter,
Cordialement,
Mike-31, cela me renvoi aussi "REF", ou une case blanche avec la gestion de l'erreur...
Voici le lien de mon fichier simplifie
http://www.cjoint.com/c/FGsmceFWs5B
Merci de votre aide
Voici le lien de mon fichier simplifie
http://www.cjoint.com/c/FGsmceFWs5B
Merci de votre aide
Re,
contrôle bien tes bornes et nom de feuille Sheets("Sheet2") ou Sheets("Sheet1") et pour tes bornes Range("A1:F20") ou [A1:F20]
si tu n'y arrives pas donne moi le nom de l'onglet ou se trouve ta base de données ainsi que les bornes du tableau
ainsi que le nom de l'onglet ou se trouve les deux critères avec l'adresse des deux cellules et l'adresse de la cellule ou tu souhaite le résultat
et quel code tu as retenu
tu peux également utiliser ce code
Sub Macro3()
[B10] = Application.WorksheetFunction.Index(Sheets("Sheet1").Range("A1:F20"), Application.Match([B1], Sheets("Sheet1").Range("A1:A20"), 0), Application.Match([A1], Sheets("Sheet1").Range("A1:F1"), 0))
End Sub
contrôle bien tes bornes et nom de feuille Sheets("Sheet2") ou Sheets("Sheet1") et pour tes bornes Range("A1:F20") ou [A1:F20]
si tu n'y arrives pas donne moi le nom de l'onglet ou se trouve ta base de données ainsi que les bornes du tableau
ainsi que le nom de l'onglet ou se trouve les deux critères avec l'adresse des deux cellules et l'adresse de la cellule ou tu souhaite le résultat
et quel code tu as retenu
tu peux également utiliser ce code
Sub Macro3()
[B10] = Application.WorksheetFunction.Index(Sheets("Sheet1").Range("A1:F20"), Application.Match([B1], Sheets("Sheet1").Range("A1:A20"), 0), Application.Match([A1], Sheets("Sheet1").Range("A1:F1"), 0))
End Sub
Ca fonctionne avec le code Macro ! Merci.
Mais je suis de nouveau bloque... J'aimerai creer une boucle pour faire cela sur plusieurs lignes, et ceux jusqu'a ce qu'il y ait une cellule vide.
J'ai fait un "Do While Not (IsEmpty(ActiveCell)" mais en vain.
Mais je suis de nouveau bloque... J'aimerai creer une boucle pour faire cela sur plusieurs lignes, et ceux jusqu'a ce qu'il y ait une cellule vide.
J'ai fait un "Do While Not (IsEmpty(ActiveCell)" mais en vain.
J'ai retenu le dernier, avec la macro. J'ai rajouter un variable sur les onglet pour pouvoir choisir le prix en fonction du fournisseur (avec un onglet par fournisseur). Ca fait :
Dim Ws1 as Worksheet
For Each Ws1 In Worksheets
If Ws1.Name=Range("A1").Value Then
[E6]=Application.WorksheetFunction.Index(Sheets(Range("A1").Value.Range("A8:F51"),Application.Match([C6],Sheets(Range("A1").Value).Range("A8:A51"),0)Application.Match([B6],Sheets(Range("A1").Value).Range("A8:F8"),0)
Exit For
End If
Next Ws1
Sur le fichier final je note le nom du fournisseur en A1, le nom de l'article en B6, le diametre en C6. et j'obtient le resultat en E6.
Dim Ws1 as Worksheet
For Each Ws1 In Worksheets
If Ws1.Name=Range("A1").Value Then
[E6]=Application.WorksheetFunction.Index(Sheets(Range("A1").Value.Range("A8:F51"),Application.Match([C6],Sheets(Range("A1").Value).Range("A8:A51"),0)Application.Match([B6],Sheets(Range("A1").Value).Range("A8:F8"),0)
Exit For
End If
Next Ws1
Sur le fichier final je note le nom du fournisseur en A1, le nom de l'article en B6, le diametre en C6. et j'obtient le resultat en E6.
Merci beaucoup Mike