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 :

soustraire avec fonction workday_intl dans une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut soustraire avec fonction workday_intl dans une macro
    Bonjour,
    Dans mon fichier de plannif,
    j'ai une macro qui me permets de dupliquer une ligne et de changer la date (-1jrs sur la date dupliquée), de faire 1 division et une multiplication dans des colonnes.

    Tout cela fonctionne très bien, cependant je souhaiterai que la date dupliquée prenne en compte les week-end et jours de fermeture de l'entreprise (feuille fermeture de mon fichier).

    J'ai compris la fonction mais je n'arrive pas à l'appliquer dans cette macro (que je n'ai pas faite). Je suppose que ce doit être au niveau de cette ligne de commande
    ActiveCell.FormulaR1C1 = "=R[1]C-1" 'modif du jours

    En fouillant un peu, j'ai tenté d'intégrer cela, mais ça bloque sur Star date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim StartDate As Date, Days As Long, Week As String, Holydays As Range
     
      StartDate = R[1]
      Days = 2
      Week = "0000001"
      Set Holydays = Range("Fermeture[Date]")
     
     ActiveCell.FormulaR1C1 = "=CDate(Application.WorkDay_Intl(StartDate, Days, Week, Holydays))" 'modif du jour

    Pouvez-vous m'aider à l'intégrer SVP ?

    Voici la macro
    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
    Sub Test()
     
    ' Boucle 07HA Debut
     
        Range("A4").Select
        RechercheFamille = Cells.Find(what:="07HA", After:=ActiveCell, LookIn:=xlFormulas, lookat _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
        nbOccurences = Application.CountIf(Range("B4:B3000"), "07HA")
     
        While nbOccurences > O
                Selection.Offset(1, 0).Select
                ActiveCell.EntireRow.Select
                Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                Selection.FillDown 'Range(LC + 1).Select
                Selection.Offset(-1, 0).Select
                ActiveCell.FormulaR1C1 = "=R[1]C-1" 'modif du jours
                ActiveCell.Offset(0, 2).Select
                ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]" 'formule nombre de barre pour l'of
                Selection.NumberFormat = "0.000"
                Selection.Offset(0, 5).Select 'déplacement Colonne +5 histo Range("H264").Select
                ActiveCell.FormulaR1C1 = "=R[1]C*2" 'nbre de pc par barre x2
                Selection.Offset(1, -6).Select 'Range("B265").Select
                ActiveCell.FormulaR1C1 = "3"
                Selection.Offset(1, 0).Select 'Range("B266").Select
                nbOccurences = nbOccurences - 1
        Wend
    ' Fin Boucle 07HA
    End Sub

    Je vous joins le fichier excel en question
    Dev plannif.xlsm

    Merci d'avance pour votre aide

  2. #2
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 987
    Par défaut
    Hello,

    pour moi ça n'est pas clair...
    Quel est le but de la macro "qui me permets de dupliquer une ligne et de changer la date" ?
    A quoi sert cette duplication et le fait d'enlever un jour ?

    "je souhaiterai que la date dupliquée prenne en compte les week-end et jours de fermeture de l'entreprise"
    Il faut faire quoi sur la date dupliquée avec les WE et jour de fermeture ?

    N'essayez pas de raisonner en terme de macro mais de fonctionnalités dont vous avez besoin.
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut
    bonjour,

    Merci de prendre le temps de lire mon sujet.

    Le but de la partie de la macro qui duplique la ligne et modif la date, sert à la planification pour la chaine avec double traitement.

    nous avons un ERP de M.... et nous essayons de trouver des astuces pour nous en sortir.

    les pièce avec double traitement sont insérée dans la famille 07HA (qui correspond au 1er traitement), avec dans la fiche article le Nbre de pièce par barre du 2e traitement (03) (on en mets 2 fois moins sur la barre) et la date est celle de l'ARC final.

    Par conséquent, le fait de dupliquer la ligne et de faire les calcul qui vont bien permettent de répartir la charge par chaine. par contre, la date doit être avant la date de la ligne dupliquée.
    Actuellement, on enlève 1 jour, sauf que l'entreprise ne travaille pas le WE, ni les jours ferié et elle a des jours de fermeture. donc il faudrait en tenir compte.

    j'espère avoir été claire.

    cdt

  4. #4
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 013
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    d'abord, le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        RechercheFamille = Cells.Find(what:="07HA", After:=ActiveCell, LookIn:=xlFormulas, lookat _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
    ne fonctionnera que si 07HA existe, sinon il plantera

    ensuite, que signifie

    Quel est le but ?
    :bug:

  5. #5
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 987
    Par défaut
    re,

    si j'ai bien compris... vous voulez revenir un jour en arrière par rapport à la date de la colonne A mais si ça tombe un WE ou un jour de fermeture il faut remonter jusqu'au précédent jour ouvré

    Si c'est bien ça 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub Test()
    '
    ' Macro1 Macro
    ' Trie sur Chaine
    '
        Dim iRowL As Integer
            iRowL = Cells(Rows.Count, 1).End(xlUp).Row
            ' Range("A4:S" & iRowL).Select
    '
        ActiveWorkbook.Worksheets("Test extract").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Test extract").Sort.SortFields.Add Key:=Range("B3:B376") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Test extract").Sort
            .SetRange Range("A4:S" & iRowL)
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Cells.Replace what:=",", Replacement:=".", lookat:=xlPart, SearchOrder _
            :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
     
        Dim nbOccurences As Integer
        Dim RechercheFamille As String
    ' Boucle 07HA Debut
        Range("A4").Select
        RechercheFamille = Cells.Find(what:="07HA", After:=ActiveCell, LookIn:=xlFormulas, lookat _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
        nbOccurences = Application.CountIf(Range("B4:B3000"), "07HA")
     
        While nbOccurences > O
                Selection.Offset(1, 0).Select
                ActiveCell.EntireRow.Select
                Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                Selection.FillDown 'Range(LC + 1).Select
                Selection.Offset(-1, 0).Select
     
    ' *********************************************************************************
    '            ActiveCell.FormulaR1C1 = "=R[1]C-1" 'modif du jours
                ActiveCell.FormulaR1C1 = "=WORKDAY.INTL(R[1]C-1,-1,1,Fermeture[Date])"
    ' *********************************************************************************
     
                ActiveCell.Offset(0, 2).Select
                ActiveCell.FormulaR1C1 = "=RC[4]/RC[5]" 'formule nombre de barre pour l'of
                Selection.NumberFormat = "0.000"
                Selection.Offset(0, 5).Select 'déplacement Colonne +5 histo Range("H264").Select
                ActiveCell.FormulaR1C1 = "=R[1]C*2" 'nbre de pc par barre x2
                Selection.Offset(1, -6).Select 'Range("B265").Select
                ActiveCell.FormulaR1C1 = "3"
                Selection.Offset(1, 0).Select 'Range("B266").Select
                nbOccurences = nbOccurences - 1
        Wend
    ' Fin Boucle 07HA
     
    End Sub
    je n'ai rien changé d'autre que la formule "ActiveCell.FormulaR1C1 = "=R[1]C-1" 'modif du jours" pour la remplacer par ActiveCell.FormulaR1C1 = "=WORKDAY.INTL(R[1]C-1,-1,1,Fermeture[Date])" (et j'ai adapté le nom de la feuille à l'exemple) mais elle pourrait être largement remodelé, ne serait-ce que pour éviter les sélections
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut
    Merci beaucoup, je l'ai adapté à toute ma macro.

    quand tu me parles de la remodeler ce serait pour l'alléger?

    la macro entière reprend la boucle 07HA pour 07HS 07MA 07MS, dans une macro plannif et une macro ARC.

    Les traitement que nous avons le moins ce sont 07MA et 07MS, c'est pour cela que je fais commencer la macro à partir de A4 car pour éviter un bug je les fais toujours apparaitre
    Nom : Capture d’écran 2025-02-03 222241.png
Affichages : 60
Taille : 8,2 Ko

    si le coeur t'en dit je veux bien que tu retravailles la macro.

    en attendant, je te souhaite une bonne soirée.

  7. #7
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 987
    Par défaut
    Si vous voulez que je reprenne vos macro autant le faire sur le fichier réel avec toutes les données, non ?
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut
    Bonjour,

    si la proposition tient toujours je vous envoie le fichier


    DEV-Extraction PMI.xlsm

    Je voulais vous envoyer mon autre fichier mais je ne peux pas vous le mettre ici, il me met échec quand je le sélectionne.
    Comment est ce que je peux vous l'envoyer?

    bon dimanche

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Par défaut
    voici le lien pour l'autre fichier

    https://www.cjoint.com/c/OBqmCnXEF6n

    merci encore pour l'aide

  10. #10
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 987
    Par défaut
    Ok, je regarde ça au plus tôt
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

Discussions similaires

  1. [Excel-2013] Souci avec la fonction "Decaler" dans une macro
    Par rvaysse dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/03/2014, 10h17
  2. Fonction BENTREE dans une macro
    Par isabelle b dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/05/2008, 01h51
  3. Utiliser une fonction excel dans une macro et proprièté range
    Par bebel9313 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/08/2007, 15h25
  4. Réponses: 10
    Dernier message: 18/04/2007, 18h17
  5. Fonction SendKeys dans une macro
    Par freya91 dans le forum Access
    Réponses: 2
    Dernier message: 06/06/2006, 11h27

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