Automatisation d'une Recherchev

Résolu
iliassTr Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
iliassTr Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis un debutant en VBA j'aimerai creer un bouton qui prend le nom d'une article de la colonne A de la feuille 1("Carnet") et récupére le prix de cette article depuis la feuille 2 ("gamme") colonne D.
je peux faire ça avec une recherchev la formule est :
=RECHERCHEV(A2;Gamme!A2:G712;4)

mon problème c'est que j'ai plus que 100000 articles et je veux automatiser ce travail par une bouton ?
Merci de m'aider SVP,


5 réponses

Hutg Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Peux-tu me transmettre ton fichier afin que je réalise une macro sur celui-ci.
0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour le fil, bonjour le forum,

Peut-être comme ça :
Sub Macro1()
Dim OC As Worksheet 'déclare la variable OC (Onglet Carnet)
Dim OG As Worksheet 'déclare la variable OG (Onglet Gamme)
Dim DLC As Long 'déclare la variable DLC (Dernière Ligne Carnet)
Dim DLG As Long 'déclare la variable DLG (Dernière Ligne Gamme)
Dim TVC As Variant 'déclare la variable TVC (Tableau des Valeurs Carnet)
Dim TVG As Variant 'déclare la variable TVG (Tableau des Valeurs Gamme)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Long 'déclare la variable J (incrément)
Dim TP() As Variant 'déclare la variable TP (Tableau des Prix)

Set OC = Worksheets("Carnet") 'définit l'onglet OC
DLC = OC.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLC de la colonne A de l'onglet OC
TVC = OC.Range("A1:A" & DLC) 'définit le tableau des valeurs TVC de l'onglet OC
Set OG = Worksheets("gamme") 'définit l'onglet OC
DLG = OG.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLG de la colonne A de l'onglet OG
TVG = OG.Range("A1:OG" & DLG) 'définit le tableau des valeurs TVG de l'onglet OG
ReDim TP(1 To DLC) 'redimensionne le tableau des prix TP
For I = 2 To DLC 'boucle 1 : sur toutes les ligne I du tableau des valeurs TVC (en partant de la seconde)
    For J = 2 To DLG 'boucle 2 : sur toutes les ligne J du tableau des valeurs TVG (en partant de la seconde)
        'si les données des deux boucles sont identique, alimente le tableau TP avec la donnée en ligne j colonne 4 du tableau TVG, va l'étiquette "suite"
        If TVC(I, 1) = TVG(J, 1) Then TP(I - 1) = TVG(J, 4): GoTo suite
    Next J 'prochaine ligne de la boucle 2
    TP(I - 1) = "" 'ici l'occurrence n'est pas trouvée, alimente le tableau TP avec du vide
suite: 'étiquette
Next I 'prochaine ligne de la boucle 1
OC.Range("B2").Resize(DLC, 1).Value = Application.Transpose(TP) 'renvoie dans B2 redimensionnée le tableau TP transposé
End Sub

0
rafaledu43 Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   5
 
Tu peux aussi étendre la formule avec vba:

DerLigne = Range("A1048576").End(xlUp).Row

For i = 2 to DerLigne
Cells(i,2) ..FormulaLocal = "=RECHERCHEV(A" & i & ";Gamme!A2:G712;4)" ' Pour mettre la formule dans la colonne B
Next i


Mais tu as aussi vite fait d'étendre ta formule, c'est juste à faire une fois ;)

0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Re,

En fait j'ai testé les deux options VBA sur une 100 lignes. Injecter la formule ou passer par des tableaux. La seconde option était un tout petit peu plus rapide... C'est pourquoi je l'ai retenue même si le code était plus long...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
iliassTr Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci infiniment
j'ai résolu le problème
Cordialement
0