XL 2019 Comment comparer 2 dates vba

chris4785478547

XLDnaute Junior
Bonsoir à tous,

Pour savoir si une date se trouve dans un intervalle, j'ai choisi de les convertir en numérique grâce à DATEVALUE (à tort ou à raison...)
Mais ma comparaison ne marche pas, j'ai mis des espions pour déboguer et je constate que mes variables (DATEDEBUTNUMERIQUE et DATEFINNUMERIQUE) théoriquement traitées de la même façon ne sont pas égales (je travaille avec les deux dates =16/12/20)
Je joins une impression d'écran.
Merci par avance
procedure ComptageNbreDeLignesAInserer.png
 
Solution
Bonsoir @chris4785478547, le fil,

merci pour le code de ta carte Visa, et désolé pour le retard de ma réponse,
j'ai été pris par des affaires personnelles qui ont duré très longtemps.

c'est marrant, mais à chaque fois, « Rouen », ça m'rappelle la pauvre
Jeanne d'Arc qui a fini sur le bûcher ! c'est la conséquence de mes
anciens cours d'histoire, avec moult dates à retenir par cœur ; c'était
le 30 mai 1431, un p'tit peu avant l'arrivée du premier PC ! :rolleyes:

moi j'habite en France, pas loin d'Paris ; j'aime pas la grisaille de ma
banlieue ; j'préférerai de loin être en province, à la campagne, ou près
d'la mer et d'la plage, mais hélas, j'ai pas l'choix !!! 😭 😭 😭

je te remercie pour ton intention qu'on mange ensemble...

soan

XLDnaute Barbatruc
Inactif
Rebonsoir chris,

dans un code VBA, les dates doivent être mises entre 2 signes dièses, comme ceci :

DateDébut = #12/16/2020#
DateFin = #12/20/2020#

si les 2 dates sont les mêmes, tu peux mettre :

DateDébut = #12/16/2020#
DateFin = DateDébut

attention : dans VBA, c'est en anglais ➯ d'abord le mois, puis le jour !
l'année sur 4 chiffres ; mais tu peux utiliser DateDébut au lieu de
DateDebut. ;)

(normalement, les comparaisons de dates devraient être bonnes)


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
si ta variable NbreDeLignesAInserer est une variable locale à ta sub
et pas une variable globale, alors
NbreDeLignesAInserer = 0 est
inutile car c'est fait automatiquement si tu déclares :


Dim NbreDeLignesAInserer As Integer ou :

Dim NbreDeLignesAInserer As Long

ça dépend du nombre de lignes que tu veux insérer d'un coup :
avec Integer, maximum = 32 767 ; avec Long, maximum =
2 147 483 647.

si tu veux insérer moins de 256 lignes d'un coup, tu peux mettre :


Dim NbreDeLignesAInserer As Byte

car maximum = 255.

soan
 

soan

XLDnaute Barbatruc
Inactif
c'est très bizarre, il y a en fin de sub, juste avant End Sub :

rep = MsgBox("NbreDeLignesAInserer =", NbreDeLignesAInserer, vbOKOnly)

* si tu voulais faire une demande de confirmation pour insérer n lignes, tu dois placer
cette instruction AVANT le code VBA qui fait cette insertion de lignes.

* si tu voulais juste afficher un message comme quoi la sub a inséré n lignes,
alors mets simplement :


MsgBox "Nombre de lignes à insérer = " & NbreDeLignesAInserer

soan
 

soan

XLDnaute Barbatruc
Inactif
la prochaine fois, mets un code VBA entre balises de code plutôt qu'une image !
c'est pas pratique de lire ton image et de tout recopier manuellement ! 😭

si tu avais fait ça, j'aurais réécrit tes 2 autres subs qui sont en dessous :
la sub EffacerLignes() et la sub SupprimerUneLigne().

mieux encore : joindre un fichier exemple sans données confidentielles.


soan
 

chris4785478547

XLDnaute Junior
=> Salut Soan,

Merci pour tes posts, j'ai eu de quoi faire.
Cest mon code Visa ! tu peux l'utiliser! ;)
Cela dit, sans rire, je ne sais pas si nous sommes très distants géographiquement mais après cette putain de pandémie, j'aurais bien proposé une bouffe à des gens comme toi, Staple, Job, histoire de montrer ma reconnaissance. Je suis à Rouen, où es tu ?
Désolé pour la copie d'écran, j'ai pensé que c'était le mieux à cause du mode débogage et l'affichage des espions.
Mais évidemment, si c'est pour que tu te tapes la saisie du code... Tu n'aurais jamais dû le retaper, il te suffisait de me le demander, je n'ai rien de confidentiel, à plus forte raison pour mes sauveurs !
Quoi qu'il en soit, je n'arrive pas à me demmerder de ces formats de date, la comparaison de type date1>date2 ne fonctionne pas. Je crois avoir appliqué ce que tu m'as dit mais je n'ai peut être pas été assez précis dans ma demande.
C'est pourquoi je te joins ma procédure, s'il te manque d'autres parties de mon programme, n'hésite pas à me le dire !!!
VB:
Sub ComptageNbreDeLignesAInserer()

DateDebut = #12/16/2020#
DateFin = #12/16/2020#

With Workbooks("Banque.xlsx").Worksheets("Feuille1")
    
  
    NbreDeLignesAInserer = 0
    For LigneEnCours = 3 To 1000
    
    
    DateLueSource = Range("A" & LigneEnCours)
    
        If (DateDebut <= DateLueSource And DateLueSource <= DateFin) Then
            NbreDeLignesAInserer = NbreDeLignesAInserer + 1
            
        End If
    Next LigneEnCours
End With
rep = MsgBox("NbreDeLignesAInserer = " & NbreDeLignesAInserer, vbOKOnly)

End Sub

Encore merci
 

Staple1600

XLDnaute Barbatruc
[...]mais après cette putain de pandémie, j'aurais bien proposé une bouffe à des gens comme toi, Staple, Job, histoire de montrer ma reconnaissance. Je suis à Rouen
[...]
Ah le Mont Riboudet
Le Centre St Sever
La Rampe Bouvreuil
Le lycée Blaise Pascal
Toute ma jeunesse ;)
Je passerai à Rouen cette semaine
(retour en famille pour les fêtes)
Que d'ailleurs, je souhaite, bonnes à tous par anticipation ;)
 

chris4785478547

XLDnaute Junior
Salut Staple,

Le monde est petit !
Tu me feras savoir si on peut se croiser, juste pour se saluer dans un 1er temps en attendant le printemps, j'espère qu'on en aura fini...Mais je suis peut être trop optimiste.
Tu as l'occasion de passer plusieurs fois par an ou pas ?
D'où es tu ?
 

Staple1600

XLDnaute Barbatruc
Re

Je suis normand d'origine...
J'ai passé ma jeunesse en région rouennaise
Plus exactement dans la campagne entre Barentin, Pavilly et Maromme.
(Je ne suis pas trop précis, RGPD oblige ;)
Et désormais, si je suis moi, il paraitrait que je suis assujetti à la taxe d'habitation (plus pour longtemps) à cette bonne ville estudiantine où naquirent les Trans Musicales.

Je ne fais que passer à Rouen (et je m'arrête pour deux chose)
1) le frangin
2) la foire Saint-Romain

Mais bon, tout ceci n'a rien à voir avec la question.
(Mais c'est gentil de ta part de vouloir partager le pain avec nous)
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir @chris4785478547, le fil,

merci pour le code de ta carte Visa, et désolé pour le retard de ma réponse,
j'ai été pris par des affaires personnelles qui ont duré très longtemps.

c'est marrant, mais à chaque fois, « Rouen », ça m'rappelle la pauvre
Jeanne d'Arc qui a fini sur le bûcher ! c'est la conséquence de mes
anciens cours d'histoire, avec moult dates à retenir par cœur ; c'était
le 30 mai 1431, un p'tit peu avant l'arrivée du premier PC ! :rolleyes:

moi j'habite en France, pas loin d'Paris ; j'aime pas la grisaille de ma
banlieue ; j'préférerai de loin être en province, à la campagne, ou près
d'la mer et d'la plage, mais hélas, j'ai pas l'choix !!! 😭 😭 😭

je te remercie pour ton intention qu'on mange ensemble, c'est très
gentil de ta part ! 🙂 d'un autre côté, je ne suis pas très mobile,
et j'dois rester dans les environs de ma grise banlieue. 😢

j'ai réécrit ainsi ta macro :

VB:
Sub ComptageNbreDeLignesAInserer()
  Const DateDebut As Date = #12/16/2020#
  Const DateFin As Date = #12/16/2020#
  Dim DateLueSource As Date, LigneEnCours%, NbreDeLignesAInserer%
  With Worksheets("Feuille1")
    For LigneEnCours = 3 To 1000
      DateLueSource = Cells(LigneEnCours, 1)
      If DateLueSource >= DateDebut And DateLueSource <= DateFin Then
        NbreDeLignesAInserer = NbreDeLignesAInserer + 1
      End If
    Next LigneEnCours
  End With
  MsgBox "NbreDeLignesAInserer = " & NbreDeLignesAInserer
End Sub
mais sans fichier, je n'ai pas pu tester ; à toi d'essayer. 😉

soan
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

=>chris
Effectivement un fichier éclairerait nos lanternes
Car tout comme le code VBA du message#13, celui-ci que je viens de tester sur mon propre fichier de test renvoie le même résultat.
VB:
Sub Test()
ComptageLignes #12/16/2020#
End Sub
Private Sub ComptageLignes(vDate As Date)
MsgBox Application.CountIf(Range("A:A"), vDate)
End Sub
NB: =>chris
Pourquoi DateDebut et DateFin sont égaux ?
Il faut vraiment que tu mettes un fichier parce cela reste flou.
 
Dernière édition: