IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel VBA - durée à cheval sur 2 années [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Par défaut Excel VBA - durée à cheval sur 2 années
    Bonjour,
    Je dois réaliser un planning avec des dates début et fin de stage. Pour colorier le planning j'utilise les numéros de semaine de chacun des dates (col H pour la sem 1 jusqu'à col BG pour la sem 52).
    Voici un bout du code qui fonctionne parfaitement écrit par Mercatog, mille mercis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
                'j compteur de ligne débute en 4 dans la feuille planning
                For j = 4 To LastLig
                    'date de début en colonne D
                    v_date_stage = CDate(.Range("D" & j).Value)
                    'date fin en colonne F
                    v_date_fin_stage = CDate(.Range("F" & j).Value)
                    'N° semaine de de début
                    v_sem_deb = DatePart("ww", v_date_stage, vbMonday, vbFirstFourDays)
                    'N° semaine fin
                    v_sem_fin = DatePart("ww", v_date_fin_stage, vbMonday, vbFirstFourDays)
                    'on écrit en E le n° semaine de  début
                    .Range("E" & j).Value = v_sem_deb
                    'on écrit en G le n° semaine de  fin
                    .Range("G" & j).Value = v_sem_fin
                    'On boucle et en remplit (semaine 1 en colonne 8:H
                    'If v_sem_deb > v_sem_fin Then
                        For i = v_sem_fin To v_sem_deb 'j'ai essayé ce test mais bof !
                            .Cells(j, 7 + i).Value = Left(.Range("C" & j).Value, 1)
                            'Si le service est colorié en colonne C,
                            'cette couleur sera reportée dans le planning
                            .Cells(j, 7 + i).Interior.Color = .Range("C" & j).Interior.Color
                            Next i
                    Else
                        For i = v_sem_deb To v_sem_fin
                            .Cells(j, 7 + i).Value = Left(.Range("C" & j).Value, 1)
                            'Si le service est colorié en colonne C,
                            'cette couleur sera reportée dans le planning
                            .Cells(j, 7 + i).Interior.Color = .Range("C" & j).Interior.Color
                        Next i
                    'End If
                Next j
    Le souci est lorsque le stage commence par exemple en novembre et se termine en janvier, dans ce cas le numéro de la semaine fin est supérieur à celle de début.

    Merci encore pour votre aide.
    Chris

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Par défaut mise en forme conditionnelle
    il n'y aurait pas plus simple avec une mise en forme conditionnelle?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Par défaut pour corriger ton code
    Fais comme suit , tu rajoutes
    un test et 2 boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    'cas 1 : cas idéal
    if v_sem_fin>=v_sem_deb then 
     
     
    else
    'cas génant , considérer 2 bouts à traiter
    for i= 1 to v_sem_fin
    'coloriage
    next
     
    for i= v_sem_deb to 52
    'coloriage
    next
     
     
    end if
    Je crois que cela devrait résoudre ton problème.


  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Par défaut Gestion de stagiaires par service avec planning sur2 ans
    Vous êtes des chefs ça marche nickel, j'ai conservé la version de mercatog.
    Encore merci beaucoup
    Voila une application de gestion de stagiaires par service avec planning qui devrait être sympa grâce à vous.
    À bientôt pour de nouvelles aventures
    Bien cordialement
    Chris
    ps : si vous voulez le fichier terminé n'hésitez pas !
    Il me reste à peaufiner mes formulaires et j'espère que cela sera une formalité

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Essaies ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Dim Dd As Date, Df As Date
    Dim LastLig As Long, j As Long
    Dim i As Byte, Ofst As Byte, Sd As Byte, Sf As Byte
     
     
    With Sheets("planning")
        LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row
        With Range("H4:CI" & LastLig)
            .ClearContents
            .Interior.ColorIndex = xlNone
        End With
        For j = 4 To LastLig
            Dd = CDate(.Range("D" & j).Value)
            Df = CDate(.Range("F" & j).Value)
            If Year(Df) = Year(Dd) + 1 Then Ofst = DateDiff("ww", DateSerial(Year(Dd), 1, 1), DateSerial(Year(Df), 1, 1))
            Sd = DatePart("ww", Dd, vbMonday, vbFirstJan1)
            Sf = DatePart("ww", Df, vbMonday, vbFirstJan1)
            .Range("E" & j).Value = Sd
            .Range("G" & j).Value = Sf
            For i = Sd To Sf + Ofst
                .Cells(j, 7 + i).Value = Left(.Range("C" & j).Value, 1)
                .Cells(j, 7 + i).Interior.Color = .Range("C" & j).Interior.Color
            Next i
            Ofst = 0
        Next j
    End With
    Edit: j'ai modifié le code avec la semaine du 1er janvier est la semaine n°1 (en ne tenant pas compte de la norme ISO)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/12/2014, 17h15
  2. [AC-2003] Sommer sur 4 semaines précédentes à cheval sur 2 années
    Par ostrich95 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 01/04/2014, 10h18
  3. [XL-2007] Excel-VBA : Formule longue sur plusieurs lignes erreur fin d'instruction
    Par Pauline1374 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/03/2014, 17h46
  4. selection en fonction du mois à cheval sur 2 années
    Par Tommy57 dans le forum Développement
    Réponses: 6
    Dernier message: 06/07/2010, 22h09
  5. excel VBA comment recopier sur plusieurs feuilles
    Par floflo2006 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2005, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo