Problème de date

Impression des extraits de la banque du « date de début » à la « date d’aujourd’hui ».

La partie de programme qui pose problème est décrit dans le fichier ci-joint (données fictives).

Je n’arrive pas à trouver l’erreur qui permet de placer en « G1 » la date de début de la liste d’impression (erreur de code sans doute ?).

Quelqu’un peut-il m’aider ?

Sylb

Bonjour

Ci joint ma solution

A+ François

Bonjour fanfan38,

Merci beaucoup pour la correction du code. Une ligne intermédiaire qui permet d'afficher la date début.

Néanmoins, la date de début n'est pas bonne, il devrait s'afficher le 16 septembre.

La cause est sans doute que les dates ne se suivent pas ?

Bonne journée.

Sylb

Non dans ta macro tu mets:anneedeb = DateAdd("d", -nbrjours, madate)

nbrjours étant=8 16/9/23-8....

Je t'ai fait une macro (à prendre ou à laisser) recopie les données en feuil2...

A+ François

Rebonjour Fanfan38,

Merci pour la correction et la macro. J'étudie ta solution et te donne des nouvelles.

En attendant, quand j'ai exécuté ta macro il donne une erreur à la ligne 13 " incompatibilité de type".

D'autre part, les extraits devraient commencer par la date ancienne et terminer par la date récente, mais cela c'est un détail que je modifierai sans doute facilement.

Bonne après-midi.

Sylb

J'ai modifié la macro...

C'est dû à un montant qui est ni 115,00 EUR ni numérique...

Si ça perdure regarde les montants et donne moi les montants différents...

A+ François

Fanfan38,

Merci pour la réponse et le suivi. Je teste tout cela à l'aise et te tiens au courant.

A bientôt.

Sylb

Bonjour fanfan38,

J'ai testé la macro que tu m'as envoyée, je t'en remercie beaucoup.

Il reste un problème, dans mon programme principal je testais si l'année de début et l'année en cours était la même et c'était cette instruction-là qui me donnait toujours une erreur.

Dans ta macro (si j'ai bien compris) il n'y a pas de test, et le résultat est toujours année 2023, alors que la date de début est évidemment 2022.

P.S.-J'ai encore toujours des difficultés pour écrire le code qui calcule résultat x et puis et qu'il se place dans une cellule avec l'instruction range , et je ne vois pas exactement quand il faut ajouter ".Value" à gauche ou à droite du signe "=".

Bonne journée.

Sylb

Bonjour

C'est pas evident vu qu'on a pas l'année....

J'ai fait si mois plus grand que mois en cours année= année-1 mais

A+ et A2 c'est 25 février faut il en déduire, ce que j'ai fait, que c'est l'année dernière...

Tu n'as pas précisé, j'ai donc fait la modif sur la macro traitement

A+ François

Bonjour fanfan38

Merci pour ta réponse et ton suivi, malheureusement le programme ne fonctionne pas exactement comme il faudrait.

Le principe est simple mais je n’ai pas ton expérience pour écrire correctement le code. Voir par exemple le P.S. du message précédent)

On n’a pas l’année de début, mais on a l’année de fin qui est donnée par la fonction date(year(today))) et de plus on a le nombre de jours qu’on a calculé (le nombre de lignes /6).

Donc la date de début sera donc la date d’aujourd’hui moins le nombre de jours.

En faisant le test sur les mois cela ne marchera pas pour (par exemple) du 15/1/2022 au 10/2/2023, puisque le mois janvier 2022 < février 2023.

Tu m’as beaucoup aidé et j’ai appris de nouvelles fonctions grâce à tes messages, mais si tu as envie de passer à autre chose, n’hésite pas.

Sylb

Bonjour

On a 8 dates. Selon ton résonnement:

Donc la date de début sera donc la date d’aujourd’hui moins le nombre de jours.

Sur ta macro le jourdeb est le dernier, soit le 16 septembre...

Le value n'est pas obligatoire mais c'est plus propre... [G1] = anneedeb ou Range("G1") = anneedeb ou Range("G1").Value = anneedeb

c'est la même chose...

Mets moi ton calcul de x et je le traduirai...

A+ François

Bonjour et merci pour ta réponse et ta patience,

Tu as raison on n’arrivera pas à la date de début de cette façon (sauf s’il y a des mouvements chaque jour du début à la fin), ou une condition supplémentaire, par exemple que l’on ne retourne pas plus d’un an en arrière.

En fait mon programme principal fonctionnait parfaitement tant que l’on restait dans la même année. Le problème s’est posé lors du passage de l’année 2022 à 2023, donc à cheval sur 2 années.

J’ai alors voulu poser tester si « l’année de la datefin > l’année de la datedebut » (si 2023> 2022) .

C’est le test qui posait problème, j’avais toujours des erreurs comme « incompatibilité de type» , erreur d’exécution « 13 », ou erreur 1004 dans la ligne de test :

Range("u1") = ("=DATE(IF(YEAR(o1)>=YEAR(t1),YEAR(o1),YEAR(o1)-1),S1,Q1)")

Pour le mois ou le jour de début il n’y a pas de problème puisqu’on peut atteindre la fin de la liste à partir du nombre de lignes.

A la fin il y a une erreur aussi dans la ligne d’impression du titre à la fin du programme:

Range("c1") = "Extraits du " & datedebut & " au " & datefin & " - " & nom

Pour les montants, format nombre uniquement (pas de format monnaie).

J’ai utilisé le type variant (pour éviter des erreurs de compatibilité (que je modifierai si nécessaire par la suite) .

Je joins un listing de la partie utile du programme qui pose problème, le reste ne sert que pour la mise en forme de l’impression des extraits.

Bonne journée.

PS: Le service pour l'envoi de fichier est indisponible pour le moment, je ne peux que le recopier ic:

Dim nlign As Variant

Sheets("Feuil1").Copy Before:=Sheets(2)

Sheets("Feuil1").Name = "Données"

Sheets("Données").Tab.Color = RGB(255, 96, 0)

Sheets("Feuil1 (2)").Select

Sheets("Feuil1 (2)").Name = "Extraits"

Sheets("Extraits").Tab.Color = RGB(255, 255, 0)

Range("a1").Select

dates

conversiondates

End Sub

'Private Sub UserForm_Click()

'End Sub

Sub dates()

Dim moisdebut As Variant

Dim jourdebut As Variant

Dim moisfin As Variant

Dim jourfin As Variant

Dim datedebut As Date

Dim datefin As Date

Range("P1") = "datedebut"

Range("K1") = "datefin"

nlign = Range("a1").End(xlDown).Address

nlign = Range(nlign).Row

jourdebut = Range("A" & nlign-5)

moisdebut = Range("A" & nlignt-4)

Range("Q1") = jourdebut 'jour ancien

Range("R1") = moisdebut 'mois ancien abrégé de la banque (texte)

Rechdatedebut ‘conversion du nom de mois en n° du mois de début

Range("o1") = ("=DATE(YEAR(TODAY()),N1,L1)") 'année de début (la plus ancienne) avant test

moisfin = Range("a2")

jourfin = Range("a1")

Range("L1") = jourfin 'jour fin

Range("M1") = moisfin 'mois fin

Rechdatefin ‘conversion du nom de mois en n° du mois

Range("o1") = ("=DATE(YEAR(TODAY()),S1,Q1)") 'année de date fin (la plus récente) avant test

End Sub

Sub conversiondates() ‘test

Range("u1") = ("=DATE(IF(YEAR(o1)>=YEAR(t1),YEAR(o1),YEAR(o1)-1),S1,Q1)")

'adaptation année date début (la plus ancienne) ?

datedebut = Range("u1").Value

datefin = Range("o1").Value

End Sub

Sub rechdatefin()

moisfin = Range("M1")

Select Case moisfin

Case "JANV"

moisfin = 1

Case "FÉVR"

moisfin = 2

Case "MARS"

moisfin = 3

Case "AVR"

moisfin = 4

Case "MAI"

moisfin = 5

Case "JUIN"

moisfin = 6

Case "JUIL"

moisfin = 7

Case "AOÛT"

moisfin = 8

Case "SEPT"

moisfin = 9

Case "OCT"

moisfin = 10

Case "NOV"

moisfin = 11

Case "DÉC"

moisfin = 12

End Select

Range("N1").Value = moisfin

End Sub

Sub rechdatedebut()

moisdebut = Range("R1")

Select Case moisdebut

Case "JANV"

moisdebut = 1

Case "FÉVR"

moisdebut = 2

Case "MARS"

moisdebut = 3

Case "AVR"

moisdebut = 4

Case "MAI"

moisdebut = 5

Case "JUIN"

moisdebut = 6

Case "JUIL"

moisdebut = 7

Case "AOÛT"

moisdebut = 8

Case "SEPT"

moisdebut = 9

Case "OCT"

moisdebut = 10

Case "NOV"

moisdebut = 11

Case "DÉC"

moisdebut = 12

End Select

Range("S1").Value = moisdebut

End Sub

J'ai fait plus simple (dans la macro traitement) j'enregistre la 1ère date dans une variable 25/02/2023

et si les dates suivantes ont un mois + grand c'est que c'est l'année d'avant

Qu'est ce que tu en penses

A+ François

ps: tu dis que cette appli marchait bien avant... j'ai un doute car today n'existe pas en vba...

Bonsoir, fanfan38

Merci beaucoup pour ton fichier modifié.

Ton programme fonctionne très bien pour moi, car je retourne au maximum 2 mois en arrière

Mais en faisant des essais, je constate que si on choisit comme date de début 15/1/2022 et date de fin le 2 février 2023, il y a une erreur pour l’année de début puisque le « test mois précédent » est plus petit . Il faut donc être prudent si on veut l’employer dans tous les cas.

De toute façon cela me convient parfaitement dans mon cas et te remercie encore pour le suivi.

Je te joins le fichier avec 2 données supplémentaires pour montrer le résultat.

Sylb

Rechercher des sujets similaires à "probleme date"