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 :

Mise à jour de date en excluant les dimanches


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut Mise à jour de date en excluant les dimanches
    Bonjour à tous,
    je travaille actuellement sur la réalisation d'un planning de production qui est mis à jour quotidiennement. A chaque mise à jour, je dois remettre :

    • B1 à la date d'aujourd'hui
    • C1 à J+1
    • D1 à J+2
    • Etc


    Pour l'instant, voici mon code (ma boucle saute 6 car j'ai fusionné des cellules de ma ligne n°1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sheets("Planning").Range("B1").Value = Format(Now(), "dd mmm")
    For j = 8 To 168 Step 6
     
            Sheets("Planning").Cells(1, j).Value = DateAdd("ww", j / 6, Date)
     
    Next j
    MAIS je veux exclure uniquement les dimanches et étant donné que B1 peut être n'importe quel jour de la semaine, je ne vois pas comment faire.
    Pourriez-vous m'aider ?
    Merci d'avance.


  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Citation Envoyé par david-lt Voir le message
    MAIS je veux exclure uniquement les dimanches et étant donné que B1 peut être n'importe quel jour de la semaine, je ne vois pas comment faire.
    Comme ceci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sheets("Planning").Range("B1").Value = Format(Now(), "dd mmm")
    col = 3
    For j = 3 To 168 Step 1
        If Application.Weekday(Date + j - 2, 2) < 7 Then
            Sheets("Planning").Cells(1, col).Value = DateAdd("d", j - 2, Date)
            col = col + 1
        End If
    Next j

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Bonjour anasecu,
    je viens d'essayer ton code mais il me met "une erreur définie par l'application ou par l'objet" sur la ligne n°5 et je ne vois pas pourquoi.

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    re
    Tu fonctionnes avec qu'elle version ?

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Je travaille avec la 2003.

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    re
    Pourtant cela fonctionne en 2003.
    Essaies de modifier ta ligne ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Sheets("Planning").Cells(1, col).Value = Date + j - 2

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    re,
    l'erreur 1004 est toujours là

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    re
    Tu as mis la macro dans un module ?
    Cela vient sans doute de son mauvais positionnement.

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Oui, je l'ai mis à la suite de ma première macro pour les dates.
    Je vais essayer plusieurs positions dans mon module.

  10. #10
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    les cellules ne sont pas verrouillées ?

    essaye en préfixant la fonction Date par vba


  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    J'ai essayé plusieurs positions dans le module mais cela ne change rien au problème.

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    essaye en préfixant la fonction Date par vba
    Bonjour Joe,
    lorsque tu dis en préfixant la fonction Date, tu veux dire que je formate mes cellules en format "Date" au préalable ?

  13. #13
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Non, c'est dans tes lignes de code

    Date est une fonction existante dans la bibliothèque VBA mais aussi Windows (raccourci de simplification)
    Parfois, à l'exécution et suivant l'OS, la fonction n'est pas recherchée côté VBA et échoue.
    C'est pourquoi, je prend toujours l'habitude de préfixer ces fonctions

    VBA.Date
    VBA.Mid
    VBA.Left
    etc...
    la saisie intuitive (intellisense) ta montrera l'ensemble de ces fonctions si tu tape "VBA."

    au lieu d'écrire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MaDate As Date
    MaDate = Date
    j'écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MaDate as Date
    MaDate = VBA.Date

    pas sûr que ce soit ton problème, mais ça ne coute rien d'essayer

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    les cellules ne sont pas verrouillées ?
    Tu n'as pas répondu. Ta feuille n'est pas protégée ?
    eric

  15. #15
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Planning").Range("B1").Value = Format(Now(), "dd mmm")
    est une erreur fondamentale.
    La fonction Format retourne une chaîne de caractères et non une date. On ne peut appliquer des fonctions de date directement à une chaîne de caractères.
    Il ne faut pas alimenter B1 avec cela, mais avec une date. Si l'on veut n'afficher cette date qu'au format "dd mm", c'est le format de la cellule B1, qu'il faut définir à ce format.
    Toutes les cellules à traiter doivent également être formatées en date.
    Je vous laisse faire ...

  16. #16
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim D As Integer
    Sheets("Planning").Range("B1").Value = Format(Now(), "dd mmm")
    For j = 8 To 168 Step 6
        D = D + 1
        If Weekday(Now() + D) = 1 Then D = D + 1
        Sheets("Planning").Cells(1, j).Value = Format(Now() + D, "dd mmm")
    Next j

  17. #17
    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
    1) Mettre la cellule B1 au format (format de cellule) "dd mm" et la formule 2) mettre la formule suivante en C1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(JOURSEM(B1;2)<>6;B1+1;B1+2)
    et étirer cette formule vers la droite autant que de besoin.
    Voilà voilà

    EDIT : et si l'on tient à faire cela dynamiquement : écrire ces formules depuis VBA, ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range(Cells(1, 2), Cells(1, 170)).NumberFormat = "dd mm"
    Range("B1").Formula = "=TODAY()"
    Range(Cells(1, 3), Cells(1, 170)).Formula = "=IF(WEEKDAY(B1,2)<>6,B1+1,B1+2)"
    Et c'est tout.

  18. #18
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Re,

    je viens d'essayer ton code dysorthographie, j'obtiens exactement ce que je voulais. C'est au top !

    J'ai également testé ton code unparia et il me met bien la date d'aujourd'hui dans B1, par contre les autres cellules je me retrouve au 02 janvier partout.

    En tout cas merci à tous pour votre aide.

  19. #19
    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
    par contre les autres cellules je me retrouve au 02 janvier partout.
    Je suis curieux de voir le code que tu as écrit ! (un copié/collé exact de ce que tu as écrit).

  20. #20
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir,

    Citation Envoyé par unparia Voir le message
    un copié/collé exact de ce que tu as écrit
    Mais non la rentrée des classes est faite et ce n'est pas beau de copier alors l'on crée mais cela ne fonctionne pas ;-)
    Autant laisser travailler les artistes mais je ne suis pas optimiste pour les résultats du codage ;-)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/01/2013, 11h44
  2. Réponses: 2
    Dernier message: 20/11/2012, 14h55
  3. Réponses: 2
    Dernier message: 05/02/2007, 10h19
  4. Mise à jour de date sur base MySQL
    Par tristus dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 14/01/2007, 13h47

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