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 :

Conversion 1(h) 26(m) 35(s) en secondes [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 406
    Par défaut Conversion 1(h) 26(m) 35(s) en secondes
    Bonjour,

    J'essaie de convertir une cellule contenant une durée en format texte du genre 1(h) 26(m) 35(s) en secondes.

    J'ai écrit un bout de code (voir ci-dessous). Ce code fonctionne sauf lorsque je dépasse 9(h) ...

    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
    '---------------------------------------------------------------------------------------
    ' Procédure : ConversionSecondes
    ' Auteur    : Jean-Pierre
    ' Date      : 08/02/2013
    ' Objet     : Conversion d'une donnée de type 1(h) 26(m) 30(s) en secondes
    '---------------------------------------------------------------------------------------
    Public Function ConversionSecondes(strDuree As String) As Long
      Dim bytPosh     As Byte       ' position de lecture de la parenthèse ouvrante des heures
      Dim bytPosm     As Byte       ' position de lecture de la parenthèse ouvrante des minutes
      Dim intHeures   As Integer    ' nombre d'heures
      Dim bytMinutes  As Byte       ' nombre de minutes
      Dim bytSecondes As Byte       ' nombre de secondes
      bytPosh = InStr(strDuree, "(h)")
      intHeures = CInt(Left(strDuree, bytPosh - 1))
      bytPosm = InStr(strDuree, "(m)")
      Select Case bytPosm - bytPosh
        Case 5: bytMinutes = CByte(Mid(strDuree, bytPosm - 1, 1))
        Case 6: bytMinutes = CByte(Mid(strDuree, bytPosm - 2, 2))
      End Select
      bytSecondes = CByte(Mid(strDuree, Len(strDuree) - 4, 2))
      ConversionSecondes = CLng((intHeures * 3600) + (bytMinutes * 60) + bytSecondes)
    End Function
    Avez-vous une idée ?

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour Gabout

    Perso j'aurai écris cela :
    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
    Option Explicit
     
    Dim mavar() As String
    Dim heure As Integer
    Dim minute As Integer
    Dim seconde As Integer
    Dim nb_seconde As Long
     
    Sub nombre_seconde()
    mavar = Split(Range("B6"), " ")
    heure = Mid(mavar(0), 1, InStr(mavar(0), "(") - 1)
    minute = Mid(mavar(1), 1, InStr(mavar(1), "(") - 1)
    seconde = Mid(mavar(2), 1, InStr(mavar(2), "(") - 1)
    nb_seconde = (heure * 3600) + (minute * 60) + seconde
    End Sub
    mais il y a certainement mieux.
    Tout dépend ce que tu veux faire après

    Eric

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

    Tu dépasses la valeur maximale pour un entier (32767) pour la conversion des heures.
    En changeant le type de tes variables, cela devrait passer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Dim intHeures   As Long    ' nombre d'heures
      Dim bytMinutes  As Integer       ' nombre de minutes
      Dim bytSecondes As Integer       ' nombre de secondes
    Cordialement.

  4. #4
    Membre Expert Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 406
    Par défaut
    Bonjour edelweisseric et gFZT82

    Effectivement, dans mon soucis (Access) d'occuper le moins de place, je n'avais pas fait attention aux limites des variables.

    Merci pour vos réponses, cela fonctionne parfaitement !

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour à tous
    Si les durées sont toujours sous la forme x(h) y(m) z(s), je propose une fonction (pour le fun)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function SpecialText2Seconds(ByVal Str As String) As Long
     
    Str = Replace(Str, "(h) ", "*3600+")
    Str = Replace(Str, "(m) ", "*60+")
    Str = Replace(Str, "(s)", "")
    SpecialText2Seconds = Evaluate(Str)
    End Function

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

Discussions similaires

  1. Conversion Assembleur Motorola 68xxx en Intel 80xxx
    Par markham dans le forum Autres architectures
    Réponses: 3
    Dernier message: 22/11/2002, 21h09
  2. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 15h14
  3. Algorithme de conversion de RTF vers HTML
    Par youtch dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/09/2002, 13h35
  4. [Conversions] Millisecondes...
    Par agh dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 12h25
  5. Réponses: 2
    Dernier message: 05/06/2002, 13h29

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