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 :

Macro qui calcule la différence de date


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
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut Macro qui calcule la différence de date
    Bonjour,

    Je sollicite votre aide aujourd'hui parce que je suis bloqué sur la résolution d'un problème, voilà dans un onglet Excel, j'ai 5 colonnes ('nom; prénom;matricule;code formation et date de formation'). Je rajoute une sixième colonne qui me permets de calculer la différence entre la date d'aujourd'hui et la date de formation déjà saisi (colonne 5). Mais j'ai quelques personnes qui ont fait plusieurs fois la formation à des dates différentes, ce qui m'intéresse est uniquement la dernière date donc je souhaite afficher après uniquement la différence entre la date d'aujourd'hui est la dernière effectuée par le salarié. C'est une macro que je veux mettre en place qui me calcule la différence de date en nombre de jours par personnes pour leurs dernières dates de formations.
    Je vous poste le fichier pour comprendre plus la demande.
    Par avance merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    NbJour=DateDiff("D",Date1,Date2)

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    Merci rdurupt pour la rapidité de votre réponse mais je n'ai pas trop compris, concrètement je vous joint ce que je souhaite obtenir par des macros pour ensuite les affecter à des boutons.Nouveau Feuille de calcul Microsoft Excel.xlsx

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Une proposition avec utilisation d'un dictionnaire
    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
    Option Explicit
    Sub Indicateur()
    Dim Dico, k, i
    Dim n As Integer
    Dim C As Range
        Set Dico = CreateObject("Scripting.dictionary")
        With Worksheets("Feuil1")
            For Each C In .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
                If Not Dico.Exists(C.Value) Then
                    Dico.Add C.Value, C.Offset(0, 2).Value
                Else
                    If C.Offset(0, 2).Value > Dico.Item(C.Value) Then
                        Dico.Item(C.Value) = C.Offset(0, 2).Value
                    End If
                End If
            Next C
            k = Dico.keys
            i = Dico.items
            For n = 0 To Dico.Count - 1
                For Each C In .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
                    If C = k(n) And C.Offset(0, 2) = i(n) Then
                        C.Offset(0, 3) = Date - i(n)
                    End If
                Next C
            Next n
        End With
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    Merci gFZT82, ça marche bien sur l'exemple demandé, en essayant d'adapter le code sur mon fichier de base qui contient 1000 ligne (tout un effectif) j'ai "erreur 13 incompatibilité de type " sur la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C.Offset(0, 3) = Date - i(n)
    sachant que la date de formation se trouve sur la colonne "H" et mon calcul d'indicateur sur la colonne "M".
    Est ce que c'est possible de m'expliquer aussi le code dictionnaire.
    Par avance Merci

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Le dictionnaire permet d'obtenir la liste des matricules sans doublon.
    A chaque clé (matricule), on associe la date de formation la plus récente.

    Voici le code adapté à la structure de ton classeur avec quelques commentaires :
    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
     
    Option Explicit
    Sub Indicateur()
    Dim Dico, k, i
    Dim n As Integer
    Dim C As Range
        Set Dico = CreateObject("Scripting.dictionary")
        With Worksheets("Feuil1")
            'On balaye tous les matricules
            For Each C In .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
                'Si le matricule n'est pas noté dans le dictionnaire
                If Not Dico.Exists(C.Value) Then
                    'On ajoute le matricule (clé) dans le dictionnaire avec la date de formation associée (item).
                    Dico.Add C.Value, C.Offset(0, 5).Value
                Else
                    'Sinon (cas où la matricule a déjà été noté), si la date de formation associée est plus récente que celle notée dans le dictionnaire (item)
                    If C.Offset(0, 5).Value > Dico.Item(C.Value) Then
                        'alors, on remplace l'item par la date de formation la plus récente
                        Dico.Item(C.Value) = C.Offset(0, 5).Value
                    End If
                End If
            Next C
            k = Dico.keys
            i = Dico.items
            For n = 0 To Dico.Count - 1
                For Each C In .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
                    If C = k(n) And C.Offset(0, 5) = i(n) Then
                        C.Offset(0, 10) = Date - i(n)
                    End If
                Next C
            Next n
        End With
    End Sub
    Cordialement.

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

Discussions similaires

  1. Calcul de différence de dates
    Par chronos_ dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/07/2013, 11h12
  2. [MySQL] Calcul de différence de dates avec BDD
    Par HAbroc dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/05/2012, 17h11
  3. [XL-2007] Macro qui calcule la moyenne du mois
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/05/2011, 21h19
  4. [XL-2007] macro qui identifie cellules avec aucune date
    Par gym2003 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/10/2010, 13h41
  5. Réponses: 3
    Dernier message: 12/05/2009, 19h43

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