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 :

Problème de date VBA


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
    Consultant
    Inscrit en
    Juin 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2019
    Messages : 39
    Par défaut Problème de date VBA
    Bonjour,

    Je suis à élaborer un logiciel de gestion budgétaire pour mon entreprise avec Excel VBA sur office 365 business pro.

    J'avance avec succès jusqu'à ce que je rencontre ce problème. L'un de mes formulaire répartie des montants sur 12 mois (prévisions budgétaire). Tout les paramètres fonctionnent sauf 1, soit la date du premier jour de chaque mois. ex : 2019-01-01, 2019-01-02, etc.

    Au début cela fonctionnait et tout à coup ça ses mit à planter. Ex : 2019-01-01, 05/06/2019, 06/01/2019, etc. Seulement la première date est OK puis c'est n'importe quoi.

    J'ai fait affaire avec un conseiller sur Microsoft community. Nous avons tenté plusieurs solutions de format de date, désinstaller office 365 et réinstaller, de même avec la suite office, copier sur un nouveau fichier. Bref rien n'a fonctionné. Pourtant, le conseiller avait mon classeur et de son côté tout fonctionnaient.

    Sa conclusion est que mon classeur est peut-être corrompu. Pourtant tout mes autres formulaires fonctionnent et je n'ai rien importé et tout conçu manuellement.

    Voici les codes concerné :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    'Date
    Private Sub txtdate_AfterUpdate()
    On Error GoTo Message
    Me.txtdate = Format(CDate(Me.txtdate), "yyyy-mm-dd")
    Exit Sub
     
    Message:
    MsgBox ("Vous avez entr? le mauvais format de date !")
    Me.txtdate = ""
    End Sub
     
    'Date de paiement
    Private Sub txtdatefin_AfterUpdate()
    On Error GoTo Message
    Me.txtdatefin = Format(CDate(Me.txtdatefin), "yyyy-mm-dd")
    Exit Sub
     
    Message:
    MsgBox ("Vous avez entr? le mauvais format de date !")
    Me.txtdatefin = ""
    End Sub
     
    'Bouton budg?ter
    Private Sub budg?ter_Click()
    Dim x As Integer
    Dim paiementmens As Double
     
    If Me.txttype < 0 Or Me.montant = "" Or Me.p?riode < 0 Or Me.cat?gorie < 0 Or Me.souscat < 0 Then
        MsgBox ("Il manque des informations !")
     
    Else
        'V?rifier si la date de paiement est inscrite
        If Me.txtdatefin <> "" Then
            x = DateDiff("m", Me.txtdate, Me.txtdatefin)
            paiementmens = CDbl(Me.montant) / x '<-- Calcul des mensualit?s qu'il reste ? payer entre ces 2 dates
     
            Do Until x = 0
     
                If Sheets("pr?visions").Range("ar76") <> "" Then
                Sheets("pr?visions").ListObjects(1).ListRows.Add
                End If
     
                'Trouver la derni?re ligne
                dlt = Sheets("pr?visions").Range("ar10000").End(xlUp).Row
     
                Sheets("pr?visions").Range("ar" & dlt) = Me.txtdate
                Sheets("pr?visions").Range("as" & dlt) = Me.txttype
                Sheets("pr?visions").Range("at" & dlt) = paiementmens
                Sheets("pr?visions").Range("au" & dlt) = Me.cat?gorie
                Sheets("pr?visions").Range("aw" & dlt) = Me.souscat
                Sheets("pr?visions").Range("ay" & dlt) = Me.txtdescription
     
                Me.txtdate = DateAdd("m", 1, Me.txtdate) '<-- Ajout d'un mois en plus ? la date de d?part
                x = x - 1 '<-- D?compte du nombre de fois qu'il faut faire la boucle
     
            Loop
        End If
                Me.txtdate = ""
                Me.txttype = ""
                Me.montant = ""
                Me.p?riode = ""
                Me.txtdatefin = ""
                Me.cat?gorie = ""
                Me.souscat = ""
                Me.txtdescription = ""
     
        ThisWorkbook.RefreshAll
        ThisWorkbook.Save
     
    End If
    End Sub
    Voici le formulaire
    Nom : formulaire.png
Affichages : 2726
Taille : 45,1 Ko

    En terminant je me suis inspiré d'un vidéo et naturellement sur le vidéo cela fonctionnait.

    Avez-vous une solution autre que tout recommencé
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par denissmile Voir le message
    Bonjour,

    Dans cette ligne, le paramètre Me.txtdate dans DateAdd est une valeur alpha. Ne faudrait-il pas la convertir en date ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.txtdate = DateAdd("m", 1, Me.txtdate) '<-- Ajout d'un mois en plus ? la date de d?part

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Curieusement, DateAdd fonctionne avec une variable texte pour peu qu'elle soit au format date. Le code passe correctement dessus, tout au moins avec Excel 2016. Le problème doit se situer ailleurs.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2019
    Messages : 39
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Dans cette ligne, le paramètre Me.txtdate dans DateAdd est une valeur alpha. Ne faudrait-il pas la convertir en date ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.txtdate = DateAdd("m", 1, Me.txtdate) '<-- Ajout d'un mois en plus ? la date de d?part
    Merci nous y travaillons. Pourriez-vous me donner plus de détails S.V.P.

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par denissmile Voir le message
    Bonjour,

  7. #7
    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
    bonjour
    le problème c'est que tu travail avec un format de date qui n'est pas celui de ton system (yyyy-mm-dd)

    essaie ca sans garantie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.txtdate = Format(DateAdd("m", 1, DateValue(Format(Me.txtdate, "dd/mm/yyyy"))), "yyyy-mm-dd")
    est ce bien utile de travailler avec ce format dans ton UserForm
    ne serait il pas plus facile de formater les cellules de destination quand tu transfert avec numberformat

    edit j'ai testé c'est ok
    avec datevalue simplement ca fonctionne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.txtdate = Format(DateAdd("m", 1, DateValue(Me.txtdate)), "yyyy-mm-dd")
    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

  8. #8
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2019
    Messages : 39
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonjour
    le problème c'est que tu travail avec un format de date qui n'est pas celui de ton system (yyyy-mm-dd)[...]
    Merci je vais faire des test.

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par patricktoulon Voir le message
    bonjour
    le problème c'est que tu travail avec un format de date qui n'est pas celui de ton system (yyyy-mm-dd)
    Pas sûr. C'est un Format ISO adopté au Canada et utilisé au moins par le Gouvernement du Canada et par le Gouvernement du Québec. Pour l'entreprise privée, c'est moins évident. (J'aimerais dire imposé, mais on en est pas encore rendu là.) L'essayer c'est l'adopter. Surtout pour trier des dates.

    C'est standard et par défaut pour les paramètres régionaux de Windows et pour les Office "canadiens" récents.

    Et puis, juste pour vous mettre dans le contexte. Le Canada est probablement le pire pays au monde dans le domaine de la gestion des dates (manuelles ou informatiques). Depuis la conquête, et probablement avant c'était le format britannique, et probablement européen : jj-mm-aaaa ou jj-mm-aa le plus souvent. Mais les échanges avec les américains, le format américain (mm-jj-aa ou mm-jj-aaaa) a également fait son chemin. Le fprmat ISO a été choisi dans la foulée de la conversion au système métrique. Mais, pour la petite histoire, la conversion s'est littéralement interrompue (du moins parmi la population) avec le ressac de voir les prix des aliments doubler, même si ce n'est pas vrai, quand ils ont essayé de remplacer la livre (453,6 grammes) par le kilo. On pourrait dire un vrai blocage psychologique. Et sans le domaine des matériaux de construction qui sont au mesures métriques, mais que les menuisiers continuent de mesurer en pieds et en pouces...

  10. #10
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2019
    Messages : 39
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,
    Merci

    J'ai encore quelques bug
    'Bouton budg?ter
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Private Sub budg?ter_Click()
    Dim x As Integer
    Dim MaDate As Date
    Dim MaLigne As ListRow
    
    If Me.txttype < 0 Or Me.montant = "" Or Me.p?riode < 0 Or Me.cat?gorie < 0 Or Me.souscat < 0 Then
        MsgBox ("Il manque des informations !")
    
    Else
        'V?rifier si la date de paiement est inscrite
        If Me.txtdatefin <> "" Then
            MaDate = CDate(txtdate)
            x = DateDiff("m", CDate(txtdate), CDate(txtdatefin))
            
            Do Until x = 0
            
            If Sheets("pr?visions").Range("ar76") <> "" Then '--> Permet de placer le texte dans la base de donn?es ? la premi?re ligne si elle est vide
                With Sheets("pr?visions").ListObjects(1)
                    Set MaLigne = ListRows.Add
                        With MaLigne
                            Range(1, 1) = MaDate
                        End With
            End If --> Erreur de bloc sans if
                
                'Trouver la derni?re ligne
                dlt = Sheets("pr?visions").Range("ar10000").End(xlUp).Row
                Sheets("pr?visions").Range("ar" & dlt) = Dat
                Sheets("pr?visions").Range("ar" & dlt).NumberFormat = "yyyy-mm-dd" Je suis pas mal certain que ces 2 lignes ne sont pas exacts
                Sheets("pr?visions").Range("as" & dlt) = Me.txttype
                Sheets("pr?visions").Range("at" & dlt) = paiementmens
                Sheets("pr?visions").Range("au" & dlt) = Me.cat?gorie
                Sheets("pr?visions").Range("aw" & dlt) = Me.souscat
                Sheets("pr?visions").Range("ay" & dlt) = Me.txtdescription
                
                MaDate = DateAdd("m", 1, MaDate) '<-- Ajout d'un mois en plus ? la date de d?part
                Debug.Print x; "," & MaDate
                
                x = x - 1 '<-- D?compte du nombre de fois qu'il faut faire la boucle
                Set MaLigne = Nothing
                End With
                
            Loop
        End If
                Me.txtdate = ""
                Me.txttype = ""
                Me.montant = ""
                Me.p?riode = ""
                Me.txtdatefin = ""
                Me.cat?gorie = ""
                Me.souscat = ""
                Me.txtdescription = ""
                
        ThisWorkbook.RefreshAll
        ThisWorkbook.Save
        
    End If
    End Sub

  11. #11
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour

    Citation Envoyé par denissmile Voir le message
    Merci
    J'ai récupéré le classeur d'Éric, mais, pour ce cas spécial, je prendrais bien aussi le tien, pour l'essayer sur un Office canadien. Fais juste attention de l'épurer des données confidentielles.

    P.S. C'est un cas spécial et cela ne veut pas dire que je ne me plaindrai plus jamais des classeurs joints

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par denissmile Voir le message
    Bonjour,

    Pourquoi chercher la dernière ligne ?
    Dans mon code, j'ai créé une variable ListRow pour justement s'affranchir de cette recherche. Dans votre exemple, j'ai recréé un ListObject d'une seule colonne pour voir d'où venait le problème. Il vous suffit d'adapter la syntaxe de la colonne Date pour vos autres données et d'attribuer les bonnes colonnes.
    Nb : Je ne mets jamais de caractères accentués dans le nom de mes variables ou de mes contrôles.
    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
    35
     
    'Bouton budg?ter
    Private Sub budgeter_Click()
     
    Dim x As Integer
    Dim MaDate As Date
    Dim MaLigne As ListRow
     
        'Vérifier si la date de paiement est inscrite
        If txtdatefin <> "" Then
            MaDate = CDate(txtdate)
            x = DateDiff("m", CDate(txtdate), CDate(txtdatefin))
     
            Do Until x = 0
     
                With Sheets("prévisions").ListObjects(1)
                     Set MaLigne = .ListRows.Add
                     With MaLigne
                          .Range(1, 1) = MaDate
                          '....
                     End With
     
                     MaDate = DateAdd("m", 1, MaDate) '<-- Ajout d'un mois en plus ? la date de d?part
                     'Debug.Print x & ", " & MaDate
     
                     x = x - 1 '<-- D?compte du nombre de fois qu'il faut faire la boucle
                     Set MaLigne = Nothing
     
                End With
     
            Loop
     
        End If
     
    End Sub
    Dernière modification par Invité ; 14/06/2019 à 04h07.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Attention à ce que le VBA tente de faire avec des dates au format texte... Dans le premier cas, il comprend 3 février 2019, dans le second, il comprend 25 mars.... Il tente de comprendre la date dans le format régional et s'il n'y arrive pas, il passe au format VBA (mm/dd/yy)...

    Nom : 2019-06-07_214749.png
Affichages : 2517
Taille : 1,9 Ko


    Perso, j'utilise ceci pour convertir une saisie textuelle en date ( c'est unparia qui a présenté l'astuce de la comparaison un jour sur le forum). Elle renvoie 0 si la date n'est pas bonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function getDateFromString(Value As String, DateFormat As String) As Date
      If Format(CDate(Value), DateFormat) = Value Then getDateFromString = CDate(Value)
    End Function
    Nom : 2019-06-07_221236.png
Affichages : 2561
Taille : 4,2 Ko



    Donc, pour ce qui est de manipuler les dates, je conseille de toujours travailler avec... des dates, et de ne pas laisser VBA/Excel déterminer comment il interprète du texte pour le convertir en date. Donc, d'abord convertir en date, puis ajouter les mois.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tant que vous n'aurez pas compris que le VBA essaie d'abord de "comprendre" une date sous forme de texte sur base du format régional (paramètres Windows) puis au format "international" interne du VBA, vous aurez des soucis dans votre code, puisque le vba ne fera pas forcément ce à quoi vous vous attendez...

    Pour moi, la seule façon de convertir une saisie textuelle en date, c'est de vérifier qu'elle a été saisie au format que VOUS souhaitez. Pourquoi croyez-vous que sur un site internet, on vous impose le format de saisie? Simplement parce qu'il n'est pas possible de "deviner" le format que vous utilisez pour saisir la date...

    Vous devez donc IMPOSER le format et tester la saisie par rapport à CE format et rejeter une saisie qui ne correspondrait pas. C'est pour moi la seule solution pour s'en sortir...


    Citation Envoyé par patricktoulon Voir le message
    [...]
    ne serait il pas plus facile de formater les cellules de destination quand tu transfert avec numberformat[...]
    Le numberformat, ça vient après. Si le VBA a mal traduit la date lors de la conversion texte->date, le numberformat (qui ne change pas la valeur, mais uniquement son affichage, pour rappel) ne changera rien au problème.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    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
    perso j'ai très bien compris pierre

    dans son cas datevalue donne le bon format alors l'utiliser pour les fonction add et compagnie meme cdate redresse
    pour sa ligne il faut donc formater le (add"m" au datevalue )dans le format initial du textbox
    j'ai testé avec date value et cdate c'est OK

    Attention au dates avec mois et jour en dessous de 12 VBA ne peut pas deviner selon l'option régional il donnera pour nous(France) les 2 premiers comme jour
    c'est bien pour ca que j'ai proposé de travailler en date system day(une date) et month(une date) donnera toujours les jours et mois correctement
    d'où le serialnumber dans les cellules
    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

  16. #16
    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
    pour etre sur en prenant en compte le format impôsé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
         'format imposé  "yyyy-mm-dd"
        t = Split(txtdate, "-")
        ladate = DateSerial(t(0), t(1), t(2))
        Me.txtdate = Format(DateAdd("m", 1, ladate), "yyyy-mm-dd")
    End Sub
    plus d'ambiguïté avec les mois/jour<12
    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

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    [...]
    Attention au dates avec mois et jour en dessous de 12 VBA ne peut pas deviner selon l'option régional il donnera pour nous(France) les 2 premiers comme jour[...]
    Ce n'est pas tout à fait exact. Si tu donnes une date "2019-02-25", VBA va comprendre directement YYYY-MM-JJ et transformer en date sans problème. Dans ce cas, il ne prend pas les deux premiers chiffres comme jour. Si tu donnes une date "02/25/2019", il va essayer de traduire "comme en France" mais comme ça ne passera pas, il va essayer au format VBA.

    Et comment l'ordinateur "sait-il" que tu es en France? => par le format régional, évidemment. Mais si la date n'est pas correcte sous ce format, il va essayer au format VBA. Dans un précédent message, j'ai illustré ce cas, et j'ai d'ailleurs donné une fonction générique qui traduit une date-texte en date en précisant en argument le format sous lequel la date est exprimée à l'entrée.

    Nom : 2019-06-14_060645.png
Affichages : 2530
Taille : 11,4 Ko


    Citation Envoyé par patricktoulon Voir le message
    bonjour
    le problème c'est que tu travail avec un format de date qui n'est pas celui de ton system (yyyy-mm-dd)[...]
    C'est bien pour cela qu'il faut proscrire cDate et DateValue et travailler en fonction d'un format défini au départ, indépendamment du format système ou d'autres considérations fluctuantes, et il faut le faire de façon systématique. En informatique et particulièrement en programmation, c'est la systématisation qui est garante d'un code qui fonctionne.


    Pour le reste, mis à part que ton algo verrouille un format particulier, on est d'accord: d'abord transformer en date de façon non ambiguë, puis traiter en tant que date, l'affichage au bon format dans Excel venant en fin de processus
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [WD-MAC 2011] Problème fonction Date VBA Word
    Par calimhiro dans le forum VBA Word
    Réponses: 3
    Dernier message: 30/12/2012, 14h20
  2. Problème de date Vba excel
    Par larosse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/11/2009, 18h33
  3. [VBA-E]problème de date
    Par plante.douce dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/04/2006, 14h06
  4. [VBA-E]problème de date
    Par plante.douce dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/04/2006, 23h08
  5. [VBA-E]problème de date dans une requete
    Par isa21493 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 24/02/2006, 11h45

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