Boucle If dans une routine for

  • Initiateur de la discussion Initiateur de la discussion p19
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

p19

XLDnaute Nouveau
Bonjour,

Je tente d'écrire un code pour monter un tableau de type calendrier.

En fait, je souhaite avoir une cellule contenant une date, puis une seconde dessous blanche, puis une troisième avec la date suivant la date de la première cellule, puis une date blanche ...

Le code suivant bloque dans ma routine "For i = 1 To nb_jours - 1" à l’intérieur de laquelle j'insère un If.

J'ai une erreur de type "Erreur de compilation, For sans Next"

Quelqu'un peut il m'expliquer ? Et me donner des conseils...

D'avance merci, je débute

Sub mon_tablo()
Dim i As Variant
Dim date_debut As Date
Dim date_test As Date
Dim nb_jours As Long


i = 12
date_debut = "1/5/2013"

date_test = date_debut
nb_jours = Day(DateSerial(Year(date_test), Month(date_test) + 1, 1) - 1)
'MsgBox (nb_jours)
Sheets("Feuil3").Activate
Range("A1").Value = date_debut
Range("A1").Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = date_debut
ActiveCell.Offset(1, 0).Select

For i = 1 To nb_jours - 1
If (i Mod 2) = 0 Then
Cells(i + 1, 1).Value = date_debut + i
Else
Cells(i + 1, 1).Value = ""
Next i

End Sub
 
Re : Boucle If dans une routine for

Bonsoir,

Je continue ce post puisque j’ai pu faire progresser mon code, de manière à ce qu’il me bâtisse un tableau du 1/5/2013 au 30/4/2014, en insérant une date puis en laissant une cellule vide avant la prochaine et en colorisant les week-end sur fond bleu (Merci ROGER).

Pour affiner, j’ai introduit la notion de jour férié sur fond vert avec la contrainte suivante : si le jour férié tombe un week-end, je souhaite que mon fond reste bleu.

J’ai même pu récupérer une fonction qui me calcule la date de pâques pour l’année afin de pouvoir en déduire le lundi de pâques, l’ascension et la pentecôte. (cf dPaques dans mon code que je tiens éventuellement à votre disposition).

Mon problème est le suivant : Malgré le traitement du jour férié qui tombe un week-end, mon code s’obstine à me renvoyer un fond vert.
Voici ci-dessous le code. Merci pour vos suggestions.

Cordiales salutations.

Philippe

Sub cal()
Dim an%, nbj%, i%, c%, dateDébut As Date, dep As Range, mois, jour As Long
Dim pâques, Lundi_de_Pâques, Ascension, Pentecôte As Variant
'
dateDébut = "1/5/2013" 'Première date

Set dep = [A1] 'Coin supérieur gauche du calendrier.

pâques = dPaques(Year(dateDébut))
Lundi_de_Pâques = Format((pâques + 1), "mm/dd")
Ascension = Format((pâques + 39), "mm/dd")
Pentecôte = Format((pâques + 50), "mm/dd")

nbj = DateSerial(Year(dateDébut) + 1, Month((dateDébut)), Day(dateDébut)) - dateDébut

For i = 1 To nbj
With dep.Offset(2 * (Day(dateDébut) - 1), c)
.Value = dateDébut

Select Case Month(dateDébut)
Case "5", "6", "7", "8", "9", "10", "11", "12"
mois = Month(dateDébut) - 4
Case "1", "2", "3", "4"
mois = Month(dateDébut) + 8
End Select

jour = Day(dateDébut)
Select Case Format((dateDébut), "dddd")
Case "samedi", "dimanche"
.Interior.Color = RGB(0, 176, 240)
Cells(jour * 2, mois).Interior.Color = RGB(0, 176, 240)
Case Else
.Interior.Color = RGB(255, 255, 255)
End Select


Select Case Format((dateDébut), "mm/dd")

Case "01/01", "05/01", "05/08", "06/01", "07/14", "08/15", "09/01", "11/01", "11/11", "12/25", Lundi_de_Pâques, Ascension, Pentecôte
If Format((dateDébut), "dddd") <> "samedi" Then
.Interior.Color = RGB(146, 208, 80)
Cells(jour * 2, mois).Interior.Color = RGB(146, 208, 80)
ElseIf Format((dateDébut), "dddd") <> "dimanche" Then
.Interior.Color = RGB(146, 208, 80)
Cells(jour * 2, mois).Interior.Color = RGB(146, 208, 80)
Else
.Interior.Color = RGB(0, 176, 240)
Cells(jour * 2, mois).Interior.Color = RGB(0, 176, 240)
End If

End Select


End With
If Month(dateDébut) <> Month(dateDébut + 1) Then c = c + 1
dateDébut = dateDébut + 1
Next

End Sub
 
Re : Boucle If dans une routine for

Je pense finalement avoir trouvé.

J'ai modifié mon case ainsi :

Select Case Format((dateDébut), "mm/dd")

Case "01/01", "05/01", "05/08", "06/01", "07/14", "08/15", "09/01", "11/01", "11/11", "12/25" , Lundi_de_Pâques, Ascension, Pentecôte
If (Format((dateDébut), "dddd") = "samedi") Or (Format((dateDébut), "dddd") = "dimanche") Then
.Interior.Color = RGB(0, 176, 240)
Cells(jour * 2, mois).Interior.Color = RGB(0, 176, 240)
Else
.Interior.Color = RGB(146, 208, 80)
Cells(jour * 2, mois).Interior.Color = RGB(146, 208, 80)
End If

End Select

et cela fonctionne beaucoup mieux.😎

Si toutefois, vous avez une meilleure solution...

Philippe
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
363
Réponses
3
Affichages
298
Réponses
40
Affichages
3 K
Réponses
4
Affichages
461
Retour