Microsoft 365 RechercheV en VBA

nikholas928

XLDnaute Nouveau
Bonjour à la communauté !

Très bonne année à tous.
Je fais appelle à vous dans le but de développer en VBA une rechercheV mais je galère dans les arguments à utiliser dans l'environnement.
Vous trouverez ci-joint un fichier dans lequel je dois intégrer sur l'onglet GL le type de pièces correspondant au code en question (colonne B de mon onglet). L'équivalence se trouve dans l'onglet Codes SAP.
Est-ce quelqu'un aurait la gentillesse de m'indiquer un algorithme qui me permette de déboucler ce point adapté à mon fichier ?

Merci beaucoup pour votre aide :)
 

Pièces jointes

  • EXPORT.XLSX
    66.6 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Nikholas,
Un essai en PJ avec :
VB:
Sub InsèreType()
    Dim DL%, f$
    Application.ScreenUpdating = False              ' Ecran figé
    DL = Range("A65500").End(xlUp).Row              ' Dernière ligne utilisée
    f = "=RECHERCHEV(B2;'Codes SAP'!A:B;2;FAUX)"    ' Formule à appliquer
    Range("C2:C" & DL).FormulaLocal = f             ' Implémentation de la formule
    Range("C2:C" & DL) = Range("C2:C" & DL).Value   ' Remplacement formule par valeurs
    Columns(3).Columns.AutoFit                      ' Largeur colonne automatique
End Sub
 

Pièces jointes

  • EXPORT.xlsm
    87 KB · Affichages: 8

Lolote83

XLDnaute Barbatruc
Bonjour,

Pas sur d'avoir tout compris dans ta demande.
Si c'est la désignation que tu souhaites reporter en fonction du type de pièce alors
C2 = INDEX('Codes SAP'!$B$2:$B$75;EQUIV(B2;'Codes SAP'!$A$2:$A$75;0)) puis tirer vers le bas.

1673618111086.png


et si tu travailles en tableau structuré Onglet CodeSAP = tableau1, Onglet GL=tableau2, la formule devient :
=INDEX(Tableau1[Désignation];EQUIV([@[Type de pièce]];Tableau1[Type];0))

1673618473893.png


@+ Lolote83
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
En VBA, pour les recherches, la voie royale c'est le Dictionary, type d'objet défini en fichier scrrun.dll, bibliothèque Scripting, référence "Microsoft Scripting Runtime". Faies moi plaisir: Utilisez le en liaisons anticipées et non pas tardives, son but étant de chercher non pas dans son code les méthodes qu'on demande à y éxécuter mais des clés de données de l'application !
Il y a aussi la Collection VBA. Elle se limite aux clés String, mais qu'on ne peut y retrouver à moins qu'elles ne soient notées dans chaque élément, mais en revanche y permet aussi un accès positionnel.

Module Feuil1 (GL) :
VB:
Option Explicit
Private Sub Worksheet_Activate()
   Dim Dic As New Dictionary, T(), L&
   T = Feuil5.[A2:B2].Resize(Feuil5.[A1000000].End(xlUp).Row - 1).Value
   For L = 1 To UBound(T, 1)
      Dic(T(L, 1)) = T(L, 2)
      Next L
   T = Me.[B2].Resize(Me.[B1000000].End(xlUp).Row - 1).Value
   For L = 1 To UBound(T, 1)
      If Dic.Exists(T(L, 1)) Then
         T(L, 1) = Dic(T(L, 1))
      Else
         T(L, 1) = "(inexistant)"
         End If
      Next L
   Me.[E2].Resize(UBound(T, 1)).Value = T
   End Sub
N'oubliez pas de cocher la référence Microosoft Scripting Runtime sinon le type défini par l'utilisateur Dictionary ne sera pas défini.
 
Dernière édition:

nikholas928

XLDnaute Nouveau
Bonjour Nikholas,
Un essai en PJ avec :
VB:
Sub InsèreType()
    Dim DL%, f$
    Application.ScreenUpdating = False              ' Ecran figé
    DL = Range("A65500").End(xlUp).Row              ' Dernière ligne utilisée
    f = "=RECHERCHEV(B2;'Codes SAP'!A:B;2;FAUX)"    ' Formule à appliquer
    Range("C2:C" & DL).FormulaLocal = f             ' Implémentation de la formule
    Range("C2:C" & DL) = Range("C2:C" & DL).Value   ' Remplacement formule par valeurs
    Columns(3).Columns.AutoFit                      ' Largeur colonne automatique
End Sub
Ta macro est parfaite !
Merci beaucoup @sylvanu
 

Discussions similaires

Réponses
3
Affichages
473

Statistiques des forums

Discussions
312 196
Messages
2 086 085
Membres
103 116
dernier inscrit
kutobi87