none
Problème de date VBA RRS feed

  • Question

  • Bonjour,

    L'ensemble de mon code doit budgéter des sommes annuel divisé mensuellement. Aucun problème.

    Tout mes codes dates son écrite de la même façon. Me.txtdate = Format(CDate(Me.txtdate), "yyyy-mm-dd")

    Au premier  appel de code j'obtient les dates mensuellement tel que programmé. Mais lorsque je ferme mon classeur et l'ouvre à nouveau, j'ai le problème que vous pouvez voir à la photo. C'est à dire que la date du premier mois est OK, mais les dates des mois suivants sont différentes dd/mm/yyyy

    J'ai également essayer le code suivant : Me.txtdate = CDate(Me.txtdate), même résultat.Et finalement j'ai essayer : Me.txtdate = Format(CDate(Me.txtdate), "dd/mm/yyyy"), même chose.

     Voici les codes

    '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

     

    45 2020-01-01 Budgéter 104,17 $ 5600 Frais généraux d'administration 5610 Frais comptables & judiciaires
    46 2020-02-01 Budgéter 104,17 $ 5600 Frais généraux d'administration 5610 Frais comptables & judiciaires
    47 2020-03-01 Budgéter 104,17 $ 5600 Frais généraux d'administration 5610 Frais comptables & judiciaires
    48 2020-04-01 Budgéter 104,17 $ 5600 Frais généraux d'administration 5610 Frais comptables & judiciaires
    49 01-05-2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    50 05/02/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    51 02/06/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    52 06/03/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    53 03/07/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    54 07/04/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    55 04/08/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    56 08/05/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance

     


    jeudi 30 mai 2019 16:20

Toutes les réponses

  • Bonjour,

    Je ne vois pas où tu écris la date sur la feuille ?

    Cordialement.

    Daniel

    vendredi 31 mai 2019 08:24
  • Sur un formulaire VBA.

    

    Les dates s'affiches correctement dans mon formulaire, C'est lors du transfert vers le tableau que ça plante. Voie 49 début de la série de 12. La première date est OK mais le reste change de format.


    vendredi 31 mai 2019 10:29
  • Oui, mais où est le code du transfert ?

    Daniel

    vendredi 31 mai 2019 11:58
  • Désolé

    Le voici

    '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 pr?sente
        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) = 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
            
                Me.txttype = ""
                Me.montant = ""
                Me.période = ""
                Me.txtdate = ""
                Me.txtdatefin = ""
                Me.catégorie = ""
                Me.souscat = ""
                Me.txtdescription = ""
                 
         ThisWorkbook.RefreshAll
         ThisWorkbook.Save
         End If
    End If
    End Sub

    vendredi 31 mai 2019 14:37
  • Pas évident. Est-ce que tu peux me donner ton format ate par défaut et me poster un classeur sans données confidentielles ?

    Daniel

    vendredi 31 mai 2019 14:47
  • Je peux te fournir mon classeur si tu le veux. Comment on fait?
    vendredi 31 mai 2019 20:38
  • Charge ton fichier  sur :

    https://mon-partage.fr/

    et communique-moi le lin généré.

    Daniel

    samedi 1 juin 2019 10:28
  • OK

    Je n'ai pas accès à l'étape 3. J'ai accepté les conditions, inscris mon courriel et puis rien de ce passe.

    Tu trouvera la base de données en bleu sous le tableau à droite dans l'onglet Prévisions et le formulaire dans prévision et non prévisions.

    samedi 1 juin 2019 13:09
  • Saute l'étape 2. Après avoir choisi le fichier, clique sur "uploader".

    Daniel

    samedi 1 juin 2019 15:09
  • Voilà le lien

    https://mon-partage.fr/f/ZkY44Vwm/


    samedi 1 juin 2019 20:39
  • Bonjour,

    Quel format utilises-tu pour la saisie des dates ?

    Daniel

    dimanche 2 juin 2019 09:42
  • Format 1900

    date courte yyyy-MM-dd

    date longue d MMMM yyyy

    premier jour Dimanche

    dimanche 2 juin 2019 13:53
  • C'est bon à savoir. Il faut que je me mette dans les mêmes conditions. Mais que saisis-tu dans le textbox ? une date au format "yyyy-mm-dd" ?

    Daniel


    • Modifié Danielco dimanche 2 juin 2019 18:19
    dimanche 2 juin 2019 18:19
  • Je mat par exemple 1 mai et le code applique 2019-05-01 dans le text box.
    dimanche 2 juin 2019 19:11
  • Tu saisis "1 mai" avant que le code change le format ?

    Daniel

    dimanche 2 juin 2019 19:39
  • Oui, mais comme expliqué précédemment. Cela fonction, puis quand j'ai fermé mon classeur puis réouvert cela a planté car il m'écrit 01-05-2019 pour la première ligne et 05/02/2019 puis désordonné.

    Sache que j'utilise le même code pour d'autres formulaire et sa fonctionne. C'est-à-dire que j'inscrit 1 mai dans le textBox qui se change pour 2019-05-01 et s'inscrit dans la base de données 2019-05-01

    As-tu mon classeur?

    lundi 3 juin 2019 12:15
  • Oui, j'ai le classeur. Dans la sub "txtdate_AfterUpdate", si je mets :

    Me.txtdate = Format(CDate(Me.txtdate), "yyyy/mm/dd")

    au lieu de :

    Me.txtdate = Format(CDate(Me.txtdate), "dd/mm/yyyy")

    il me semble que j'obtiens le résultat voulu ("1 mai" donne "2019-05-01").

    Daniel

    lundi 3 juin 2019 13:30
  • Même dans la base de données. Car effectivement la première date du premier mois est toujours correct, mais pour les 11 autres mois c'est n'importe quoi dd/mm/yyy ou mm/dd/yyyy etc. sans respecter la logique 2019-05-01 2019-06-01 etc

    Comme expliqué précédemment, le format de date yyy-mm-dd fonctionne correctement dans les autres formulaires, mais il n'y a pas de répartitions de montants sur une période donnée. Je crois que le problème est dans la répartition sur 12 mois entre le txtbox et la base de donnsée 

    Moi, peu importe ce que je met comme format date j'obtiens toujours la même chose dd/mm/yyyy

    49 01-05-2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    50 05/02/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    51 02/06/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    52 06/03/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    53 03/07/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    54 07/04/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    55 04/08/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    56 08/05/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    57 05/09/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    58 09/06/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    59 06/10/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    60 10/07/2019 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance

    ou yyyy-mm-dd

    61 2019-05-01 Budgéter
    62 01/06/2019 Budgéter
    63 06/02/2019 Budgéter
    64 02/07/2019 Budgéter
    65 07/03/2019 Budgéter
    66 03/08/2019 Budgéter
    67 08/04/2019 Budgéter
    68 04/09/2019 Budgéter
    69 09/05/2019 Budgéter
    70 05/10/2019 Budgéter
    71 10/06/2019 Budgéter
    72 06/11/2019 Budgéter

    lundi 3 juin 2019 16:30
  • J'ai fait un test. Jai retirer l'ajout d'un mois

    'Me.txtdate = DateAdd("m", 1, Me.txtdate) '<-- Ajout d'un mois en plus ? la date de d?partx = x - 1 '<-- D?compte du nombre de fois qu'il faut faire la boucle

    J'obt

    49 2019-05-01 Budgéter
    50 2019-05-01 Budgéter
    51 2019-05-01 Budgéter
    52 2019-05-01 Budgéter
    53 2019-05-01 Budgéter
    54 2019-05-01 Budgéter
    55 2019-05-01 Budgéter
    56 2019-05-01 Budgéter
    57 2019-05-01 Budgéter
    58 2019-05-01 Budgéter
    59 2019-05-01 Budgéter
    60 2019-05-01 Budgéter

    iens la bonne forme de date mais pas d'incrémentation d'un mois à chaque ligne, ce qui est normale.

    lundi 3 juin 2019 16:39
  • Bonjour Daniel,

    Autre bizarerie. Toujours avec le modèle yyyy-mm-dd

    J'ai modifier la partie du code suivant (toujours dans le bouton budgéter) :

    Sheets("pr?visions").Range("ar" & dlt) = Format(Me.txtdate, "yyyy-mm-dd")
    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

    Et voici ce que j'obtiens (j'obtiens le bon ordre chronologique mais pas le bon ordre du format date) :

    49 5-1-2019 Budgéter
    50 6-1-2019 Budgéter
    51 7-1-2019 Budgéter
    52 8-1-2019 Budgéter
    53 9-1-2019 Budgéter
    54 10-1-2019 Budgéter
    55 11-1-2019 Budgéter
    56 12-1-2019 Budgéter
    57 1-1-2020 Budgéter
    58 2-1-2020 Budgéter
    59 3-1-2020 Budgéter
    60 4-1-2020 Budgéter

    mardi 4 juin 2019 01:19
  • Essaie encore :

    Private Sub txtdate_AfterUpdate()
    On Error GoTo Message
    Me.txtdate = Format(CDate(Me.txtdate), "dd/mm/yyyy")
    Exit Sub
    

    et dans Budgéter :

                Sheets("prévisions").Range("ar" & dlt) = DateValue(Me.txtdate)
                Sheets("prévisions").Range("ar" & dlt).NumberFormat = "yyyy-mm-dd"
    

    Daniel

    mardi 4 juin 2019 10:04
  • Sheets("prévisions").Range("ar" & dlt) = DateValue(Me.txtdate) et dans le txtdate j'obtien 01-05-2019

    61 1-5-2019 Budgéter
    62 5-2-2019 Budgéter
    63 2-6-2019 Budgéter
    64 6-3-2019 Budgéter
    65 3-7-2019 Budgéter
    66 7-4-2019 Budgéter
    67 4-8-2019 Budgéter
    68 8-5-2019 Budgéter
    69 5-9-2019 Budgéter
    70 9-6-2019 Budgéter
    71 6-10-2019 Budgéter
    72 10-7-2019 Budgéter
    73 7-11-2019 Budgéter
    74 11-8-2019 Budgéter
    75 8-12-2019 Budgéter
    76 12-9-2019 Budgéter

    Sheets("prévisions").Range("ar" & dlt).NumberFormat = "yyyy-mm-dd" Pas de date


    mardi 4 juin 2019 13:58
  • Hier j'ai fait plusieurs tests de dates et suis revenu à Me.txtdate = Format(CDate(Me.txtdate), "yyyy-mm-dd")

    49 2019-05-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    50 2019-06-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    51 2019-07-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    52 2019-08-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    53 2019-09-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    54 2019-10-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    55 2019-11-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    56 2019-12-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    57 2020-01-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    58 2020-02-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    59 2020-03-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance
    60 2020-04-01 Budgéter 5,42 $ 5600 Frais généraux d'administration 5685 Assurance

    Ça a fonctionné. J'ai fermé mon classeur puis réouvert et ça a planté à nouveau.

    mardi 4 juin 2019 14:00
  • Pas normal que ça plante, évidemment. Je n'ai pas d'idée.

    Daniel

    mardi 4 juin 2019 14:08
  • C'est un conflit de date selon mois ou une anomalie Excel.

    Dernière tentative. J'ai pros ce code d'un vidéo que j'ai visionné et l'ai adapté à ma réalité. Vers la 11e minutes

    https//www.youtube.com/watch?v=9Rpt_nvQohs&list=PLozmtcO5Oqdpi-24CF7GGgwvC6IkZMMFz&index=7

    mardi 4 juin 2019 15:26
  • Je viens de visualiser la partie de la vidéo de la partie qui m'intéresse. Je n'avais pas testé la boucle... J'ai fermé et rouvert le classeur. Pas de plantage. Les données sont toujours au bon format. Le problème pourrait venir de ton Excel. Fais une réparation.

    Daniel

    mardi 4 juin 2019 16:56
  • Merci

    Qu'elle est la procédure de réparation?

    J'ai même effacer et écrit le code au complet.

    mardi 4 juin 2019 17:25
  • Parfois, il y a un fonctionnement incorrect. La procédure est expliquée ici'est expliqué ici. Selon ta version d'Excel,, tu peux avoir besoin de tes identifiants :

    https://support.office.com/fr-fr/article/r%C3%A9parer-une-application-office-7821d4b6-7c1d-4205-aa0e-a6b40c5bb88b?ui=fr-FR&rs=fr-FR&ad=FR&fromAR=1

    Daniel

    mardi 4 juin 2019 17:35
  • Merci de ton aide Daniel, je poursuit avec les tech de Microsoft.

    Quelle version as-tu? Moi c'est office 365 business pro

    mercredi 5 juin 2019 01:13
  • Personnellement, j'ai Office 2016 Pro Plus.

    Daniel

    mercredi 5 juin 2019 07:12
  • Salut Daniel,

    Moi J'ai office 365 business pro avec la version la plus récente d'office.

    J'ai utilisé l'outil pour désinstaller et réainstaller office 365 et la suit office. Sans succès.

    J'ai appelé Microsoft et je peu accéder à un service téléphonique pour 300$ canadien.

    J'ai aussi créer un rapport suite à l'option ouvrir et réparer et voici ce que ça dit. Est-ce que toi tu comprend.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error111920_01.xml</logFileName><summary>Des erreurs ont été détectées dans le fichier « C:\Users\verre\JDS Formation Plus\01 Gestion JDS\02 Gestion budgétaire &amp; Financière\Canevas\JDS_Revenus-Dépenses_05-06-191.xlsm »</summary><additionalInfo><info>Excel a terminé la validation et la réparation de niveau fichier. Certaines parties du classeur peuvent avoir été réparées ou abandonnées.</info></additionalInfo></recoveryLog>

    mercredi 5 juin 2019 19:12
  • C'est le message standard quand tu veux ouvrir et réparer. En clair, ça veut dire qu'Excel a peut-être réparé quelque chose mais peut-être que non. Ferme  Excel et regarde, dans le même dossier qu'indiqué, s'il n'y a pas d'autres fichiers créés à peu près en même temps. De même, vérifie si la taille du fichier a évolué. Mais je ne pourrais pas t'aider davantage. J'arrive au bout de mon savoir ;-(

    Tu peux aussi exposer ton problème sur :

    https://www.developpez.net/forums/f542/logiciels/microsoft-office/excel/

    Il y là quelques "pointures".

    Daniel

    mercredi 5 juin 2019 19:45
  • Encore une chose. Pour réparer un classeur corrompu, commence par copier toutes les feuilles d'un coup dans un classeur vierge. Ensuite, copier les modules et les userforms dans ce classeur. Enfin, supprimer les liaisons qui pointent sur l'ancien classeur.

    Daniel

    mercredi 5 juin 2019 20:22
  • Merci

    Est-ce que tu veux dire feuille par feuille ou toutes les feuilles en même temps? Si toutes les feuilles comment fait-on? J'ai essayé vis les onglets et en prenant les coins en haut à gauche.

    mercredi 5 juin 2019 23:43
  • Clic droit sur le premier onglet et clic sur sélectionner toues les feuilles. Ensuite, clic droit sur un onglet et clic sur "Déplacer ou copier toutes les feuilles :

    Ensuite, il faut modifier les liaisons qui pointent sur le classeur d'origine.

    Daniel

    jeudi 6 juin 2019 08:05
  • Merci Daniel

    Pour les formulaires je n'ai pas cette option. Est-ce différent? Jamais fait.

    jeudi 6 juin 2019 12:43
  • J'obtient le message suivant

    « Impossible de déplacer ou copier un classeur contenant un tableau »

    jeudi 6 juin 2019 12:45
  • J'ai fait un test avec les onglets principaux feuille par feuille et avec le formulaire concerné. Même résultat. Ça plante.
    jeudi 6 juin 2019 13:47
  • Est-ce que ça plante uniquement quand tu te sers de ce formulaire ? Fais un scan de ton ordi avec un antivirus / malware. Essaie ausssi de démarrer Excel en maintenant la toouche Ctrl enfoncée (mode "sans échec").

    Daniel

    jeudi 6 juin 2019 14:09
  • Merci je vais essayer tout ça.

    Oui. Tout les autres formulaires fonctionnent nickel.

    J'ai posté sur le forum. Je n'ai pas vue d'option recevoir les réponse par e-mail. Est-ce que je recevrez les réponses sur mon courriel?

    jeudi 6 juin 2019 14:27
  • Et juste pour les dates. Car pour les autres box de ce formulaire tout se transfert correctement.
    jeudi 6 juin 2019 14:41
  • Oui, je les reçois, donc, ça doit être pareil pour toi.

    Daniel

    jeudi 6 juin 2019 16:51
  • Salut Daniel,

    J'ai reçu ce message. Ça te dit quelque chose?

    Bonjour,

    Dans cette ligne, le paramètre Me.txtdate dans DateAdd est une valeur alpha. Ne faudrait-il pas la convertir en date ?

    Me.txtdate = DateAdd("m", 1, Me.txtdate) '<-- Ajout d'un mois en plus ? la date de d?part

    Ça me semble logique puise que c'est exactement dans cette ligne qu'on ajoute 1 mois à chaque loop. Si oui, sous quelle forme j'écrit le format date?

    vendredi 7 juin 2019 13:07
  • Bonjour,

    Effectivement, j'avais trouvé ça curieux mais le mois s'incrémente bien. Sinon il faudrait déclarer une variable en haut du module :

    Dim Dat As Date
    

    Dans txtdate_AfterUpdate :

    Private Sub txtdate_AfterUpdate()
    On Error GoTo Message
    'Me.txtdate = Format(CDate(Me.txtdate), "dd/mm/yyyy")
    Dat = CDate(Me.txtdate)
    

    et dans "Budgeter" :

                Sheets("prévisions").Range("ar" & dlt) = Dat
                Sheets("prévisions").Range("ar" & dlt).NumberFormat = "yyyy-mm-dd"
    
    Daniel

    vendredi 7 juin 2019 13:34
  • Salut

    'Date
    Private Sub txtdate_AfterUpdate()
    On Error GoTo Message
    Me.txtdate = Format(CDate(Me.txtdate), "yyyy-mm-dd") --> J'obtien le résultat ci-dessous avec ou sans - Mai sans je n'obtiens plus la mise en forme automatique dans le text box je dois écrire la date manuellement
    Dat = CDate(Me.txtdate)
    Exit Sub

    'Bouton budg?ter
    Private Sub budg?ter_Click()
    Dim x As Integer
    Dim Dat As Date
    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) = Dat
                Sheets("pr?visions").Range("ar" & dlt).NumberFormat = "yyyy-mm-dd"
                Sheets("pr?visions").Range("as" & dlt) = Me.txttype
                Sheets("pr?visions").Range("at" & dlt) = paiementmens

    Au moins c'est différent

    49 1900-01-00 Budgéter 2,67 $
    50 1900-01-00 Budgéter 2,67 $
    51 1900-01-00 Budgéter 2,67 $
    52 1900-01-00 Budgéter 2,67 $
    53 1900-01-00 Budgéter 2,67 $
    54 1900-01-00 Budgéter 2,67 $
    55 1900-01-00 Budgéter 2,67 $
    56 1900-01-00 Budgéter 2,67 $
    57 1900-01-00 Budgéter 2,67 $
    58 1900-01-00 Budgéter 2,67 $
    59 1900-01-00 Budgéter 2,67 $
    60 1900-01-00 Budgéter 2,67 $

    dimanche 9 juin 2019 12:28
  • Est-ce que tu peux poster ton dernier classeur ?

    Daniel

    dimanche 9 juin 2019 15:54
  • Voilà

    mon-partage.fr/f/o0Xn3phx

    Il n'y a rien à faire avec cette ligne?

    Me.txtdate = DateAdd("m", 1, Me.txtdate) '<-- Ajout d'un mois en plus ? la date de d?part

    lundi 10 juin 2019 12:42
  • J'oubliais. J'avais un virus de type trojan et il est éliminé
    lundi 10 juin 2019 12:43
  • J'ai enlevé le https pcq je ne peut télécharger des liens et des images.

    mon-partage.fr/f/pCIKhTQi


    lundi 10 juin 2019 13:46
  • Tu as reçu le nouveau lien?
    lundi 10 juin 2019 17:22
  • Mais non ! Il faut que tu le mettes dans ton message. tu peux utiliser cette icône :

    lundi 10 juin 2019 17:56
  • Haaaaa!

    C'est fait mais je ne vois rien.

    lundi 10 juin 2019 18:06
  • J'ai utilisé le lien de mon-partage
    lundi 10 juin 2019 18:07
  • Oui. Une fois que tu as créé ce lien, il faut le copier et le coller dans ton message, comme tu avais fait la première fois.

    Daniel

    lundi 10 juin 2019 18:19
  • En fait, je ne fait pas copier/coller car on me refuse l'envoi. Je l'écrit à la main sans le https.

    mon-partage.fr/f/pCIKhTQi

    lundi 10 juin 2019 18:32
  • A nouveau, l'adresse est incorrecte :

    Fais attention, mon.partage.fr crée deux liens : un lien de téléchargement et un lien d'administration. C'est le premier qu'il me faut.

    Daniel

    lundi 10 juin 2019 19:23
  • https://mon-partage.fr/f/i4Xc53qW/
    lundi 10 juin 2019 20:27
  • Yep ! Je l'ai ! Je regarde.

    Daniel

    mardi 11 juin 2019 12:00
  • You hou Good
    mardi 11 juin 2019 12:08
  • D'autres réponses

    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)...

    ?dateadd("m",4,"03/02/2019")

    03/06/2019

    ?dateadd("m",4,"03/25/2019")

    25/07/2019

    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.

    Function getDateFromString(Value As String, DateFormat As String) As Date
     
    If Format(CDate(Value), DateFormat) = Value Then getDateFromString = CDate(Value)
    End Function


    ?getdateformating ("25/02/2019","dd/mm/yyyy")

    25/02/2019

    ?getdateformating ("02/25/2019","dd/mm/yyyy")

    00:00:00

    ?getdateformating ("02/25/2019","mm/dd/yyyy")

    25/02/2019

    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.

    jeudi 13 juin 2019 13:45
  • Bonjour

    Je ne trouve pas la réponse que je t'avais faite suite à ton message :

    En tête du module du userform ou d'un module standard :

    Public Dat As Date

    Dans le code de "Budgéter", supprime la ligne :

    Dim Dat...

    Dans "txtdate_AfterUpdate" , mets

    Dat = CDate(Me.txtdate)

    au lieu de la ligne

    Me.txtdate = Format(CDate(Me.txtdate), "yyyy-mm-dd")

    Dans "Budgéter", modifie comme suit :

                'Trouver la dernière ligne
                dlt = Sheets("prévisions").Range("ar10000").End(xlUp).Row
                Sheets("prévisions").Range("ar" & dlt) = Dat
    

    et :

    Dat = DateAdd("m", 1, Dat) '<-- Ajout d'un mois en plus à la date de départ

    Je tiens le classeur à ta disposition.

    Daniel

    jeudi 13 juin 2019 14:06
  • Merci Daniel

    Si je comprend bien, dans la section des codes, au haut j'inscrit ce que tu me dit sans appeler de private sub?

    jeudi 13 juin 2019 19:20
  • Exactement, c'est une déclaration de variable publique. Sa valeur est récupérable dans toutes les macros du userform :

    Daniel

    jeudi 13 juin 2019 19:57
  • 'Date Private Sub txtdate_AfterUpdate() On Error GoTo Message 'Me.txtdate = Format(CDate(Me.txtdate), "yyyy-mm-dd")  --> Retiré Dat = CDate(Me.txtdate) Exit SubElse     '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) = Dat             'Sheets("pr?visions").Range("ar" & dlt).NumberFormat = "yyyy-mm-dd" --> Retiré             Sheets("pr?visions").Range("as" & dlt) = Me.txttype

    pour moi, la seule façon de convertir une saisie textuelle en date, c:;" vérifier="" été="">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.

    essaie ca sans garantie

    j:;" testé="">avec datevalue simplement ca fonctionne aussi

    jeudi 13 juin 2019 20:10
  • Salut, une personne m'as fait parvenir un fichier Excel avec les codes ci-dessous. J'ai testé son fichier et ça fonctionne.

    Voici le code

    '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 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

    Je l'ai testé mais j'ai certains bug

    '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 --> Dans son code il n'y as pas cette ligne. Je L'ai mise car sans le code renvoi à la deuxième ligne de la base de donnée.
                Sheets("pr?visions").ListObjects(1).ListRows.Add
                End If Message 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" Pas correct, qu'est-ce que je devrais mettre
                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, Dat) '<-- 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

    Merciiiii

    vendredi 14 juin 2019 01:29
  • Vu comme ça, entre If et End If, tu as un "Do" sans "Loop", lequell se trouve après le End If.

    Daniel

    vendredi 14 juin 2019 09:14
  • Résolu Daniel

    Voici le code

    'Bouton budg?ter
    Private Sub budg?ter_Click()
    Dim x As Integer
    Dim MaDate As Date
    Dim MaLigne As ListRow
    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 txtdatefin <> "" Then
            MaDate = CDate(txtdate)
            x = DateDiff("m", CDate(txtdate), CDate(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) = MaDate
                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
                         
                x = x - 1 '<-- D?compte du nombre de fois qu'il faut faire la boucle
                Set MaLigne = Nothing
           
            Loop
           
            Sheets("pr?visions").ListObjects(1).ListColumns("Date").DataBodyRange.NumberFormat = "yyyy-mm-dd"

        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

    Merci pour ta contribution à la solution de mon problème.

    mardi 18 juin 2019 15:22
  • Parfait alors. Bonne continuation.

    Daniel

    mardi 18 juin 2019 15:35
  • Merci

    Si j'aimais tu prévoit venir au Québec pay de tes ancêtres (peut-être) fait moi signe, je te ferai visiter notre beau coin de pays :)

    mardi 18 juin 2019 16:01
  • Grand merci pour ta proposition ! Je n'ai rien prévu de tel, mais à l'occasion...

    Daniel

    mardi 18 juin 2019 16:11