Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Déterminer un plage partielle dans une colonne

6 réponses
Avatar
Apitos
Bonjour =C3=A0 tous,

Comment puis-je d=C3=A9terminer une plage dans une colonne selon un mot don=
n=C3=A9.

Exemple :

Ad
Ad
Kr
Kr
Kr
Ml
Ml

J'ai essay=C3=A9 :

'---------------------
mot=3D"Kr"
LimiteInf =3D Application.Match(mot, columns(4),0)
LimiteSup =3D Application.Match(mot, columns(4))
Set tPlage =3D range("E" & LimiteInf & ":E" & LimiteSup)
'---------------------

R=C3=A9sultat :

LimiteInf =3D 3
LimiteSup =3D 7

Or LimiteSup devra =C3=AAtre =C3=A9gale =C3=A0 5

Merci d'avance.

6 réponses

Avatar
MichD
Bonjour,
En supposant que tes données se situent en colonne A,
'---------------------------------------------------------
Sub test1()
Dim Rg As Range
Dim LeMin As Long, LeMax As Long
With Feuil1
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
With Rg
LeMin = Evaluate("Min(IF(" & .Address & "=""kr"",ROW(" & .Address &
")))")
LeMax = Evaluate("Max(IF(" & .Address & "=""kr"",ROW(" & .Address &
")))")
End With
With Worksheets("Feuil1")
MsgBox .Name & "!" & .Range(.Cells(LeMin, "A"), .Cells(LeMax,
"A")).Address
End With
End Sub
'---------------------------------------------------------
MichD
.
Avatar
MichD
Même procédure, mais une meilleure formulation :
'------------------------------------------------------------
Sub test1()
Dim Rg As Range, Sh As Worksheet
Dim LeMin As Long, LeMax As Long
'Onglet feuille à adapter
Set Sh = Worksheets("Feuil1")
With Sh
'Plage de cellules à définir de tes données
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
With Rg
LeMin = Evaluate("Min(IF(" & .Address & _
"=""kr"",ROW(" & .Address & ")))")
LeMax = Evaluate("Max(IF(" & .Address & _
"=""kr"",ROW(" & .Address & ")))")
End With
With Sh
MsgBox .Name & "!" & .Range(.Cells(LeMin, Rg.Column), _
.Cells(LeMax, Rg.Column)).Address
End With
End Sub
'------------------------------------------------------------
MichD
Avatar
MichD
Et une dernière variante :
'----------------------------------------------------------------
Sub test1()
Dim Rg As Range, Sh As Worksheet
Dim LeMin As Long, LeMax As Long
Dim Mot As String
'Onglet feuille à adapter
Set Sh = Worksheets("Feuil1")
'Expression retenue
Mot = "Kr"
With Sh
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
With Rg
LeMin = Evaluate("Min(IF(" & .Address & _
"=""" & Mot & """,ROW(" & .Address & ")))")
LeMax = Evaluate("Max(IF(" & .Address & _
"=""" & Mot & """,ROW(" & .Address & ")))")
End With
With Sh
MsgBox .Name & "!" & .Range(.Cells(LeMin, Rg.Column), _
.Cells(LeMax, Rg.Column)).Address
End With
End Sub
'----------------------------------------------------------------
MichD
"MichD" a écrit dans le message de groupe de discussion :
osbboi$gv7$
Même procédure, mais une meilleure formulation :
'------------------------------------------------------------
Sub test1()
Dim Rg As Range, Sh As Worksheet
Dim LeMin As Long, LeMax As Long
'Onglet feuille à adapter
Set Sh = Worksheets("Feuil1")
With Sh
'Plage de cellules à définir de tes données
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
With Rg
LeMin = Evaluate("Min(IF(" & .Address & _
"=""kr"",ROW(" & .Address & ")))")
LeMax = Evaluate("Max(IF(" & .Address & _
"=""kr"",ROW(" & .Address & ")))")
End With
With Sh
MsgBox .Name & "!" & .Range(.Cells(LeMin, Rg.Column), _
.Cells(LeMax, Rg.Column)).Address
End With
End Sub
'------------------------------------------------------------
MichD
Avatar
Apitos
Bonjour MichD,
Merci pour tes précieuses réponses.
Pour gérer les erreurs, en cas ou Mot n'est pas trouvé.
Que fait-on ?
Merci.
Avatar
MichD
Une manière de procéder :
'------------------------------------------------------------
Sub test1()
Dim Rg As Range, Sh As Worksheet
Dim LeMin As Long, LeMax As Long
Dim Mot As String, R As Variant
On Error Resume Next
'Onglet feuille à adapter
Set Sh = Worksheets("Feuil1")
'Expression retenue
Mot = "Kr"
With Sh
Set Rg = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
With Rg
LeMin = Evaluate("Min(IF(" & .Address & _
"=""" & Mot & """,ROW(" & .Address & ")))")
LeMax = Evaluate("Max(IF(" & .Address & _
"=""" & Mot & """,ROW(" & .Address & ")))")
End With
With Sh
R = .Name & "!" & .Range(.Cells(LeMin, Rg.Column), _
.Cells(LeMax, Rg.Column)).Address
If Err.Number <> 0 Then
Err = 0
MsgBox "Le """ & Mot & """ & n'a pas été trouvé."
Else
MsgBox R
End If
End With
End Sub
'------------------------------------------------------------
MichD
Avatar
Apitos
Merci infiniment MichD.
J'ai constaté que je peux tester avec la valeur de LeMax.
'--------------------
If LeMax = 0 Then
MsgBox "Le """ & Mot & """ n'a pas été trouvé"
End If
'--------------------