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

[VBA]Boucle sur plage et comparaison de date

3 réponses
Avatar
padbra
bonjour humide a tou(te)s,

Mon probleme du jour est le suivant :

Une feuille "saisie" et une feuille "employes".

Sur la feuille saisie une cellule "moisEnCours" qui contient la date du
premier jour du mois. Ce mois-ci c'est le 01/12/2003 ;o).

Sur la feuille "employes", une liste d'employes en range("a2:ax"), une date
d'arrivee en range("a2:ax").offset(0,5) et une date de depart en
range("a2:ax").offset(0,6).
Je voudrais copier le nom de chaque employe, contenu sur la feuille
"employes", sur la feuille saisie a deux conditions :
1- sa date d'arrivee est inferieure a la date de debut du mois en cours
2- sa date de depart ne soit pas renseignee ou est superieure a la date de
fin du mois en cours.
Voici mon code :

<code>
Sub genererLesEmployes()

Dim saisieSh As Worksheet
Dim employeSh As Worksheet
Dim employes As Range
Dim listingEmploye As Range
Dim tempDate As Date

Application.ScreenUpdating = False

Set saisieSh = ThisWorkbook.Sheets("saisie")
Set employeSh = ThisWorkbook.Sheets("employes")

'je supprime la liste du mois passe avant de generer la nouvelle liste
saisieSh.Range("item1",
saisieSh.Range("item1").End(xlToRight).Offset).ClearContents

set listingEmploye = employeSh.Range("a2",
employeSh.Range("a2").End(xlDown).Offset)

For Each employes In listingEmploye
tempDate = Range(employe).Offset(0, 5).Value 'je veux recuperer la date
d'arrivee afin de faire ma comparaison avec le mois en cours mais
'la excel me dit objet requis en surbrillant "tempDate"
'ben ca bloque deja la, alors j'ai pas encore fais le reste du code ;o)
Next employes

Application.ScreenUpdating = True

End Sub
</code>

Merci pour vos lumieres
padbra

3 réponses

Avatar
AV
A adapter :
Etiquettes de colonnes en A1:C1
"moisEnCours" est une plage nommée contenant la formule/date du 1° jour du mois
Les Noms d'employés en A1:Ax
Dates d'arrivée en B2:Bx
Dates départ en C2:Cx

E1 est vide
En E2 :
=(B2<moisEnCours)*((C2="")+(C2>DATE(ANNEE(moisEnCours);MOIS(moisEnCours)+1;0)))

Filtre élaboré avec zone de critères E1:E2
Un coup d'enregistreur de macros si tu veux du vba ou renviens demander.

AV
Avatar
Ellimac
Bonjour,

Une solution :

For Each employes In listingEmploye
tempDate = employes.Offset(0, 5).Value
tempdate2 = employes.Offset(0, 6).Value
If tempDate < saisieSh.Range("moisencours") And _
(tempdate2 = "" Or tempdate2 > saisieSh.Range
("moisencours")) Then
saisieSh.Range("a65000").End(xlUp).Offset(1, 0) =
employes
End If
Next

Camille

-----Message d'origine-----
bonjour humide a tou(te)s,

Mon probleme du jour est le suivant :

Une feuille "saisie" et une feuille "employes".

Sur la feuille saisie une cellule "moisEnCours" qui
contient la date du

premier jour du mois. Ce mois-ci c'est le 01/12/2003 ;o).

Sur la feuille "employes", une liste d'employes en range
("a2:ax"), une date

d'arrivee en range("a2:ax").offset(0,5) et une date de
depart en

range("a2:ax").offset(0,6).
Je voudrais copier le nom de chaque employe, contenu sur
la feuille

"employes", sur la feuille saisie a deux conditions :
1- sa date d'arrivee est inferieure a la date de debut du
mois en cours

2- sa date de depart ne soit pas renseignee ou est
superieure a la date de

fin du mois en cours.
Voici mon code :

<code>
Sub genererLesEmployes()

Dim saisieSh As Worksheet
Dim employeSh As Worksheet
Dim employes As Range
Dim listingEmploye As Range
Dim tempDate As Date

Application.ScreenUpdating = False

Set saisieSh = ThisWorkbook.Sheets("saisie")
Set employeSh = ThisWorkbook.Sheets("employes")

'je supprime la liste du mois passe avant de generer la
nouvelle liste

saisieSh.Range("item1",
saisieSh.Range("item1").End
(xlToRight).Offset).ClearContents


set listingEmploye = employeSh.Range("a2",
employeSh.Range("a2").End(xlDown).Offset)

For Each employes In listingEmploye
tempDate = Range(employe).Offset(0, 5).Value 'je veux
recuperer la date

d'arrivee afin de faire ma comparaison avec le mois en
cours mais

'la excel me dit objet requis en
surbrillant "tempDate"

'ben ca bloque deja la, alors j'ai pas encore fais le
reste du code ;o)

Next employes

Application.ScreenUpdating = True

End Sub
</code>

Merci pour vos lumieres
padbra


.



Avatar
padbra
Merci a vous deux.
La solution VBA de camille me convient parfaitement.
Mon erreur venait de la :
tempDate = Range(employe).Offset(0, 5).Value


a la place de :
tempDate = employes.Offset(0, 5).Value

merci donc encore a tous les deux
:-)))