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 :

explications code de format


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 105
    Par défaut explications code de format
    Bonjour,

    je crois comprendre du code suivant ( que j ai récupéré sur le forum ) qu il s'agit de mettre au format date et nombre des format textes récupérés à partir d'un formulaire ou autres
    Il s'agit plutôt d'une "fonction" ?
    Ne voulant pas copier bêtement un code, et cela pourrait peut être aider d'autre débutant comme moi mais quelqu un pourrait il m'éclairer sur cette fonction ?

    Merci par avance
    bon dimanche a tous


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function TrouveType(V)
    TrouveType = V
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function
    If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function
    End Function

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    C'est une fonction proposé par Robert ici pour valider et formater une date ou une valeur numérique.
    Il s'agit plutôt d'une "fonction" ?
    Effectivement, c'est une fonction !

    Dans la première ligne, l'argument passé à la fonction lui est affecté (pour simplifier).
    Dans la seconde ligne, si l'argument est par exemple "09/08/15 10:25" (date et heure), il sera validé par la fonction "IsDate" et formaté de cette façon "2015/08/09 10:25" (année-mois-jour heures:minutes) à condition que jour, mois et année soit séparés par des slashs et heure et minute par un double point.
    Si tu entre la valeur sous cette forme, "09-08-15 10:25", la fonction "IsDate" validera car c'est un format de date valide mais elle ne sera pas formaté par la fonction car ne possède pas les / (pas d'année en entier et pas d'inversion année-jour)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function
    Dans la troisième ligne, même que précédemment mais ne concerne que la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function
    Pour la dernière ligne, ça concerne les valeurs numériques. La fonction "IsNumeric" valide si la valeur est numérique, mais au préalable, la fonction "Replace" remplace l'éventuel point par la virgule car la fonction "IsNumeric" se base sur les paramètres régionaux (pour nous, généralement la virgule comme séparateur décimal) ensuite, la virgule est remplacée par le point qui est le séparateur décimal pour VB.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function
    Hervé.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Oups
    pas : "formaté de cette façon "2015/08/09 10:25" (année-mois-jour heures:minutes)"
    mais : "formaté de cette façon "2015-08-09 10:25" (année-mois-jour heures:minutes)"

    Hervé.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 105
    Par défaut
    Bonsoir Hervé

    merci beaucoup pour ton éclairage
    c'est effectivement plus clair et plus sympa de comprendre ce que j utilise
    bravo en tous cas pour votre dévouement sur le forum

    bonne soirée

    Bien cordialement

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pour compléter ce qu'a dit Hervé, je dirais que trouveType n'est pas une fonction de conversion mais une fonction qui analyse le paramètre entré, pour le formater en valeur intelligible par Excel de façons univoque!

    Pour ce convaincre qu'Excel passe son temps à analyser les données saisies par l'utilisateur il suffit de saisir 1/1/15 dans un cellule et même si c'est réellement ce que l'utilisateur veut saisir!

  6. #6
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 105
    Par défaut
    merci pour ce complément d'informations
    j ai un petit soucis lors de l'execution d'un code
    où j ai un message qui me dit " Impossible d'afficher une feuille non modale lorsqu'une feuille modale est affichée "
    quelle est la signification de ce message ?

    D'avance merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Difficile à dire, déjà tu as affiché un formulaire, la propriété modal est True ar défaut.

    Peut-être veux tu redonner le focus à une autre précédemment charger et tu as ce message.

    Mais sens le code et l'enchaînement des actions?????

  8. #8
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 105
    Par défaut
    La je cale
    çà fait une heure que je cale la dessus
    je vais recommencer mais j ai tout vérifié et j y arrive pas

    merci quand même

  9. #9
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 105
    Par défaut
    C'est bon j ai trouvé !
    c'était le "0" après UserformX.Show

    ouf!
    Thanks

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    perso simplifier pour simplifier je l'aurais ecrite comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function TrouveType(V) As Variant
    If IsDate(V) = True And InStr(V, "/") <> 0 And InStr(V, ":") <> 0 Then TrouveType = Format(V, "yyyy-mm-dd hh:mm"): Exit Function
    If IsDate(V) = True And InStr(V, "/") <> 0 Then TrouveType = Format(V, "yyyy-mm-dd"): Exit Function
    If IsNumeric(Replace(V, ".", ",")) = True Then TrouveType = Replace(V, ",", "."): Exit Function
    End Function
    afin :pour les debutants surtout de ne pas confondre l'argument et la fonction
    entre parentheze aussi elle est sensée retourné une variable numeric ou date donc bien faire pour bien faire as variant car c'est ce qu'elle est !
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 105
    Par défaut
    Bien noté pour ce code simplifié ,merci

    petite question complémentaire
    avec le code qui suit je souhaite dire à l'utilisateur que nous sommes le 1er du mois et qu il faut qu il lance la sauvegarde
    si le 1er est un dimanche ou férié, le message réapparaitra il le lendemain ?
    Merci jeter un œil en passant sur le code lui même car les dates en VBA , c'est pas simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Sub Fin_De_Mois()
     
        If Month(Date) <> Month(Date + 1) Then
     
         MsgBox ("Nous sommes le 1er du mois de " & _
                      MonthName(Month(LaDate + 1)) & vbCrLf & vbCrLf & _
                      "Veuillez exécuter la sauvegarde mensuelle "), vbExclamation & vbOK
     
     
        End If
     
    End Sub

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re

    non ca ne recomencera pas tout seul
    le probleme dans ton principe c'est que l'on a pas de refrence
    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Month(Date) <> Month(Date + 1) Then
    cela teste si la date(aujourd'hui) + 1 est du meme mois si sa tombe bien ok la sauvegarde se fera le 30 ou 31 de chaque mois voir 28/29 pour fevrier

    seul probleme c'est que si ca tombe un dimanche ou jour ferié et que personne n'est au bureau des la rentrée du weekend tu lance le teste et il te dira que c'est bon
    puisque date est du mois en cours il faut donc que tu puisse stocker une olDdate de sauvegarde ou un repere du genre le nom de l'ancienne sauvegarde si la date est dans son nom par exemple


    une petite parentheze comme ca
    juste pour le fun je te propose de regarder ceci: ca te donne la date sous quelque format que ce soit au mùilieu d'un texte emelé

    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
    Function is_available_date(txt As String) As Variant
        Dim Matches, ReG
        Set ReG = CreateObject("VBScript.RegExp")
        With ReG
            .Global = True: .Pattern = "( )+[0-9-a-z]+[/|:|-|( )]+[a-z-A-Z-0-9-/]+[/|:|-|( )]+(\d*)": .IgnoreCase = False
            Set Matches = .Execute(Replace(txt, " - ", "-"))
            ReDim tablo(Matches.Count): i = 0
            For Each Match In Matches
                tablo(i) = Trim(Match.Value)
                i = i + 1
            Next
        End With
        is_available_date = tablo
        Set ReG = Nothing
    End Function
    différents tests
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    MsgBox is_available_date("bvcbvbvb 28/05/2015vbvbvb")(0)
    End Sub
    Sub test2()
    MsgBox is_available_date("bvcbvbvb 28/aout/2015vbvbvb")(0)
    End Sub
    Sub test3()
    MsgBox is_available_date("bvcbvbvb Vendredi 28/aout/2015vbvbvb")(0)
    End Sub
    Sub test4()
    MsgBox is_available_date("bvcbvbvb 2015:05:15vbvbvb")(0)
    End Sub
    juste pour le fun!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 105
    Par défaut
    OK très intéressant et instructif
    mais pour le "fun" oui je vais m y pencher demain

    ce code doit donner accès à une feuille par un mot de passe
    Problème : s il n'a pas le mot de passe en faisant "quitter", le formulaire de saisie apparait quand même
    et si le mot de passe est correct, l'userform pour le mot de passe reste visible
    En plus d'être débutant suis un peu fatigué là
    après je vais me coucher il est minuit 20 chez nous
    merci pour l'aide

    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
    Private Sub Cmd_Saisies_des_Entrées_de_Stock_Click()
     
    'a partir d'une commande sur une feuille "Menu" l opérateur demande l'accès a la saisie des entrées de stock
    Sheets("Etat_des_entrées").Select
    'Userform pour un code d'accès
    Mot_de_Passe.Show
    If TextBox1.Text = "TOTO" Then
    Entrée_Stock.Show
     
    Else: MsgBox ("Code d'accès incorrect !"), vbExclamation & vbOK
     
    'retour à la feuille "Menu"
    Sheets("Menu").Select
    End If
    TextBox1 = ""
    Mot_de_Passe.Hide
    End Sub

  14. #14
    Invité
    Invité(e)
    Par défaut
    En ce qui concerne ta sauvegarde, je suis d'accord avec Patrick! La date de sauvegarde en soit n'est pas importante, ce qui est important c'est quelle est bien lieu en début de mois!
    Si le traitement n'a pas besoin d'une intervention humaine, le gestionnaire de taches de Windows peut s'en charger.
    Si non il suffi de sauvegarder la date de la sauvegarde dans un onglet masquer , ainsi si la date ne correspond pas au mois en cours, le message s'affiche.

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

Discussions similaires

  1. explication code vba
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/04/2008, 09h01
  2. explication code vba
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/04/2008, 11h12
  3. Explication sur le format .exe
    Par Janitrix dans le forum Windows XP
    Réponses: 4
    Dernier message: 04/06/2006, 13h58
  4. explication code
    Par lolothom dans le forum Access
    Réponses: 3
    Dernier message: 03/02/2006, 21h22
  5. explication code
    Par mdevlieg dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/01/2005, 09h32

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