VBA, macro encadrements comparaison de dates

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #19535151
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" #
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
MichDenis
Le #19535121
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"
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" #
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
MichDenis
Le #19535111
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
Publicité
Poster une réponse
Anonyme