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 :

1. Problème archivage 2. Comment additionner temps 3. Calculer durée entre deux dates [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut 1. Problème archivage 2. Comment additionner temps 3. Calculer durée entre deux dates
    Bonjour à tous,

    Ayant déjà trouvé mon bonheur sur ce forum (Merci Illight si tu me lis ), je me permet de revenir car j'ai encore quelques problèmes sur les macros...

    Cette fois, je vous fait joindre mon fichier Excel pour être le plus clair possible.
    Chaque problème est numéroté donc si vous n'avez pas toutes les solutions mais au moins une, n'hésitez pas, je suis quand même preneur !

    1/ Tout d'abord, je souhaiterai pouvoir archiver mon doc "saisie-pilote" sur la feuille "archivage" tout en décalant les anciens documents archivés vers le bas. Puis remettre un document "vierge" sur la saisie-pilote pour que les pilotes puissent de nouveau compléter le doc.

    2/ Ensuite sur la feuille CalculsMacros, je voudrais additionner le temps en fonction de l'évènement (cause1, cause2, etc.) et que ce fameux temps vienne s'additionner avec les anciens temps du même évènement pour ainsi avoir le temps total de l'évènement.

    3/ Mon troisième problème est que pour ce travail, je dois connaitre le temps total de production (on tourne H24) donc comment réaliser dans une macro, en partant d'un jour X (le jour de commencement des calculs), le nombre d'heure ou de minutes de production ?
    Problème résolu: http://apprendre-excel.fr/calculer-l...tes-sur-excel/

    Mille merci d'avance et, dans l'attente de vous lire,

    Thomas
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    ps: je me permet d'éditer ce message car mon fichier excel n'est pas au bon format.. Comment le convertir en xls ?
    Soit tu l'enregistres au format "Excel 97 - 2003", soit tu le compresses au format ".zip".
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Bonjour Daniel,

    Merci de ta réponse rapide ! J'édite mon premier message dans un soucis de lisibilité.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Il semble que tu n'aies pas testé la macro "Macro1" attachée au bouton "Archivage". Pourquoi fis-tu un double collage, ce qui conduit à recopier le bouton archivage" et à recopier les données source de façon décalée ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Ce sont 2 macros que je n'ai pas supprimées mais aucune des deux ne fonctionnent ...
    Je les ai gardées pour vous faciliter la tache et voir si il faut juste modifier une ou deux lignes.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Pour les points 1 et 2, utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub RecopieArchives()
        With Sheets("Archives")
            .Range("1:31").EntireRow.Insert
            Sheets("saisie-pilote").[A1:H29].Copy
            .[A1].PasteSpecial xlPasteValues
            .[A1].PasteSpecial xlPasteFormats
            .[A1].PasteSpecial xlPasteColumnWidths
        End With
        With Sheets("saisie-pilote")
            .[B4:E4,A10:H29].ClearContents
        End With
    End Sub
    Explique davantage le point 3 s'il te plait, un exemple serait le bienvenu.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Pour l'archivage ça fonctionne très bien au détail près que lors de l'archivage, sur la page "saisie-pilote", je perd la formule =SI(A10>0;(B10*24)-(A10*24);" ") qui donne la durée de l'évènement.

    De plus, je ne vois pas très bien ou la somme des évènements se fait...
    Je m'explique avec un exemple: Pour la cause 1 qui dure 30min le premier jour, si cette même cause dure 30min le lendemain, au total je souhaite avoir une cellule avec la durée totale de la cause 1 soit 1h .

    Un exemple en point 3 est que le jour 0 qui est le point de commencement du calcul (objectif le 1er janvier), et bien le jour 1, il s'est passé 24h.
    Ainsi chaque jour s'incrémente de 24h car nous produisons 24h/24.

    Encore merci pour votre aide!

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Voici la macro correspondant au point 1. Pour les deux autres à quel moment le calcul doit-il se déclencher ?
    Pour le point 3, sur quelle feuille est-ce que je dois intervenir? donne un exemple avec les cellules impactées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub RecopieArchives()
        With Sheets("Archives")
            .Range("1:31").EntireRow.Insert
            Sheets("saisie-pilote").[A1:H29].Copy
            .[A1].PasteSpecial xlPasteValues
            .[A1].PasteSpecial xlPasteFormats
            .[A1].PasteSpecial xlPasteColumnWidths
        End With
        With Sheets("saisie-pilote")
            .[B4:E4,A10:B29,D4:H29].ClearContents
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    J'ai modifié la zone du .ClearContents mais sinon ta macro fonctionne à merveille!

    Le point 2: A la feuille CalculsMacros, dans la cellule "Durée totale" en "E4", je voudrais que la durée de l'évènement marqué à gauche ("C4") s'additionne avec toutes les durées du même évènement. Ainsi on peut savoir à une date précise combien de temps un évènement à bloqué la chaine de production. Les calculs se déclenchent une fois que la durée ainsi que la nature de l'évènement à été renseigné par le pilote.

    Exemple: Jour 5, la cause 1 a duré au total (J1+J2+J3+J5) 30min.
    Le jour 6 la cause 1 a encore bloqué la chaine pendant 10min. Pilote renseigne le temps de début et d'arrêt de l'évènement en "A10","B10" de la feuille "saisie pilote" et choisi la cause1. On aura donc sur la feuille CalculsMacros une durée totale de 40min.


    Point 3: En "I3" sur la feuille CalculsMacros, le temps total de production doit y être renseigné pour mes calculs prochain. Il faudrait donc soit une macro soit une formule pour incrémenter une journée toutes les 24h.


    J'espère avoir été le plus clair possible..!

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Dans le module de la feuille saisie-pilote, j'ai mis le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Long
        If Target.Column < 5 And Application.CountA(Cells(Target.Row, 1).Resize(, 8)) = 4 Then
            With Sheets("CalculsMacros")
                Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                .Cells(Ligne, 1) = Cells(Target.Row, 3)
                .Cells(Ligne, 3) = Cells(Target.Row, 4)
                .Cells(Ligne, 5) = Application.SumIf(.[C:C], .Cells(Ligne, 3), .[A:A])
            End With
        End If
    End Sub
    Il ajoute systématiquement une ligne sur la feuille "CalculsMacros". Est-ce ce que tu veux, ou est-ce qu'il doit n'y avoir qu'une ligne par cause.
    Tu as modifié ton message initial et tu as mentionné qu'il est résolu. Est-ce le cas ? Sinon, je n'ai pas compris. Il va me falloir des exemples concrets.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    J'ai demandé de l'aide externe et on m'a dit que dans la page CalculsMacros, je devrais lister tous les évènements possible (Cause1, Cause2, Cause3, Autre) car cela serait plus simple à comptabiliser.

    J'ai modifié le document (en pièce jointe) mais comment faire pour calculer la durée totale d'un évènement alors qu'il est sur plusieurs tableaux (les archives + la saisie pilote) ? J'ai essayé avec la fonction =RECHERCHEV, =RECHERCHEH sans résultat..

    Pour le point 3, effectivement il est résolu. En modifiant le titre du sujet (qui n'était pas assez explicite) j'ai complété le point 3 avec la source qui m'avais aidé pour les futurs lecteurs qui se posent la même question que moi !
    Fichiers attachés Fichiers attachés

  12. #12
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut comment additionner temps
    bonjour,

    je ne réponds pas sur le code. Daniel plus affuté que moi dans ce domaine le fera beaucoup mieux.

    en revanche, l'oeil neuf se pose des questions sur tes feuilles Excel.

    l'aide est notoirement insuffisante.

    tu trouveras mes commentaires sur le fichier.

    Cordialement,
    Fichiers attachés Fichiers attachés

  13. #13
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Bonjour Nibledispo,

    Tout d'abord merci d'avoir consacré de ton temps pour jeter un oeil sur mon fichier excel .
    Au niveau de tes commentaires, il faut savoir que les équipes de quart utilisent déjà un document du même modèle en format papier. Ils savent donc comment le compléter. Et ils n'ont pas accès à la feuille CalculsMacros.
    Mais je tiens compte des autres remarques qui sont pertinentes et aussi qu'une journée c'est 24h et non 60 !

    Cordialement,

    Blend

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Mets cette macro dans le module de la feuille "saisie-pilote". Lorsque les colonnes A, B et D sont remplies, les données sont automatiquement reportées sur la feuille "CalculsMacros" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Variant
        If Target.Column < 5 And Application.CountA(Cells(Target.Row, 1).Resize(, 8)) = 4 Then
            With Sheets("CalculsMacros")
                Ligne = Application.Match(Cells(Target.Row, 4), .[A:A], 0)
                If Not IsNumeric(Ligne) Then Ligne = 7
                .Cells(Ligne, 3) = .Cells(Ligne, 3) + Cells(Target.Row, 3)
            End With
        End If
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  15. #15
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Bonjour Daniel.C,

    Un grand merci cela fonctionne très bien !

    Un seul bémol, serait-il possible que vous me l'expliquiez ? Qq commentaires suffisent à côté des lignes de code. Car à la fin de ce projet il y aura peut-être une 100aine de causes (contre 4 ici !) et donc je devrais modifier cette macro.

    Je viens aussi de remarquer que la somme de la cause 3 n'est pas correcte. En pièce jointe le fichier que j'ai complété avec des valeurs "test".
    Fichiers attachés Fichiers attachés

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Voici la macro commenté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
    'la macro se déclenche à chaquee fois qu'une valeur est entrée dans une cellule de la feuille
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Variant
        'si la saisie concerne une colonne inférieure à 5 et que les saisies des colonnes A, B et D
        'ont été faites
        If Target.Column < 5 And Application.CountA(Cells(Target.Row, 1).Resize(, 8)) = 4 Then
            With Sheets("CalculsMacros")
                'on cherche sur la feuille "CalculsMacros" le numéro de ligne correspondant à l'évènement
                Ligne = Application.Match(Cells(Target.Row, 4), .[A:A], 0)
                'si  on ne le trouve pas, on affecte le n° de la ligne "Autres"
                'on peut aussi rechercher ce n°
                If Not IsNumeric(Ligne) Then Ligne = 7
                'on additionne le nombre de la colonne D de la feuille "saisie-pilote" dans la colonne C
                ' dela feuille "CalculsMacros"
                .Cells(Ligne, 3) = .Cells(Ligne, 3) + Cells(Target.Row, 3)
            End With
        End If
    End Sub
    Je ne comprends pas ce qu'il y a d'erroné dans les additions. Pour moi, la seule cause correcte est justement "Cause 3". Peux-tu me dire ce que tu saisis, les feuilles étant vides et ce que tu veux obtenir sur la feuille "CalculsMacros".
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  17. #17
    Membre à l'essai
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Sur la feuille CalculsMacros je souhaite obtenir la calcul total d'une cause recherché. Je voulais donc prendre en compte les durées archivées et c'était là que je bloquais car à chaque archivage je perdais mes calculs. (Par exemple Durée Cause1 pendant le Jour1 + Durée cause1 J2 + Durée cause1 J3 + ...)
    Mais avec ta macro, cela fonctionne très bien et l'erreur sur la cause3 était juste due à une erreur de ma part .

    J'ai modifié quelques valeurs et autre mais je n'aurai jamais réussi tout ce projet sans ton aide ! Mes cours de macros commencent seulement dans un mois, je compte bien revenir sur ce forum en tant que conseiller cette fois-ci..!

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

Discussions similaires

  1. je cherche comment obtenu le nbr de jours entre deux dates
    Par 21247692 dans le forum Développement
    Réponses: 2
    Dernier message: 08/10/2009, 10h05
  2. Comment compter les jours par mois entre deux dates
    Par Doo89 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/01/2008, 21h21
  3. Réponses: 2
    Dernier message: 29/05/2006, 19h16
  4. comment obtenir l’intervalle de mois entre deux date
    Par looc 6699 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/02/2005, 11h08

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