Remplir une plage de cellules entre deux cellules

Bonjour à tous,

Je cherche à remplir mon calendrier feuille2 avec les tâches feuille1 comme dans l'exemple.

(code vba ou pas)

Bonjour. Bievenue sur le Forum

Modifications apportées au fichier

Les formules de toutes les colonnes ont été changées

Les cellules des colonnes mois sont sous MFC (sauf la 1er Janvier)

Ton calendrier était celui de 2012 et ta recherche porte sur 2013!

Cordialement

bonsoir,

voici une macro,

le passage d'une année à l'autre n'est pas géré, ni les jours fériés, ni les vacances.

Sub remplir()
i = 2
While Worksheets("sheet1").Cells(i, 2) <> ""
 tache = Worksheets("sheet1").Cells(i, 1)
 dd = Worksheets("sheet1").Cells(i, 2)
 df = Worksheets("sheet1").Cells(i, 3)
 md = Month(dd)
 jd = Day(dd)
 mf = Month(df)
 jf = Day(df) + 1
 l = jd + 1
 mc = md
 c = mc * 3 + 1
 With Worksheets("sheet2")
  encore = True
  While encore
   If .Cells(l, c - 1) <> "S" And .Cells(l, c - 1) <> "D" Then .Cells(l, c) = tache
   If l = jf And mc = mf Then
    encore = False
   Else
    l = l + 1
    If .Cells(l, c - 1) = "" Then l = 2: mc = mc + 1: c = mc * 3 + 1
   End If
  Wend
 End With
 i = i + 1
Wend
End Sub

Super ce code h2so4 !

Ca fonctionne puis ça bug sur :

If .Cells(l, c - 1) <> "S" And .Cells(l, c - 1) <> "D" Then

erreur : "Application-defined or object-defined error"

Ca me l'a déjà fait. Je crois qu'il n'aime pas l'écriture

.Cells(l, c - 1)

avec un point comme ça devant.

Il a l'air de ne pas reconnaître cette écriture.

bonsoir,

cette syntaxe est parfaitement valable et fonctionne très bien chez moi.

peux-tu joindre ton fichier dans lequel tu as inséré le code, ainsi que les dates que tu as utilisées ?

Tu trouveras ton code "balisé" dans le module parmi mes parties de code.

Rebonsoir,

l'erreur provient du fait que je faisait un test sur "S" ou "D" pour déterminer si le jour n'est pas un jour de week-end. dans ton fichier il y a partout la valeur J.

j'ai adapté le code pour remplir la cellule en fonction de la couleur (255=rouge), ce qui du coup offre également une solution pour les autres jours fériés (à condition d'utiliser le même code couleur.

Sub remplir()
i = 2
While Worksheets("sheet1").Cells(i, 2) <> ""
 tache = Worksheets("sheet1").Cells(i, 1)
 dd = Worksheets("sheet1").Cells(i, 2)
 df = Worksheets("sheet1").Cells(i, 3)
 md = Month(dd)
 jd = Day(dd)
 mf = Month(df)
 jf = Day(df) + 1
 l = jd + 1
 mc = md
 c = mc * 3 + 1
 With Worksheets("sheet2")
  encore = True
  While encore
   If .Cells(l, c).Interior.Color <> 255 Then .Cells(l, c) = tache
   If l = jf And mc = mf Then
    encore = False
   Else
    l = l + 1
    If .Cells(l, c - 1) = "" Then l = 2: mc = mc + 1: c = mc * 3 + 1
   End If
  Wend
 End With
 i = i + 1
Wend
End Sub

Ca fonctionne pour toi ?

Moi j'ai toujours la même erreur sur la même ligne malgré la modification du test ...

mon code ne prévoyait pas que tu avais 2 semestres séparés sur des feuilles différentes.

' i= première ligne des taches
i = 2
While Worksheets("Tâches").Cells(i, 2) <> ""
 tache = Worksheets("Tâches").Cells(i, 1)
 dd = Worksheets("Tâches").Cells(i, 2):  'date de début
 df = Worksheets("Tâches").Cells(i, 3): ' date de fin
 md = Month(dd): 'mois debut
 jd = Day(dd): ' jour debut
 mf = Month(df): ' mois fin
 jf = Day(df) + 1: 'ligne du jour fin
 l = jd + 1: 'ligne du jour debut
 mc = md: 'mois sur lequel le programme est occupé
 If mc < 7 Then s = 1 Else s = 2:  's = semestre
 c = (mc - (s - 1) * 6) * 3 + 1: ' c colonne à remplir

  encore = True
  While encore
   If Worksheets("semestre" & s).Cells(l, c).Interior.Color <> 255 Then Worksheets("semestre" & s).Cells(l, c) = tache
   If l = jf And mc = mf Then
    encore = False
   Else
    l = l + 1
    If Worksheets("semestre" & s).Cells(l, c - 1) = "" Then
     l = 2: mc = mc + 1
     If mc < 7 Then s = 1 Else s = 2
     c = (mc - (s - 1) * 6) * 3 + 1
    End If
   End If
  Wend
 i = i + 1
Wend

Ca fonctionne.

Merci pour cette leçon

Rechercher des sujets similaires à "remplir plage entre deux"