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 :

VBA - Incrementation de date selon diverses conditions [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
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2017
    Messages : 25
    Par défaut VBA - Incrementation de date selon diverses conditions
    Bonjour,

    J'ai quelques notion de VBA. Je suis sur la création de ce code depuis plusieurs jours mais je n'arrive à rien...

    Je vous explique... Je souhaite créer un fichier me permettant de planifier des interventions à une personne. Je souhaite qu'elle réalise n interventions par jour sur une semaine de 5 jours.

    J'aimerai rentrer la date de début des interventions, le nombre d'intervention à faire ainsi que le nombre d'intervention par jour.
    En sortie, j'aimerai avoir la liste des jours en fonction du nombre d'intervention par jours définis et sur 5 jours (évitons de travailler le week-end ).

    Je vous mets mon fichier que j'ai commencé ci-dessous. Les jours que je renseigne s'incrémente bien selon le nombre d'intervention par jours mais que pour la première partie...
    Je pense que je n'en suis pas très loin mais je n'y arrive pas...

    Date_ANC.xlsm

    Dans l'attente de vous lire,

    Flomos

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je n'ouvre et n'ouvrirai jamais un classeur tiers et n'ai donc pas ouvert le tien.
    Tu ne nous dis pas :
    - dans quelles colonnes/ou lignes tu rentres :
    - la date de début
    - celle du nombre d'interventions par jour
    etc ...
    - qu'as-tu au moins tenté d'écrire ? (code tenté).
    A ce stade :
    Tu connais (par définition) le nombre d'interventions par jour
    Tu connais le nombre de jours nécessaires pour faire toutes les interventions (simple division)
    Il te reste à faire une simple boucle de pure arithmétique -->>
    regarde ce que fait par exemple ceci sur ta colonne A formatée en date :
    - mets une date valide en A1
    - lance ce code tout bête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For k = 1 To 30
      If Weekday(Range("A1").Value + k, vbMonday) < 6 Then
        Range("A" & k + 1).Value = Range("A1").Value + k
      End If
    Next
    regarde, analyse, comprends et adapte.

    EDIT :
    1) il est bien clair que la date en A1 ne doit être ni un samedi, ni un dimanche (par définition)
    2) si tu veux éviter les lignes blanches en colonne A, c'est également tout bête et également arithmétique, aini -->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x = 0
    For k = 1 To 30
      If Weekday(Range("A1").Value + k, vbMonday) < 6 Then
        Range("A" & k + 1 - x).Value = Range("A1").Value + k
      Else
        x = x + 1
      End If
    Next
    Comme tu peux le constater, je ne fais là que faire appel à l'arithmétique et la logique. Le reste (application en code) n'étant que broutille "accessoire".

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2017
    Messages : 25
    Par défaut
    Bonjour,

    J'ai seulement des notions en arithmétiques et en langages VBA. Le problème provient (encore une fois) de la machine qui tape sur les touches du clavier

    J'ai construit mon tableau comme suit :

    - Date de départ B1 :23/10/2017
    - Nb de d'inter (N_inter) B2 : 60
    -Nb d'inter par jours (I_jour) B3 : 5
    - Nb de jours d'inter (J_inter) B4 : =B2/B3
    -Les dates d'inter apparaissent dans la colonnes "D"

    J'ai adapté légèrement le code que vous m'avez donné afin qu'il soit répété I_jour fois pour chaque date. Cependant, ce code remplace chaque valeur j-1 et s’arrête sur une erreur 1004 "la méthode Range de l'objet _Global à échoué".

    For k = 0 To J_inter
    For I = 1 To Range("B3")
    If Weekday(Range("B1").Value + k, vbMonday) < 6 Then
    Range("D" & k + I - y).Value = Range("B1").Value + k
    Else
    y = y + 1
    End If
    Next I
    Next k

    Merci pour l'aide apporté

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    je ne sais que te dire, sinon que:
    1) l'erreur que tu as ne saurait être provoquée par le code que tu montres
    2) les résultats de ton code ne sont pas ceux attendus (la logique en est d'ailleurs erronée)
    3) l'adaptation directe de mon code à tes cellules donne les résultats attendus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x = 0
    For k = 0 To Range("B4").Value
      If Weekday(Range("B1").Value + k, vbMonday) < 6 Then
        Range("D" & k + 1 - x).Value = Range("B1").Value + k
      Else
        x = x + 1
      End If
    Next
    Etant bien entendu que :
    - la cellule B1 et celles de la colonne D sont bien formatées en Date
    - la cellule B1 contient une date valide et ne corresponde ni à un samedi, ni à un dimanche
    - la cellule B4 est bien formatée en numérique et contient bien une valeur numérique

    Je précise que je viens de prendre la peine de tester mon code sur ma machine --->> sans faille

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Re-moi
    J'ouvre toujours mieux les yeux de bon matin.
    Mon code précédent n'est pas complet, dans la mesure où le nombre total d'interventions n'est pas atteint (du fait de l'incrémentation de k en dépit de non ouvré)
    --->> légère modif pour corriger cet oubli --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    x = 0
    y = Range("B4").Value
    For k = 0 To y + y Mod 5 + 7
      If Weekday(Range("B1").Value + k, vbMonday) < 6 Then
        Range("D" & k + 1 - x).Value = Range("B1").Value + k
      Else
        x = x + 1
      End If
    If k + 1 - x >= Range("B4").Value Then Exit For
    Next
    EDIT :
    et si tu veux être plus complet, regarde ceci, qui indique en colonne E le nombre d'interventions prévu pour chacune des dates (y compris si le nombre total n'est pas un multiple du nombre quotidien)
    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
    x = 0
    y = Range("B4").Value
    For k = 0 To y + y Mod 5 + 7
      If Weekday(Range("B1").Value + k, vbMonday) < 6 Then
        Range("D" & k + 1 - x).Value = Range("B1").Value + k
        Select Case (k + 1 - x) * Range("B3").Value
           Case Is <= Range("B2").Value
              Range("E" & k + 1 - x).Value = Range("B3").Value
           Case Else
              Range("E" & k + 1 - x).Value = Range("B2").Value Mod Range("B3").Value
        End Select
    Else
        x = x + 1
      End If
    If k + 1 - x >= Range("B4").Value Then Exit For
    Next

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2017
    Messages : 25
    Par défaut
    Avec ce code vous dépassez largement mes connaissances en arithmétique et en logique. Il va falloir que je me renseigne pour le comprendre.

    Je souhaite utilisé ces dates pour faire un publipostage. J'ai besoin qu'elles soient répétés le nombre d'inter prévu le jours.
    exemple:
    Date première inter : 23/10/2017 23/10/2017
    Nb d'inter/j : 4 23/10/2017
    23/10/2017
    23/10/2017
    24/10/2017
    24/10/2017
    24/10/2017
    ...

    Avez vous une idée de comment faire cela ?

    J'ai également remarqué que la macro s’arrête le vendredi 29 décembre 2017. Existe t-il une solution pour lui indiquer de continuer en 2018 ?

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

Discussions similaires

  1. VBA : Afficher des lignes selon une condition
    Par mery 20 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/12/2015, 10h42
  2. [XL-2010] Nombre de mois dans une fourchette de dates selon plusieurs conditions
    Par Accessifiante dans le forum Excel
    Réponses: 4
    Dernier message: 18/12/2015, 18h06
  3. [Toutes versions] Calcul moyenne entre deux dates selon condition par vba
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/05/2015, 13h08
  4. VBA regroupement date selon choix option (par jour, par mois)
    Par IndyJones dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/12/2006, 20h06
  5. [VB.net] Générer une date selon condition
    Par WriteLN dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/10/2005, 16h12

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