Bonjour
Encore un petit problème, en faisant des recherche j'ai trouve un bout de code qui répondrais à mes besoins (merci Theze pour la solution dans le forum)
Je dois faire la correspondance entre des catégories . Pour cela j'ai créer une table de correspondance qui entre autre sert à d'autres petites chose +- 600 ligne 11 colonnes.
en première colonne la catégorie origine trié en ordre croissant, en colonne 8 la valeur de correspondance que je recherche.
J'appel donc la procédure Theze que j'ai un peu simplifier (pas de recherche de fichier par méthode .show le nom du fichier est fixe et invariable)
L'APPEL à la procedure dans le même module
procédure et fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Public sRacine As String ' est défini beaucoup plus haut dans le code et dans un autre module, il est transmis aux différents modules Dim Valeur_Cherchee_Tab As Long ' a ce niveau j'ai fait plusieurs essais avec long string variant ets aucun n'a donné de résultats Valeur_Cherchee_Tab = Mid(Prod_import.Range("D" & Ind_lig).Value, 1, 4) ' valeur recherchée Call Cher_Cat(sRacine, Valeur_Cherchee_Tab) ' appel de la procédure avec sRacine (le programme peut être installé sur différent disque mais à la racine
Le résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 Sub Cher_Cat(sRacine, Valeur_Cherchee_Tab) Dim Plage As Range Dim MonDossier As String Dim Classeur As String Dim Feuille As String Dim ValCherchee As Variant ' cette variable a été teste avec les mêmes caractéristiques variant long string Dim Valeur Dim IndexColonne As Integer Dim Exact As Boolean MonDossier = sRacine & "\" & "MG_TAB_Conv_Cat.xlsx" 'Dossier() ' If MonDossier = "FAUX" Then Exit Sub 'sépare le chemin et le nom du classeur Classeur = Right(MonDossier, Len(MonDossier) - (InStrRev(MonDossier, "\"))) MonDossier = Left(MonDossier, (InStrRev(MonDossier, "\"))) Feuille = "csv-catgories-2202-fr" Set Plage = Range("A1:K663") ValCherchee = Valeur_Cherchee_Tab IndexColonne = 8 Exact = False 'false pour correspondance exacte Valeur = RECHERCHE_VERT(MonDossier, _ Classeur, _ Feuille, _ ValCherchee, _ Plage, _ IndexColonne, _ Exact) MsgBox Valeur End Sub Public Function RECHERCHE_VERT(Chemin As String, _ Classeur As String, _ Feuille As String, _ ValRecherchee As Variant, _ TabMatrice As Range, _ ColonneIndex As Integer, _ ValExacte As Boolean) Dim Valeur Dim Exact As String Select Case ValExacte: Case False: Exact = "FALSE": Case Else: Exact = "TRUE": End Select Valeur = ExecuteExcel4Macro("VLOOKUP(""" & ValRecherchee & _ """,'" & Chemin & _ "[" & Classeur & _ "]" & Feuille & _ "'!" & TabMatrice.Address(1, 1, xlR1C1) & _ "," & ColonneIndex & _ "," & Exact & ")") If IsError(Valeur) Then RECHERCHE_VERT = "Aucune valeur correspondante à '" & ValRecherchee & "' !" Else RECHERCHE_VERT = Valeur End If End Function
les appels, le traitement se font sans problèmes. j'ai verifier avec l'espion ValRecherchee, Chemin, Classeur, Feuille,.... TOUTES LES VARIABLES SON CORRECTEMENT INITIALISEES !!!!!!!!!!!
et j'ai un retour 2042 valeur non trouvée alors que j'ai bien en 2eme ligne de ma table la valeur cherchée
Merci à ceux qui peuvent m'aider
Partager