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 :

Fonction personnalisé pour convertir des secondes en Minutes:Secondes


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Fonction personnalisé pour convertir des secondes en Minutes:Secondes
    Bonjour à tous

    Je cherche à créer une fonction personnalisé pour convertir des secondes en Minutes:Secondes

    Pour les calculs je n'ai pas de souci mais c'est pour la création de ma fonction que cela coince

    Je fait Alt + F11 pour arriver dans l'éditeur VBA
    ensuite je cré un module et dans ce module je colle ma fonction suivante :

    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
     
    Function MS(Cell As Range)
     
        'On récupère la valeur de la cellule
        Sec = Cell.Value
     
        ' On calcule les minutes
        M = arrondi.inf(Sec / 60)
     
        ' On calcule le reste
        Reste = M Mod 60
     
        'Si Minute est différente de 0
        If M > 0 Then
            ' On retranche les minutes au reste
            Reste = Reste - M
        End If
     
        ' On calcule les secondes
        S = Reste * 60
     
        ' On construit la valeur de Retour
        MS = CStr(M) & ":" & CStr(S)
    End Function
    Et là j'ai #NOM qui s'affiche dans ma cellule ou j'ajoute la fonction

    Est-ce que quelqu'un voit d'ou viens le problème, je suis novice en VB donc j'ai un peu de mal

    Merci d'avance pour votre aide

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    bonjour,
    tes variables sont'elles déclarées ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Déjà Erreur de ma part, non je les avais pas déclaré, ce que je viens de faire

    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
     
    Function MS(Cell As Range)
     
        Sec As Integer
        M As Integer
        Reste As Double
        S As Integer
        MS As String
     
        ' On récupère la valeur de la cellule
        Sec = Cell.Value
     
        ' On calcule les minutes
        M = arrondi.inf(Sec / 60)
     
        ' On calcule le reste
        Reste = M Mod 60
     
        'Si Minute est différente de 0
        If M > 0 Then
            ' On retranche les minutes au reste
            Reste = Reste - M
        End If
     
        ' On calcule les secondes
        S = Reste * 60
     
        ' On construit la valeur de Retour
        MS = CStr(M) & ":" & CStr(S)
    End Function
    Mais toujours la même erreur #NOM

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    et le dim
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    J'ai changé et toujours pareil

    En fait je viens d'essayer d'ajouter ma fonction sur une cellule en cliquant sur le F et cela me met Cette fonction ne possède pas d'argument

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    le module est-il dans le classeur ou tu entres la formule?
    Alleï Bonjour chez vous!

  7. #7
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Normalement oui, ca me rajoute un Module1 dans l'éditeur de texte sous WBAProject (Nomfichier.Xls)

  8. #8
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =nomduclasseur.xls!MS(A1)
    Alleï Bonjour chez vous!

  9. #9
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Toujours pareil

    Voici le code modifié avec Dim

    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
     
    Function MS(Cell As Range)
     
        Dim Sec, M, Reste, S
     
        ' On récupère la valeur de la cellule
        Sec = Cell.Value
     
        ' On calcule les minutes
        M = arrondi.inf(Sec / 60)
     
        ' On calcule le reste
        Reste = M Mod 60
     
        'Si Minute est différente de 0
        If M > 0 Then
            ' On retranche les minutes au reste
            Reste = Reste - M
        End If
     
        ' On calcule les secondes
        S = Reste * 60
     
        ' On construit la valeur de Retour
        MS = CStr(M) & ":" & CStr(S)
    End Function

  10. #10
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function MS(ByVal Sec as integer) as string
     
      Dim    M As Integer, ...
     
            ' On calcule les minutes
        M = Sec \ 60
        Reste = Sec Mod 60
    ...
    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  11. #11
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    je vois une double déclaration

    donc

    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
    Function MS(Cell As Range) As String
     
        Dim Sec, M, Reste, S
     
        ' On récupère la valeur de la cellule
        Sec = Cell.Value
     
        ' On calcule les minutes
        M = Fix(Sec / 60)
     
        ' On calcule le reste
        Reste = M Mod 60
     
        'Si Minute est différente de 0
        If M > 0 Then
            ' On retranche les minutes au reste
            Reste = Reste - M
        End If
     
        ' On calcule les secondes
        S = Reste * 60
     
        ' On construit la valeur de Retour
        MS = CStr(M) & ":" & CStr(S)
    End Function
    Alleï Bonjour chez vous!

  12. #12
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci à vous pour votre aide.

    En fait je me suis aussi planté dans les calculs voilà pourquoi après avoir fait vos corrections, j'avais des trucs bizarres.

    Au final voilà ce que cela donne avec mes corrections et l'ajout des 0 quand les minutes ou secondes sont inférieures à 10

    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
    34
     
    Function MS(Cell As Range) As String
        Dim Sec, M, S
     
        ' On récupère la valeur de la cellule
        Sec = Cell.Value
     
        ' On calcule les minutes
        M = Fix(Sec / 60)
     
        ' On calcule les secondes
        S = Sec Mod 60
     
        ' Si les minutes sont inférieures à 10
        If (M < 10) Then
            ' On ajoute un 0 devant
            MS = "0"
        End If
     
        ' On ajoute les minutes
        MS = MS & CStr(M)
     
        ' On ajoute le séparateur
        MS = MS & ":"
     
        ' Si les secondes sont inférieures à 10
        If (S < 10) Then
           ' On ajoute un 0 devant
           MS = MS & "0"
        End If
     
        ' On ajoute les secondes
        MS = MS & CStr(S)
    End Function

  13. #13
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour à tous,

    Bien compliquée, la fonction alors qu'il suffit de mettre
    dans la cellule de destination et de mettre cette dernière au format Heure.
    Dans l'exemple, A1 est la cellule contenant les secondes et 86400 est le nombre de secondes dans une journée.
    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!

  14. #14
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    une autre possibilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function SECMN(ByVal sc As Integer)
    SECMN = Format(TimeSerial(0, 0, sc), "nn:ss")
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. Recherche d'une fonction lua pour convertir des caractères accentués
    Par Jerome78 dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 21/11/2008, 11h37
  2. Réponses: 10
    Dernier message: 03/07/2006, 11h32
  3. Installer un cgi pour convertir des html en pdf
    Par sami_c dans le forum Apache
    Réponses: 3
    Dernier message: 23/03/2006, 14h36
  4. [Fonction SQL Serveur] convertir des secondes en heure
    Par falcon dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/11/2004, 17h22
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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