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 deux heure sur Excel en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de pite0611
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 62
    Par défaut Soustraire deux heure sur Excel en VBA
    Bonjour,

    Voici mon problème: Je souhaiterai soustraire deux heures différentes dans deux cellules différentes (A1, A2 par exemple) et afficher le resultat dans une autre cellule (ex: A3). Le format de l'heure est hh:mm (ex: 9:06). Tout ceci en VBA bien-sur, pouvez-vous m'aider svp ?..

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Un peu de lecturehttp://boisgontierjacques.free.fr/pa...tionsDates.htm
    Extrait:
    DateDiff(intervalle,Début,Fin)

    Donne la différence entre 2 dates.

    MsgBox DateDiff("yyyy", #9/10/2000#, Date)

  3. #3
    Membre confirmé Avatar de pite0611
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 62
    Par défaut
    Tout d'abord, merci de votre rèponse.
    J'ai créé un programme tout simple cependant je souhaite que au lieux qu'il s'affiche en MsgBox je souhaiterai qu'il s'affiche dans la colonne C1. Pouvez-vous m'aider ?
    voici mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test() 
    Dim HDeb As Date, HFin As Date, HDif As Date 
    HFin = Range("A1" ).Value 
    HDeb = Range("B1" ).Value 
    HDif = HFin - HDeb 
    MsgBox HDif 
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par pite0611 Voir le message
    je souhaiterai qu'il s'affiche dans la colonne C1. Pouvez-vous m'aider ?
    (C1 est une cellule pas une colonne)
    De la même manière que tu récupère la valeur de la cellule A1 ici: HFin = Range("A1" ).ValueTu peux écrire en C1: Range("C1" ).Value = HDif
    ATTENTION, dans ton post initial tu parlais de différence en heure et je ne suis pas sûr que HDif = HFin - HDeb donne le résultat en heure.
    Je te conseille à nouveau d'utiliser datediff, cf le tuto

  5. #5
    Membre confirmé Avatar de pite0611
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 62
    Par défaut
    Excusez-moi pour la faute et sinon le programme ne fonctionne pas..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub j()
    Dim HDeb As Date, HFin As Date, HDif As Date
    HFin = Range("A1").Value
    HDeb = Range("B1").Value
    HDif = HFin - HDeb
    Range("C1").Value = HDif
    End Sub
    Il me surligne la ligne, je ne comprend pas pourquoi !

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Effectivement il n'aime pas cette ligne et je ne sais pas pourquoi.
    Tu peux contourner le problème en écrivant le calcul directement sans passer par des variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub j()
    Range("C1").Value = Range("A1").Value - Range("B1").Value
     End Sub

  7. #7
    Membre confirmé Avatar de pite0611
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 62
    Par défaut
    Bonjour,

    Finalement, j'ai reussi à créer mon programme souhaité.. Et si je peux aider d'autre personne je vous le partage !
    Ce programme fait en sorte que quand vous rentrer une heure dans la colonne A puis dans la colonne B, le programme soustrais les deux heures et affiche le résultat dans la colonne C. Peut importe si je rentre les heure en cellule A16, B16 (par exemple).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then 
    Target.Offset(0, 1) = Format(Target.Offset(0, -1).Value - Target.Value, "hh:mm") 
    End If 
    End Sub
    Je vous partage le fichier au cas où.

    Cordialement
    Fichiers attachés Fichiers attachés

  8. #8
    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,

    tu peux te passer de Format() si tu as déjà mis le format de cellule voulu dans la colonne.

    Format retourne une chaine et tu veux un numérique. Ca peut être gênant parfois.
    Si tu fais 2:43 - 3:45 tu obtiens 1:02 (ce qui est faux) au lieu des #### habituels signalant un temps négatif.
    eric

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

Discussions similaires

  1. [XL-2003] Plannification sur excel avec VBA ou pas
    Par djoumusic dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/11/2009, 14h56
  2. Cumul d'heures sous excel en VBA
    Par mike11 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/01/2009, 23h59
  3. Colonne sur excel en vba
    Par cyberrage01 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/02/2008, 10h14
  4. comparer deux dates sur excel
    Par kingson dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/04/2007, 09h35
  5. comparer deux colonnes sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/12/2005, 10h50

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