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

VBA : Recherche et selection d'une cellule selon 2 critères variables

3 réponses
Avatar
Domi
Bonsoir,

J'ai une colonne qui contient des valeurs au format texte sous la forme
yyyy/s où yyyy représente un n° d'année et s un n° de semaine : exemple :
2006/45, 2007/2, 2007/49...
Je voudrais rechercher et selectionner la cellule qui contient le n° de
l'année en cours et le n° de semaine en cours.
J'ai touvé comment le faire en mettant dans le code la valeur en dur (ex ci
dessous 2007/49) mais je ne sais pas comment le faire en utilisant des
variables qui calculent l'année et le n° de semaine.
Mon codes qui marche
Cells.Find(What:=("2007 / 49"), After:=ActiveCell, LookIn:=xlFormulas,
LookAt:=xlWhole, SearchOrder _
:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
ActiveCell.Offset(0, 1).Select

Les variables que je voudrais utiliser
Variables
an = Year(Date)

NSem = ISOWeekNum(Date)

avec la fonction :
Function ISOWeekNum(d1 As Date) As Integer
Dim d2 As Long
d2 = DateSerial(Year(d1 - Weekday(d1 - 1) + 4), 1, 3)
ISOWeekNum = Int((d1 - d2 + Weekday(d2) + 5) / 7)
End Function

Merci pour votre aide
Domi

3 réponses

Avatar
perso
Bsr Domi,

Et voilà,

Chez moi c'est Ok

Sub PourDomi()
Dim An As String, NSem As String

An = Format(Now, "YYYY")
NSem = ISOWeekNum(Date)


Cells.Find(What:=(An & "/" & NSem), After:tiveCell, _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder _
:=xlByRows, SearchDirection:=xlNext, MatchCase:lse).Activate
ActiveCell.Offset(0, 1).Select


End Sub

Bonne soirée

Pat REDNEF
Avatar
perso
Oups !

une question:
dans ton post tu parles de 2007/48 et dans ton code il y a un espace
entre l'année (2007) et le numéro de semaine (49)

mon code suppose qu'il n'y a PAS d'espaces...
Sinon remplacer la ligne An & "/" & NSem
par An & " / " & NSem


Sub PourDomi()
Dim An As String, NSem As String

An = Format(Now, "YYYY")
NSem = ISOWeekNum(Date)


Cells.Find(What:=(An & "/" & NSem), After:tiveCell, _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder _
:=xlByRows, SearchDirection:=xlNext, MatchCase:lse).Activate
ActiveCell.Offset(0, 1).Select


End Sub

Function ISOWeekNum(d1 As Date) As Integer
Dim d2 As Long
d2 = DateSerial(Year(d1 - Weekday(d1 - 1) + 4), 1, 3)
ISOWeekNum = Int((d1 - d2 + Weekday(d2) + 5) / 7)
End Function

Attention si la valeur cherchée n'existe pas = erreur !
Au fait les valeur au format text (2007 / 49) sont des formules ou des
valeurs en dur ?

Bonne soirée

Pat REDNEF
Cousin de Guy .....
Avatar
Domi
Testé et approuvé, merci ;o)
Domi

a écrit dans le message de news:

Oups !

une question:
dans ton post tu parles de 2007/48 et dans ton code il y a un espace
entre l'année (2007) et le numéro de semaine (49)

mon code suppose qu'il n'y a PAS d'espaces...
Sinon remplacer la ligne An & "/" & NSem
par An & " / " & NSem


Sub PourDomi()
Dim An As String, NSem As String

An = Format(Now, "YYYY")
NSem = ISOWeekNum(Date)


Cells.Find(What:=(An & "/" & NSem), After:¬tiveCell, _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder _
:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse).Activate
ActiveCell.Offset(0, 1).Select


End Sub

Function ISOWeekNum(d1 As Date) As Integer
Dim d2 As Long
d2 = DateSerial(Year(d1 - Weekday(d1 - 1) + 4), 1, 3)
ISOWeekNum = Int((d1 - d2 + Weekday(d2) + 5) / 7)
End Function

Attention si la valeur cherchée n'existe pas = erreur !
Au fait les valeur au format text (2007 / 49) sont des formules ou des
valeurs en dur ?

Bonne soirée

Pat REDNEF
Cousin de Guy .....