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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| Sub GetV(Table_Array As Range, Etiquette_ColA As String, ValeurA As Variant, Etiquette_ColB As String, CelluleInfo As Variant, Optional CodeRetour As Boolean)
' inspiré de WorksheetFunction.VLookup
' Recherche une valeur (ValeurA) dans la première colonne (A) d'un tableau et
' renvoie une valeur (CelluleInfo) dans la même ligne dans une autre colonne (B) du tableau.
' ValeurA - valeur à rechercher dans la première colonne du tableau. ValeurA peut être une valeur ou une référence.
' Table_array - deux ou plusieurs colonnes de données. Utilisez une référence à une plage
Dim Montab As Variant
Dim Lig As Long, Col As Long
Dim ColA As Long, ColB As Long
CodeRetour = False
Montab = Table_Array.value
If TypeOf ValeurA Is Range Then
Lig = ValeurA.Row - Table_Array.Cells(1, 1).Row + 1
CodeRetour = True
Else
' Recherche de la première valeur dans la Colonne A -> on récupère la ligne
For Col = LBound(Montab, 2) To UBound(Montab, 2)
If Montab(LBound(Montab, 1), Col) = Etiquette_ColA Then
'parcourir les cellules de la colonne A
For Lig = LBound(Montab, 1) To UBound(Montab, 1)
' MsgBox Montab(Lig, Col)
If Montab(Lig, Col) = ValeurA Then
'MsgBox Montab(Lig, Col)
CodeRetour = True
Exit For
End If
Next Lig
End If
If CodeRetour = True Then Exit For
Next Col
End If
If CodeRetour = False Then Exit Sub
CodeRetour = False
' Recherche de la seconde colonne -> on récupère la colonne et on renvoie la valeur
For Col = LBound(Montab, 2) To UBound(Montab, 2)
If Montab(LBound(Montab, 1), Col) = Etiquette_ColB Then
If IsObject(CelluleInfo) Then 'test par isobject car l'objet passé en arg n'est pas encore initialisé
Set CelluleInfo = Table_Array.Cells(Lig, Col)
Else
CelluleInfo = Table_Array.Cells(Lig, Col).value
End If
CodeRetour = True
Exit For
End If
Next Col
End Sub
Sub PutV(Table_Array As Range, Etiquette_ColA As String, ValeurA As Variant, Etiquette_ColB As String, ValeurB As Variant, Optional CodeRetour As Boolean)
' inspiré de WorksheetFunction.VLookup
' Recherche une valeur (ValeurA) dans la première colonne (A) d'un tableau et
' Modifie la valeur (CelluleInfo) dans la même ligne dans une autre colonne (B) du tableau.
' ValeurA - valeur à rechercher dans la première colonne du tableau. ValeurA peut être une valeur ou une référence.
' Table_array - deux ou plusieurs colonnes de données. Utilisez une référence à une plage
' PutV LABASE, "COLONNE SOURCE", ValeurA ,"COLONNE_CIBLE", VALEUR_CIBLE, CodeRetour
' GetV LABASE, "COLONNE SOURCE", ValeurA, "COLONNE_CIBLE", CELLULE_CIBLE, CodeRetour
Dim Montab As Variant
Dim Lig As Long, Col As Long
Dim ColA As Long, ColB As Long
CodeRetour = False
Montab = Table_Array.value
If TypeOf ValeurA Is Range Then
Lig = ValeurA.Row - Table_Array.Cells(1, 1).Row + 1
CodeRetour = True
Else
' Recherche de la valeur dans la Colonne A -> on récupère la ligne
For Col = LBound(Montab, 2) To UBound(Montab, 2)
If Montab(LBound(Montab, 1), Col) = Etiquette_ColA Then
'parcourir les cellules de la colonne A
For Lig = LBound(Montab, 1) To UBound(Montab, 1)
' MsgBox Montab(Lig, Col)
If Montab(Lig, Col) = ValeurA Then
'MsgBox Montab(Lig, Col)
CodeRetour = True
Exit For
End If
Next Lig
End If
If CodeRetour = True Then Exit For
Next Col
End If
If CodeRetour = False Then Exit Sub
CodeRetour = False
' Recherche de la colonneB -> on récupère la colonne et on attribue la valeur à la cellule trouvée colonne B
For Col = LBound(Montab, 2) To UBound(Montab, 2)
If Montab(LBound(Montab, 1), Col) = Etiquette_ColB Then
If IsObject(ValeurB) Then 'test par isobject car l'objet passé en arg n'est pas encore initialisé
Table_Array.Cells(Lig, Col).value = ValeurB.Valeur
Else
Table_Array.Cells(Lig, Col).value = ValeurB
End If
CodeRetour = True
Exit For
End If
Next Col
End Sub |
Partager