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

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

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    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 à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    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
    Points : 3 974
    Points
    3 974
    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 à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    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
    Points : 3 974
    Points
    3 974
    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.

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

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    'gFZT82' je ne sais pas comment je peux vous remercier ça marche à merveille, c'est parfait, si vous le permettez je demande juste une dernière chose:
    après ça je vais faire une petite interface avec 'userform' : bouton rechercher qui me permets de mettre le sois le nom ou prénom ou matricule de quelqu'un ensuite dans une autre cas appelé 'indicateur' j'aurais donc le résultat.
    Ma question est la suivant: puisque parfois j'ai la même personne qui se répète plusieurs fois, comment je peux renvoyer uniquement la date qui contient l'indicateur puisque les autres déjà sont vides.

  8. #8
    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
    Points : 3 974
    Points
    3 974
    Par défaut
    Si tu utilises la feuille telle que présentée, cela ne doit pas poser de problème.
    La recherche devra se faire sur le matricule car celui-ci est unique (ce qui ne sera peut-être pas le cas du nom et du prénom).
    Il faudra balayer toutes les lignes et effectuer un test sur le matricule et la présence de l'indicateur.

    Cordialement.

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

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    oui j'utilise la même feuille, donc si j'ai bien compris je peux faire une recherche par Matricule et le résultat doit donner matricule et indicateur sinon par nom et prénom ce sera pas possible.
    Je dois utiliser quel code pour le balayage?

    Cordialement.

  10. #10
    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
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Si tu as réellement l’intention de faire un traitement avec Userform tel que tu l’as décrit, il va falloir que tu t’attelles sérieusement à l’apprentissage de VBA.
    Voici un exemple pour commencer.
    Bon courage.

    A+
    Fichiers attachés Fichiers attachés

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

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup depuis quelques jours j'essaye de faire de l'autoformation pour bien assimiler VBA.

+ 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