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 :

Correspondance entre VBA et macro Excel 4 (problème heures)


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
    employé banque
    Inscrit en
    Août 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : employé banque

    Informations forums :
    Inscription : Août 2014
    Messages : 16
    Par défaut Correspondance entre VBA et macro Excel 4 (problème heures)
    Bonjour à tous,
    Je sèche sur un problème depuis 15 jours et je n'y arrive pas (je suis aussi novice en VBA).

    J'ai une macro qui tourne dans un fichier (macro excel 4) qui récupère 6 chiffres provenant d'une boîte de dialogue et transforme les chiffres avec la fonction T puis l'inscrit dans une feuille excel sous le format personnalisé MM:SS,00 (minutes:secondes,centièmes). Cela donne comme affichage dans la cellule ex: 12:45,87.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     =STXT(A4;1;2)
     =STXT(A4;3;2)
     =STXT(A4;5;2)
     =T("00:"&T(A8)&T(":")&T(A9)&T(",")&T(A10))
     =FORMULE(MACRO!A12)
    J'essaie de faire de même avec VBA mais là l'inscription dans la feuille excel se reporte 00:12:45,87 et ne respecte pas le format personnalisé MM:SS,OO. Il y a aussi avec ce code une erreur de calcul (dans la feuille il y a un calcul de temps tps1-tps2=), voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Recup, ab, cd, ef, Result
     
    Recup = TextBox_numero    ' les chiffres tapés dans textbox_numero
    ab = Mid(Recup, 1, 2)    ' Renvoie les 2 premiers chiffres (ex : 11).
    cd = Mid(Recup, 3, 2)    ' Renvoie "les 2 suivants (ex : 22).
    ef = Mid(Recup, 5, 2)   ' Renvoie les 2 derniers (ex : 33).
     
    Result = "00:" & ab & ":" & cd & "," & ef 'concatener les resultats pour avoir 00:11:22,33
     
    ActiveCell.FormulaR1C1 = Result 'met ds la cell active le résultat
    Merci le forum

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à titre documentaire, mais pas seulement, lire : Comprendre et gérer les dates sous Excel et en VBA

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Les fonctions VBA (CDate, TimeValue) ne gèrent pas les centièmes de secondes.
    Il faut donc trouver une astuce.

    Voici une possibilité.
    Dans un module Standard:
    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
    Option Explicit
     
    Public Function ConvertTime(value As String) As Double
      Application.Volatile
      Dim dblMM As Double
      Dim dblSS As Double
      Dim dblCC As Double
      Dim iMM As Integer
      Dim iSS As Integer
      Dim iCC As Integer
     
      value = Format(value, "000000") ' Force leading zeroes
      iMM = Val(Mid(value, 1, 2))
      iSS = Val(Mid(value, 3, 2))
      iCC = Val(Mid(value, 5, 2))
     
      dblMM = (1 / 1440 * iMM)
      dblSS = (1 / 86400 * iSS)
      dblCC = (1 / 8640000 * iCC)
     
      ConvertTime = dblMM + dblSS + dblCC
    End Function
    Et dans la cellule de destination à mettre au format "mm:ss,00":
    Une autre version, sans String:
    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
    Option Explicit
     
    Public Function ConvertTime(value As Long) As Double
      Application.Volatile
      Dim dblMM As Double
      Dim dblSS As Double
      Dim dblCC As Double
      Dim iMM As Integer
      Dim iSS As Integer
      Dim iCC As Integer
     
      Dim iTemp As Long
     
      iTemp = value - (value Mod 10000)
      iMM = iTemp / 10000
      value = value - iTemp
      iTemp = value - (value Mod 100)
      iSS = iTemp / 100
      iCC = value - iTemp
     
      dblMM = (1 / 1440 * iMM)
      dblSS = (1 / 86400 * iSS)
      dblCC = (1 / 8640000 * iCC)
     
      ConvertTime = dblMM + dblSS + dblCC
    End Function
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. [VBA-E] différences entre VBA Mod et Excel Mod
    Par deaqu1 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/02/2019, 00h35
  2. [XL-2003] Correspondance entre VBA et excel
    Par korni184 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/03/2012, 16h19
  3. Correspondance entre Niveau du plan Excel et noud xml
    Par mouradzoghbi dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 11/11/2011, 22h57
  4. [AC-2000] Etablir une correspondance entre deux tables et Excel en VBA
    Par Tydher dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/05/2011, 15h31
  5. [VBA-E] Macro Excel
    Par simof1977 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/05/2006, 09h41

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