Bonjour SkillzZ, le forum,
tu a écrit :
En ce qui concerne ta solution dhany, elle marche très bien aussi. Elle est optimale, mais plus complexe.
meuh non, c'est tout simple ! la preuve, voici mon code VBA commenté :
Dim Account_Code$, AC_Parent$, CC_Code$, cc$
: déclaration de variables ; Dim cc$ : idem que Dim cc As String
Dim plg As Range, cel As Range, msg$, n%, i&
: Dim n% : idem que Dim n As Integer ; Dim i& : idem que Dim i As Long
CC_Code = "CC_1450"
: le code qui sera cherché en ligne n° 1 : CC_1450
With Worksheets("Sheet1")
.. End With
: avec la feuille "Sheet1"
n = .Cells(1, Columns.Count).End(1).Column
: End(1) : idem que End(xlToLeft) ➯ n = n° dernière colonne, sur la ligne 1
Set plg = .[A1].Resize(, n)
: plg = plage des cellules utilisées en ligne 1, ici A1:AF1
Set cel = plg.Find(CC_Code, , -4163, 1, 1)
: idem que Set cel = plg.Find(CC_Code, , xlValues, xlWhole, xlByRows)
ainsi, ça cherche CC_1450 en A1:AF1 ; si ça ne le trouve pas, ça affiche le message ci-dessous, puis ça quitte la sub.
If cel Is Nothing Then
msg = CC_Code & " n'est pas présent dans " & plg.Address(0, 0)
MsgBox msg, 48: Exit Sub
End If
Address(0,0) fait que ça retourne l'adresse sans les signes « $ » ; 48 est pour afficher l'icône « ! » (dans un triangle jaune)
c'est seulement si CC_1450 a été trouvé en A1:AF1 qu'on fait la suite.
n = cel.Column
: n = n° colonne de la cellule où a été trouvé CC_1450 ; ici, c'est donc 10 : en colonne J
i = .Cells(Rows.Count, n).End(3).Row
: End(3) : idem que End(xlUp) ➯ i = n° dernière ligne, en colonne n
ici, en colonne 10, dernière cellule utilisée = J3 ➯ dernière ligne = 3
cc = .Cells(i, n)
: cc = code de la cellule J3 : CC1452 ; y'a plus qu'à l'afficher :
msg = CC_Code & " a été trouvé en colonne " & n & vbLf & vbLf _
& "dernière valeur de la colonne " & n & " :" & vbLf & cc
MsgBox msg, 64
64 est pour afficher l'icône « i » (information)
dhany