Contenu d'une variable non prise en compte dans un IF

mistercoke

XLDnaute Junior
Bonjour à tous,
Je bute sur un problème de variable, j'ai une valeur1 qui évolue toute les semaines. En fonction de cette dernière je souhaite affecter une valeur2 à une autre variable et une troisième valeur3 toujours en fonction de la valeur1. Mais je dois me planter dans la syntaxe car la valeur1 n'est jamais prise en compte. Si quelqu'un peu 'aiguiller. J'ai essayé avec des " mais idem, sans elseif idem. En faisant en pas a pas (f8), je vois la valeur de periode evolué de vide a 1 puis 2 puis.. jusqu'à 13 et pareil pour semaine.
Je vois pas trop comment traiter la chose : Voici mon code.

'---Définition de la semaine calendaire.(Suivant la semaine Semcal = 1à53)
Semcal = Format(Date, "ww", vbMonday, vbFirstFourDays)
'---Définition de la période
If Semcal = 1 Or 2 Or 3 Or 4 Then
Periode = 1
ElseIf Semcal = 5 Or 6 Or 7 Or 8 Then
Periode = 2
ElseIf Semcal = 9 Or 10 Or 11 Or 12 Then
Periode = 3
ElseIf Semcal = 13 Or 14 Or 15 Or 16 Then
Periode = 4
ElseIf Semcal = 17 Or 18 Or 19 Or 20 Then
Periode = 5
ElseIf Semcal = 21 Or 22 Or 23 Or 24 Then
Periode = 6
ElseIf Semcal = 25 Or 26 Or 27 Or 28 Then
Periode = 7
ElseIf Semcal = 29 Or 30 Or 31 Or 32 Then
Periode = 8
ElseIf Semcal = 33 Or 34 Or 35 Or 36 Then
Periode = 9
ElseIf Semcal = 37 Or 38 Or 39 Or 40 Then
Periode = 10
ElseIf Semcal = 41 Or 42 Or 43 Or 44 Then
Periode = 11
ElseIf Semcal = 45 Or 46 Or 47 Or 48 Then
Periode = 12
ElseIf Semcal = 49 Or 50 Or 51 Or 52 Or 53 Then
Periode = 13
End If
'Définition de la semaine
If Semcal = 1 Or 5 Or 9 Or 13 Or 17 Or 21 Or 25 Or 29 Or 33 Or 37 Or 41 Or 45 Or 49 Then
Semaine = 1
ElseIf Semcal = 2 Or 6 Or 10 Or 14 Or 18 Or 22 Or 26 Or 30 Or 34 Or 38 Or 42 Or 56 Or 50 Then
Semaine = 2
ElseIf Semcal = 3 Or 7 Or 11 Or 15 Or 19 Or 23 Or 27 Or 31 Or 35 Or 39 Or 43 Or 47 Or 51 Then
Semaine = 3
ElseIf Semcal = 4 Or 8 Or 12 Or 16 Or 20 Or 24 Or 28 Or 32 Or 36 Or 40 Or 44 Or 48 Or 52 Then
Semaine = 4
ElseIf Semcal = 53 Then
Semaine = 5
End If

Ensuite je concatene le tout et sa me donne periode/semaine. J'arrive toujours 13/4 au final au lieu de 4/3 pour cette semaine du 15/04/2011.

Je vais chercher mes puces a l'école et je reprend le fil, d'avance merci les exeldiens.:)
 

Pierrot93

XLDnaute Barbatruc
Re : Contenu d'une variable non prise en compte dans un IF

Re,

A noter que tu pourrais peut être simplifier ainsi :
Code:
Semcal = Format(Date, "ww", vbMonday, vbFirstFourDays)
Periode = Round(Semcal / 4)

je ne sais pas trop se que tu cherches à obtenir, mais tu trouveras sur le forum différentes formules afin de déterminer un numéro de semaine pour un jour d'un mois donné....
 
D

Denis

Guest
Re : Contenu d'une variable non prise en compte dans un IF

Bonjour mistercoke, Pierrot et le forum,
comme ceci avec des select case par exemple (plus rapide à écrire)
'---Définition de la semaine calendaire.(Suivant la semaine Semcal = 1à53)
semcal = Format(Date, "ww", vbMonday, vbFirstFourDays)
'---Définition de la période
Select Case semcal
Case 1 To 4
periode = 1
Case 5 To 8
periode = 2
Case 9 To 12
periode = 3
Case 13 To 16
periode = 4
End Select


Select Case semcal
Case 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49
Semaine = 1
Case 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 56, 50
Semaine = 2
Case 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51
Semaine = 3
Case 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52
Semaine = 4
Case 53
Semaine = 5
End Select

La solution de Pierrot aussi est bonne, à vérifier toutefois que la valeur de semcal est texte (entre "") la comparaison sur du numérique
Bon courage et à +
Denis
 

JNP

XLDnaute Barbatruc
Re : Contenu d'une variable non prise en compte dans un IF

Bosoir le fil :),
Ah, ce Pierrot, le temps que je modifie le code, il a pratiquement tout dit :rolleyes:...
Donc effectivement, mauvaise syntaxe. De base je passerais plutôt par
Code:
'---Définition de la semaine calendaire.(Suivant la semaine Semcal = 1à53)
Semcal = Format(Date, "ww", vbMonday, vbFirstFourDays)
'---Définition de la période
Select Case Semcal
Case 1 To 4
Periode = 1
Case 5 To 8
Periode = 2
Case 9 To 12
Periode = 3
Case 13 To 16
Periode = 4
Case 17 To 20
Periode = 5
Case 21 To 24
Periode = 6
Case 25 To 28
Periode = 7
Case 29 To 32
Periode = 8
Case 33 To 36
Periode = 9
Case 37 To 40
Periode = 10
Case 41 To 44
Periode = 11
Case 45 To 48
Periode = 12
Case 49 To 53
Periode = 13
End Select
'Définition de la semaine
Select Case Semcal
Case 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49
Semaine = 1
Case 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 56, 50
Semaine = 2
Case 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51
Semaine = 3
Case 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52
Semaine = 4
Case 53
Semaine = 5
End Select
mais vu que ça tombe juste, j'aurais directement calculé
Code:
Periode = Int((Semcal - 1) / 4) + 1
Pour le 2ème, voir du côté de Mod :rolleyes:...
Bonne soirée :cool:
Ajout : bon, Denis m'a grillé aussi :rolleyes:...
 

Pierrot93

XLDnaute Barbatruc
Re : Contenu d'une variable non prise en compte dans un IF

Re, bonsoir Denis, JNP:)

avec le 2ème cela pourrait donner ceci :
Code:
semcal = Format(Date, "ww", vbMonday, vbFirstFourDays)
Periode = Round(semcal / 4)
semaine = IIf(semcal = 53, 5, IIf(semcal > 4, semcal Mod 4, semcal))

A voir et à tester..
 

mistercoke

XLDnaute Junior
Re : Contenu d'une variable non prise en compte dans un IF

Salut la team du fil,

A peine le temps d'aller chercher mes puces a l'école que j'ai une réponse de vous tous. C'est très cool.

Bon, j'ai tester la version avec Case et ca marche du tonnerre mais faut que je regarde les différents cas de figure en modifiant le mois et les années de mon PC pour voir comment cela se comporte. Mais étant encore un bleue en VB en comparaison avec vous, pouvez vous me dire la particularité de ce "case" que je connais pas?.

Pour la simplificatoin de JNP et de Pierrot, je n'ai pas tester encore mais pour tout dire c'est une facon américaine de définir le numéro de la semaine. Nous, Francais, marchons avec les semaine de 1 à 52 (Voir 53 certaines années). Mais je bosse dans une société américaine et les semaines se nomment comme suit :

Francais = Américaine
Semaine 1 = P1S1
Semaine 2 = P1S2
Semaine 3 = P1S3
Semaine 4 = P1S4

Semaine 5 = P2S1
Semaine 6 = P2S2
Semaine 7 = P2S3
Semaine 8 = P2S4

Semaine 9 = P3S1
Semaine 10 = P3S2
Semaine 11 = P3S3
Semaine 12 = P3S4
Semaine 13 = P4S1
Semaine 14 = P4S2
Semaine 15 = P4S3
Semaine 16 = P4S4

Semaine 17 = P5S1
Semaine 18 = P5S2
Semaine 19 = P5S3
Semaine 20 = P5S4

Semaine 21 = P6S1
Semaine 22 = P6S2
Semaine 23 = P6S3
Semaine 23 = P6S4

Semaine 25 = P7S1
Semaine 26 = P7S2
Semaine 27 = P7S3
Semaine 28 = P7S4

Semaine 29 = P8S1
Semaine 30 = P8S2
Semaine 31 = P8S3
Semaine 32 = P8S4

Semaine 33 = P9S1
Semaine 34 = P9S2
Semaine 35 = P9S3
Semaine 36 = P9S4

Semaine 37 = P10S1
Semaine 38 = P10S2
Semaine 39 = P10S3
Semaine 40 = P10S4

Semaine 41 = P11S1
Semaine 42 = P11S2
Semaine 43 = P11S3
Semaine 44 = P11S4

Semaine 45 = P12S1
Semaine 46 = P12S2
Semaine 47 = P12S3
Semaine 48 = P12S4

Semaine 49 = P13S1
Semaine 50 = P13S2
Semaine 51 = P13S3
Semaine 52 = P13S4
Semaine 53 = P13S5

En fait j'arrivais a traiter cela avec une fonciton matricielle dans une feuille mais je souhaitais essayer de le mettre sous VB pour éviter de mettre un tableau dans une fuille cachée.

Encore une fois un gros merci.:D
 

Pierrot93

XLDnaute Barbatruc
Re : Contenu d'une variable non prise en compte dans un IF

Re,

pour tester avec des dates différentes sans avoir à toucher les paramètres de la machine :
Code:
Dim madate As Date
madate = #3/31/2011#
semcal = Format(madate, "ww", vbMonday, vbFirstFourDays)
 

mistercoke

XLDnaute Junior
Re : Contenu d'une variable non prise en compte dans un IF

Hey les gars, vous etes des PC 4 coeurs ou quoi ?!!:p

Pas le temps de répondre que vous avez déjà optimiser le code.
Vous faites parti du top 5 des exceldiens Messieurs je m'incline devant vous. ;)

Bon je vais test ton code Pierrot, je te tiens au jus après...

Nota : Et dire qu'apres avoir cliqué sur "Envoyé la réponse" ils vont m'avoir fait le code en 6 mots...:cool:

Schuss...superbe ambience ce fil.
 

Pierrot93

XLDnaute Barbatruc
Re : Contenu d'une variable non prise en compte dans un IF

Aarf, j'ai détécté une horreur, doit mîeux correspondre ainsi :
Code:
Dim madate As Date
madate = #12/31/2011#
semcal = Format(madate, "ww", vbMonday, vbFirstFourDays)
Periode = Round(semcal / 4)
semaine = IIf(semcal = 53, 5, IIf(semcal > 4, IIf(semcal Mod 4 = 0, 4, semcal Mod 4), semcal))
 
Dernière édition:

mistercoke

XLDnaute Junior
Re : Contenu d'une variable non prise en compte dans un IF

Oh mon Pierrot trop fort,
J'ai vérifier jusqu'à 2032 et c'est pile poile, pas vu d'erreur. Merci pour l'astuce sans modifier la date du PC, Je vais me mettre ce code de côté car très utile. Sans ce code j'y serais encore je crois.
Sinon case visiblement remplace le if mais dans quel mesure?. Quel est la différence avec le If?

Après je ne t'embete plus c'est promis.:)
 

JNP

XLDnaute Barbatruc
Re : Contenu d'une variable non prise en compte dans un IF

Re :),
Sinon case visiblement remplace le if mais dans quel mesure?. Quel est la différence avec le If?
Vu que c'était Denis et moi qui t'avons branché sur Case, quelques explications :
Si tu traduit littéralement en français, tu comprendras tout de suite :p...

If, Then, Else: Si, Alors, Sinon
ElseIf : Sinon Si
End If : fin de test

Select Case : Sélectionne les cas
Case, X, To, Is : Cas, X, De à, Est (>, <)
Case Else : Autres cas
End Select : fin de sélection

Capito :p ?

Bonne soirée :cool:
 

Hippolite

XLDnaute Accro
Re : Contenu d'une variable non prise en compte dans un IF

Bonjour à tous,
Si on veux le numéro de semaine aux normes américaines, pas la peine de se fatiguer, il y a la fonction NO.SEMAINE() pour la feuille et Application.WorksheetFunction.Weeknum pour vba.
A+
 

Statistiques des forums

Discussions
312 198
Messages
2 086 124
Membres
103 126
dernier inscrit
Vuagno27