Extraire une donnée dans une autre feuille Excel

MlleDaria

XLDnaute Nouveau
Bonjour,

Débutante en Excel, je souhaite créer une macro répondant aux cahier de charges suivants :

Dans l'onglet "HISTORIQUE" je dispose d'une liste d'article. A chaque article, je souhaite associer une catégorie/famille d'article.

Cette classification des articles se trouve dans l'onglet "DATA" (correspond une espèce de base de données).
L'algorithme est le suivant :

Dans "HIstorique"
Pour la première ligne où la colonne catégorie est vide
Je copie la valeur NomArticle

Dans "DATA"
Je recherche dans la colonne A la valeur "NomArticle"
Quand trouvée, j'extrais le numéro de la ligne Lig
Ensuite, je regarde dans la colonne B (Catégorie) la valeur à la ligne Lig.
J'enregistre cette valeur

Dans l'onglet "Historique"
Je copie la valeur Categorie article à la ligne NomArticle correspondant.


J'avais écrit ce code là : mais ça ne fonctionne pas. Mon gros problème est le switch entre les onglets

Sub Categorie()

Sheets("HISTORIQUE").Select
k = 4 'correspond à la première ligne de mon tableau dans l'onglet Historique
Do While Range("b" & k).Value <> ""
k = k + 1
Exit Do

Worksheets("DATA").Activate
f = 1
Do While Range("a" & f).Value <> Worksheets("HISTORIQUE").Range("a" & k)
f = f + 1
Exit Do

Worksheets("HISTORIQUE").Activate
Worksheets("HISTORIQUE").Range("b" & k).Value = Worksheets("DATA").Range("d" & f).Value

Loop

Loop

End Sub

Mais je ne comprends pas. rien ne se passe.

Pouvez-vous m'aider s'il vous plait?

En vous remerciant,

Cordialement.

Mlle Daria
 

pierrejean

XLDnaute Barbatruc
Re : Extraire une donnée dans une autre feuille Excel

bonjour MleDaria

A tester:

Code:
Sub Categorie()

Sheets("HISTORIQUE").Select
k = 4 'correspond à la première ligne de mon tableau dans l'onglet Historique
Do While Range("b" & k).Value <> ""
k = k + 1
Exit Do

Worksheets("DATA").Activate
f = 1
Do While Range("a" & f).Value <> Worksheets("HISTORIQUE").Range("a" & k)
f = f + 1
Exit Do
Loop

Worksheets("HISTORIQUE").Activate
Worksheets("HISTORIQUE").Range("b" & k).Value = Worksheets("DATA").Range("d" & f).Value


Loop

End Sub
 

liloucmoi

XLDnaute Occasionnel
Re : Extraire une donnée dans une autre feuille Excel

Bonjour Mlle Daria,

Je pense que la chose peut se faire très bien sans macro à l'aide des fonction INDEX et EQUIV.

Après si tu veux utiliser la macro : vérifie bien tes indices et boucles à l'aide du mode "pas à pas" du débugger VBA.

Cordialement.
 

pierrejean

XLDnaute Barbatruc
Re : Extraire une donnée dans une autre feuille Excel

Re

Voici la macro corrigée
Par contre je ne sais pas ce que tu en attends

Code:
Sub Categorie()
Sheets("HISTORIQUE").Select
k = 4 'correspond à la première ligne de mon tableau dans l'onglet Historique
Do While Range("b" & k).Value <> ""
k = k + 1
Exit Do
Loop
Worksheets("DATA").Activate
f = 1
Do While Range("a" & f).Value <> Worksheets("HISTORIQUE ").Range("a" & k)
f = f + 1
Exit Do
Loop
Worksheets("HISTORIQUE").Activate
Worksheets("HISTORIQUE").Range("b" & k).Value = Worksheets("DATA").Range("d" & f).Value
End Sub

Ps: Avec un fichier exemple et une petite explication de ce que tu souhaites il serait possible de t'orienter vers une meilleure solution soit par formule soit en vba
 
Dernière édition:

liloucmoi

XLDnaute Occasionnel
Re : Extraire une donnée dans une autre feuille Excel

La fonction INDEX sert à retourner une valeur depuis une colonne (ou ligne) à partir d'un numéro.

Schématiquement :
colonne A: (Cellules A1 à A3)
Pomme
Poire
Peche

INDEX(A1:A3;1) retourne Pomme, INDEX(A1:A3;2) retourne Poire et INDEX(A1:A3;3) Peche.

EQUIV sert à retourner la place d'une valeur cherchée au sein d'un tableau.
EQUIV("Pomme";A1:A3) = 1 , EQUIV("Poire";A1:A3) = 2 et EQUIV("Peche";A1:A3) = 3 \o/

Dans ta feuille historique, toute ta colonne CATEGORIE sera remplie de la formule : INDEX(DATA!B1:B10;EQUIV(A1;DATA!A1;A10;0))
Avec B1:B10 le champ contenant tes catégories dans la feuille DATA, A1:A10 celui contenant les noms. et A1 cellule de l'onglet HISTORIQUE contenant le nom dont tu recherches la catégorie.

Cette formule cherchera le nom de la feuille Historique dans la feuille data pour renvoyer la catégorie associée (toujours dans la feuille data). C'est ce que tu cherches à faire je pense.

N'hésites pas à regarder l'aide d'excel sur ces formules, elle est bien faite. :)
 

Discussions similaires

Réponses
6
Affichages
248

Membres actuellement en ligne

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal