Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/11/2011, 17h27   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Par défaut N° de la semaine en fonction de la date

Bonjour,

Je recherche un Code VBA pour trouver la date du mardi en fonction du N° de la semaine qui se trouve en "A1"
ex: semaine en "A1" 45 = en "C1" le 8/11/2011.

Un très grand merci à tout ceux qui pourront m'aider...

Cordialement
Max
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 18h09   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
Ci-joint une proposition de fonction (à mettre dans module standard)
Code :
1
2
3
4
5
6
7
Function Tuesd(ByVal An As Integer, ByVal Sem As Byte) As Date
Dim FirstTues As Date
 
FirstTues = DateSerial(An, 1, 1)
FirstTues = DateAdd("d", 1 - DatePart("w", FirstTues, vbTuesday), FirstTues)
Tuesd = DateAdd("ww", Sem, FirstTues)
End Function
En C1 tu metsLe 2011 pourra être remplacé par la valeur d'une cellule cntenant l'année
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/11/2011, 18h51   #3
Invité de passage
 
Inscription : octobre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 13
Points : 4
Points : 4
Par défaut Re : [XL-2007] N° de la semaine en fonction de la date

Bonjour,

Tu peux utiliser la fonction suivante :
Code :
1
2
 
=DATE(ANNEE(AUJOURDHUI());1;(A1-1)*7+1)+9-JOURSEM(DATE(ANNEE(AUJOURDHUI());1;(A1-1)*7+1);2)
Pour avoir le code VBA, il suffit d'enregistrer la saisie de cette formule.

Ellimac
Ellimac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 19h04   #4
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Bonjour mercatoq

Je te remercie infiniment Nickel

Bonne soirée

Max
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 13h23   #5
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Après tests sur le premier mardi de l'année, ci-joint fonction modifiée (le premier mardi de l'année étant en semaine n° 1)
Code :
1
2
3
4
5
6
7
Function Tuesd(ByVal An As Integer, ByVal Sem As Byte) As Date
Dim FirstTues As Date
 
FirstTues = DateSerial(An, 1, 1)
FirstTues = DateAdd("d", -DatePart("w", FirstTues, vbWednesday), FirstTues)
Tuesd = DateAdd("ww", Sem, FirstTues)
End Function
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/11/2011, 08h33   #6
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Bonjour mercatoq,

Je te remercie avec un peu de retard " le travail" pour ta modification.

Si je peut abuser juste un petit supplément, si je doit à l'avenir changer de jour a la place du mardi mettre le jeudi quel est la modif ?
Parce que j'ai fait ceci mais sa ne fonctionne pas ?

Code :
1
2
3
4
5
6
7
Function Tuesd(ByVal An As Integer, ByVal Sem As Byte) As Date
Dim FirstTues As Date
 
FirstTues = DateSerial(An, 1, 1)
FirstTues = DateAdd("d", -DatePart("w", FirstTues, vbWednesday), FirstTues)
Thursd= DateAdd("ww", Sem, FirstTues)
End Function
Je te souhaite une bonne journée

Max
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 10h24   #7
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
Remplace la constante vbWednesday par vbFriday dans la ligne 5 pour obtenir le jeudi.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/11/2011, 11h01   #8
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Bonjour mercatoq,

Je te remercie et te souhaite une bonne journée

@+

Max
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 16h04   #9
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Bonjour,

mercatoq , je crois que le calcul ainsi pour 2014 comme en semaine 1 il n'y as par de mardi en 2014... on se retrouve avec un décalage d'une semaine...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 17h08   #10
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour bbil

Effectivement, comme je l'ai précisé, j'ai considéré la 1ère semaine est celle contenant le premier mardi de l'année.
Maintenant, il suffit de considérer quelle norme est utilisée pour désigner la première semaine de l'année.


Exemple
Code :
1
2
3
4
5
6
7
8
9
Function Tuesd(ByVal An As Integer, ByVal Sem As Byte) As Date
Dim FirstTues As Date
Dim n As Byte
 
FirstTues = DateSerial(An, 1, 1)
FirstTues = DateAdd("d", -DatePart("w", FirstTues, vbWednesday), FirstTues)
n = IIf(DatePart("ww", FirstTues, vbMonday, vbFirstFourDays) > 1, 0, 1)
Tuesd = DateAdd("ww", Sem - n, FirstTues)
End Function
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 10h31   #11
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Hello,

Tant qu'à faire j'ai généralisé la fonction pour qu'elle soit opérationnelle pour n'importe quel jour de la semaine.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Function DateFollowingWeekDay(An As Integer, WeekNo As Integer, DayNo As Integer) As Date
  Dim Day1 As Date      '  Di = 1 Lu = 2 Ma = 3 Me = 4
  Dim Day1No As Integer  '  Je = 5 Ve = 6 Sa = 7
  Day1 = DateSerial(An, 1, 1)
  Day1No = Weekday(Day1)
  If Day1No < 6 Then
    Day1 = Day1 - Weekday(Day1) - 5
                                            Else
    Day1 = Day1 - Weekday(Day1) + DayNo
  End If
  DateFollowingWeekDay = Day1 + 7 * WeekNo
End Function
Cela devrait permettre de clôturer le sujet, non, apdf1 ?
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 10h59   #12
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Bonjour Defluc,

Et merci pour code très intéressant, avant de clôturer le sujet, pourrez tu me dire comment faire appel a la fonction, puisque avec le code de Mercatog que je remercie au passage je mettais ceci

Dans la cellule "A2" pour avoir le N° de la semaine

Je te remercie et te souhaite une bonne journée

Cordialement
Max
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 12h11   #13
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Code :
DateFollowingWeekDay(2011, 45, 3)
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 14h26   #14
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Bonjour Defluc,

Je te remercie mais j'ai un message d'erreur alors j'ai fait:

Code :
=DateFollowingWeekDay(2011, 45, 3)
Puis
Code :
=DateFollowingWeekDay(2011, 45, 3;D3)
Puis
Code :
=DateFollowingWeekDay(2011;D3)
Je ne sais plus ?

@+

Max
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 15h15   #15
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Code :
=DateFollowingWeekDay(2011; 45; 3)
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 15h31   #16
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Re,

Je ne comprend pas rien se passe
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 15h50   #17
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
C'est pas possible, en recopiant ce que je t'ai renseigné dans une cellule, la date doit apparaître dans cette cellule. Ou alors, elle doit comporter un message d'erreur du genre NOM ?

Oups, j'ai oublié quelque chose parce que je croyais que la fonction était à utiliser dans une macro.

Comme du l'utilises d'une celllule, la première ligne doit être
Code :
Public Function DateFollowingWeekDay(An As Integer, WeekNo As Integer, DayNo As Integer) As Date
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 16h08   #18
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
re,

Toujours pareil la cellule comporte erreur #Nom?

@+
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 16h16   #19
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
As-tu bien enregistré la fonction dans un module standard ?
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 16h22   #20
Invité de passage
 
Inscription : septembre 2008
Messages : 121
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 121
Points : 4
Points : 4
Re,

J'ai mis le code dans un module et la sa marche

Je te remercie de la patience et je te souhaite une bonne soirée

@+
Max
apdf1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h13.


 
 
 
 
Partenaires

Hébergement Web