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 :

Ajouter un nombre de semaines à une date [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Ajouter un nombre de semaines à une date
    Bonjour,
    J'ai un formulaire contenant une date (ex : date de début de stage) et une zone de texte dans laquelle je tape la durée du stage en semaines. Je voudrais que dans une nouvelle zone de texte s'affiche la date de fin de stage.
    J'ai essayé avec la fonction DateAdd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     v_durée_stage = f_gestion_contacts.txt_durée_stage
            v_date_stage = f_gestion_contacts.txt_date_stage
            v_date_fin_stage = cnum(v_date_stage) + (v_durée_stage * 7)
            DateAdd("w", v_durée_stage,v_date_stage)
           MsgBox "voilà la date fin" & Format("dd/mm/yy", v_date_fin_stage)
    Mais cela ne fonctionne pas du tout.
    Merci pour votre aide.


    Cordialement
    Chris

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 857
    Points : 28 777
    Points
    28 777
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour ajouter des semaines avec DateAdd, l'argument est "ww" et pas "w"
    Voici un code avec une date en A2 en B2 le nombre de semaine et en C2 le résultat.
    Code à adapter suivant la demande spécifique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim DateDebut As Date, DateFin As Date
     DateDebut = Range("A2")
     DateFin = DateAdd("ww", Range("B2"), DateDebut)
     ' ou DateFin = DateAdd("ww", Range("B2"), Range("A2"))
     MsgBox DateFin
    Ou plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Range("C2") = DateAdd("ww", Range("B2"), Range("A2"))
     MsgBox Range("C2")
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Essaies comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim v_durée_stage As Integer
    Dim v_date_stage As Date, v_date_fin_stage As Date
     
    v_durée_stage = Val(f_gestion_contacts.txt_durée_stage)
    If IsDate(f_gestion_contacts.txt_date_stage) Then v_date_stage = CDate(f_gestion_contacts.txt_date_stage)
    v_date_fin_stage = DateAdd("ww", v_durée_stage, v_date_stage)
    MsgBox v_date_fin_stage
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Ajout d'un nombre de semaines à une date
    Ça fonctionne nickel.
    Merci beaucoup.
    Bien cordialement
    Chris

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Toujours les numéros de semaine
    Maintenant il me faut écrire tout ça dans la feuille planning, et cette fois je dois renvoyer les numéros de semaines pour le début et la fin de stage.
    Actuellement j'ai dans mes formules, elles fonctionnent très bien :
    - pour la date début en D4, la formule du n° de semaine en E4 est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI($D4<40543;0;(NO.SEMAINE($D4;2)-1))
    - pour la date fin en F4, la formule du n° de fin de semaine en G4 est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI($F4>40908;52;(NO.SEMAINE($F4;2)-1))
    Cependant je voudrais inscrire mon nouveau stagiaire "automatiquement" et j'ai essayé de transcrire ça en VBA, voici le code :
    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
     ActiveCell.Value = v_id
            ActiveCell.Offset(0, 1) = v_id_tuteur
            ActiveCell.Offset(0, 2) = v_service
            'date début stage
            ActiveCell.Offset(0, 3) = v_date_stage
            'numéro de la semaine du début du stage
            v_num_sem_début = WeekNum(v_date_stage)
            ActiveCell.Offset(0, 4) = v_num_sem_début
            'date fin stage
            ActiveCell.Offset(0, 5) = v_date_fin_stage
            'numéro de la dernière semaine de stage
            v_num_sem_fin = WeekNum(v_date_fin_stage)
            ActiveCell.Offset(0, 6) = v_num_sem_fin
            'remplissage du planning semaines 1 à 52
            ActiveCell.Offset(0, 7) = "=IF(AND(R2C>=RC5,R2C<=RC7),LEFT(RC3,1),"""")"
            MsgBox "Le traitement de la feuille planning est terminé !"
    Il me dit que la fonction WeekNum n'existe pas, quand au remplissage des semaines 1 à 52 avec le code de service, par exemple : je voudrais remplir de C les semaines 6 à 12 (selon la durée du stage), là c'est la catastrophe, je me vois mal écrire 52 if pour remplir le tableau.

    Merci pour votre aide.
    Cordialement
    Chris

  6. #6
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Utilise DatePart (regarde l'aide)
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Dte As Date
     
    Dte = "5/4/2011"
    MsgBox DatePart("ww", Dte, vbMonday, vbFirstFourDays)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Remplir un planning selon 2 critères de n° de semaine et d'un service
    Ça fonctionne merci .
    Une dernière petite question enfin pour cette fois !
    Maintenant que j'ai le début et la fin de semaine de mon stage, je voudrai remplir mon planning sur cette durée.
    En ligne 2, colonnes H à BG j'ai mes numéros de semaine,
    et en colonnes :
    C : le nom des services
    E : le début du stage
    et en G : la fin du stage.
    Je souhaite remplir les colonnes H à BG en fonction des sem début et fin de stage par le premier caractère de la colonne service. La formule dans le tableau est, pour mon stagiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ET(H$2>=$E4;H$2<=$G4);GAUCHE($C4;1);"")
    Comment faire pour remplir automatiquement à partir du VBA les colonnes H à BG ?
    D'avance merci
    Chris
    ps : la cerise sur le gâteau serait d'avoir une couleur différente en fonction du service, j'ai conscience d'abuser

  8. #8
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Ci-joint un exemple commenté à adapter à tes besoins
    Attention quand même aux conditions au limites (première semaine de l'année et dernière semaine de de l'année)
    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
    Dim Dd As Date, Df As Date
    Dim Sd As Byte, Sf As Byte, i As Byte
    Dim LastLig As Long, j As Long
     
    With Sheets("Feuil1")                            'à adapter
        LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row    'dernière cellule remplie de la colonne C
        With .Range("H2:BH" & LastLig)               'On efface la plage du planning
            .ClearContents
            .Interior.ColorIndex = xlNone
        End With
        For j = 2 To LastLig
            Dd = CDate(.Range("D" & j).Value)        'date de début en colonne D
            Df = CDate(.Range("F" & j).Value)        'date fin en colonne F
            Sd = DatePart("ww", Dd, vbMonday, vbFirstFourDays)    'N° semaine de de début
            Sf = DatePart("ww", Df, vbMonday, vbFirstFourDays)    'N° semaine fin
            .Range("E" & j).Value = Sd               'on écrit en E le n° semaine de de début
            .Range("G" & j).Value = Sf               'on écrit en G le n° semaine de de fin
            For i = Sd To Sf                         'On boucle et en remplit (semaine 1 en colonne 8:H
                .Cells(j, 7 + i).Value = Left(.Range("C" & j).Value, 1)
                .Cells(j, 7 + i).Interior.Color = RGB(10 * j, Abs(256 - 20 * j), 20 * j)
                'Tu peux colorier le service en colonne C, cette couleur sera reportée dans le planning
                '.Cells(j, 7 + i).Interior.Color = .Range("C" & j).Interior.Color
            Next i
        Next j
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Remplir un planning selon 2 critères de n° de semaine et d'un service
    Cela fonctionne parfaitement.
    Encore merci, tu es vraiment un as .
    Cordialement
    Chris
    ps : en fait, il reste un souci, j'ai un stagiaire qui commence le 15/12/2011 et termine son stage le 31/01/2012.

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

Discussions similaires

  1. Ajouter un nombre de jours à une date
    Par FanFan44 dans le forum Débutez
    Réponses: 1
    Dernier message: 10/07/2013, 13h04
  2. ajouter un nombre de mois à une date
    Par PAYASS59 dans le forum Webi
    Réponses: 11
    Dernier message: 18/03/2010, 15h33
  3. ajouter un nombre de mois à une date
    Par mèmaton dans le forum WinDev
    Réponses: 7
    Dernier message: 22/04/2009, 11h30
  4. Ajouter un nombre de jour à une date
    Par thierry_b dans le forum Général Java
    Réponses: 6
    Dernier message: 10/12/2008, 15h19
  5. Réponses: 2
    Dernier message: 03/01/2006, 14h58

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