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

VBA, macro encadrements comparaison de dates

3 réponses
Avatar
Domi
Bonjour à tous,

J'ai sur une feuille une liste de 10 dates. 1 date par cellule, chaque
cellule est nommée "date01", "date02","date03",..."date10". (format date :
jj/mm/aaaa)

J'ai dans la colonne G une plage nommée "ImpEch" qui contient des dates
(format date jj/mm/aaaa)
Je voudrais inscire dans la colonne N (soit 7 colonnes plus à droite) une
valeur texte ("plage01" à "palge10") en fonction de la date qui se trouve
dans "ImpEch" et selon la règle suivante :

Si G < date01 alors N="plage01"
Si G >= date01 ET G < date02 alors N="plage02"
Si G >= date02 ET G < date03 alors N="plage03"
Si G >= date03 ET G < date04 alors N="plage04"
Si G >= date04 ET G < date05 alors N="plage05"
Si G >= date05 ET G < date06 alors N="plage06"
Si G >= date06 ET G < date07 alors N="plage07"
Si G >= date07 ET G < date08 alors N="plage08"
Si G >= date08 ET G < date09 alors N="plage09"
Si G >= date09 ET G < date10 alors N="plage10"
Si G >= date10 alors N="plage11"

Cela me semblait au départ relativement simple mais je me n'y parviens pas.
J'ai bien essayé une macro de ce genre mais sans succès...
Merci pour votre aide
Domi

J'ai mis sur "ci-joint" un fichier exemple avec des valeurs qui pourra
aider les généreux contributeurs pour faire des tests ! ;o))
http://cjoint.com/?gkpcBrxdxK

Sub PlagesDate()
Dim c As Range
For Each c In Range("ImpEch")
If c.Value < date01 Then
c.Offset(0, 7).Value = "plage01"
Else
If c.Value >= date01 And c.Value < date02 Then
c.Offset(0, 7).Value = "plage02"
etc.....
End If
End If
Next c
End Sub

3 réponses

Avatar
MichDenis
Bonjour Domi,

Dim LaPlage As Range
set Laplage = LaPlageDesDates ' ("date01", "date02","date03",..."date10". )
Je suppose que les dates dans LaPlage sont en ordre croissant

for each c in range("ImpEch")
Range("N" & c.row) = application.Match(c,LaPlage),1)
Next



"Domi" a écrit dans le message de groupe de discussion :
#
Bonjour à tous,

J'ai sur une feuille une liste de 10 dates. 1 date par cellule, chaque
cellule est nommée "date01", "date02","date03",..."date10". (format date :
jj/mm/aaaa)

J'ai dans la colonne G une plage nommée "ImpEch" qui contient des dates
(format date jj/mm/aaaa)
Je voudrais inscire dans la colonne N (soit 7 colonnes plus à droite) une
valeur texte ("plage01" à "palge10") en fonction de la date qui se trouve
dans "ImpEch" et selon la règle suivante :

Si G < date01 alors N="plage01"
Si G >= date01 ET G < date02 alors N="plage02"
Si G >= date02 ET G < date03 alors N="plage03"
Si G >= date03 ET G < date04 alors N="plage04"
Si G >= date04 ET G < date05 alors N="plage05"
Si G >= date05 ET G < date06 alors N="plage06"
Si G >= date06 ET G < date07 alors N="plage07"
Si G >= date07 ET G < date08 alors N="plage08"
Si G >= date08 ET G < date09 alors N="plage09"
Si G >= date09 ET G < date10 alors N="plage10"
Si G >= date10 alors N="plage11"

Cela me semblait au départ relativement simple mais je me n'y parviens pas.
J'ai bien essayé une macro de ce genre mais sans succès...
Merci pour votre aide
Domi

J'ai mis sur "ci-joint" un fichier exemple avec des valeurs qui pourra
aider les généreux contributeurs pour faire des tests ! ;o))
http://cjoint.com/?gkpcBrxdxK

Sub PlagesDate()
Dim c As Range
For Each c In Range("ImpEch")
If c.Value < date01 Then
c.Offset(0, 7).Value = "plage01"
Else
If c.Value >= date01 And c.Value < date02 Then
c.Offset(0, 7).Value = "plage02"
etc.....
End If
End If
Next c
End Sub
Avatar
MichDenis
J'ai oublié de mentionner que pour obtenir une chaîne de caractères que tu désires comme
réponse :
Range("N" & c.row) = LaPlage(application.Match(c,LaPlage),1).name



"MichDenis" a écrit dans le message de groupe de discussion :

Bonjour Domi,

Dim LaPlage As Range
set Laplage = LaPlageDesDates ' ("date01", "date02","date03",..."date10". )
Je suppose que les dates dans LaPlage sont en ordre croissant

for each c in range("ImpEch")
Range("N" & c.row) = application.Match(c,LaPlage),1)
Next



"Domi" a écrit dans le message de groupe de discussion :
#
Bonjour à tous,

J'ai sur une feuille une liste de 10 dates. 1 date par cellule, chaque
cellule est nommée "date01", "date02","date03",..."date10". (format date :
jj/mm/aaaa)

J'ai dans la colonne G une plage nommée "ImpEch" qui contient des dates
(format date jj/mm/aaaa)
Je voudrais inscire dans la colonne N (soit 7 colonnes plus à droite) une
valeur texte ("plage01" à "palge10") en fonction de la date qui se trouve
dans "ImpEch" et selon la règle suivante :

Si G < date01 alors N="plage01"
Si G >= date01 ET G < date02 alors N="plage02"
Si G >= date02 ET G < date03 alors N="plage03"
Si G >= date03 ET G < date04 alors N="plage04"
Si G >= date04 ET G < date05 alors N="plage05"
Si G >= date05 ET G < date06 alors N="plage06"
Si G >= date06 ET G < date07 alors N="plage07"
Si G >= date07 ET G < date08 alors N="plage08"
Si G >= date08 ET G < date09 alors N="plage09"
Si G >= date09 ET G < date10 alors N="plage10"
Si G >= date10 alors N="plage11"

Cela me semblait au départ relativement simple mais je me n'y parviens pas.
J'ai bien essayé une macro de ce genre mais sans succès...
Merci pour votre aide
Domi

J'ai mis sur "ci-joint" un fichier exemple avec des valeurs qui pourra
aider les généreux contributeurs pour faire des tests ! ;o))
http://cjoint.com/?gkpcBrxdxK

Sub PlagesDate()
Dim c As Range
For Each c In Range("ImpEch")
If c.Value < date01 Then
c.Offset(0, 7).Value = "plage01"
Else
If c.Value >= date01 And c.Value < date02 Then
c.Offset(0, 7).Value = "plage02"
etc.....
End If
End If
Next c
End Sub
Avatar
MichDenis
Il y avait une parenthèse fermante en trop ;-)

for each c in range("ImpEch")
Range("N" & c.row) = LaPlage(application.Match(c,LaPlage,1).name
Next