Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

richert90

XLDnaute Occasionnel
Bonjour,

J'ai insérer dans un userform un calendrier avec DTPicker. le problème c'est que je viens de voir que sur Excel 2007 ou 2013, on ne voit plus les calendriers....
Je voudrais savoir si vous aviez un code pour avoir un calendrier qui fonctionne quelle que soit la version d'Excel et sans avoir besoin de téléchargez des modules complémentaires.

Merci d'avance,
 

Roland_M

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

re

voir modif ...

tu mets Filters.Hide

après il faut remettre Filters.Show
sinon tu retournes sur excel !

EDIT: même sans hide ni show !
voir modif ...
 

Pièces jointes

  • testrichert90.xlsm
    117.3 KB · Affichages: 58
  • testrichert90.xlsm
    117.3 KB · Affichages: 60
  • testrichert90.xlsm
    117.3 KB · Affichages: 63
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

re

voir ci-joint plus facile pour toi comprendre !
j'ai simplement incorporé les dates dans ton userf Filters !
ainsi ce sera plus clair pour toi !

les dates sont dans les deux control DTPDateDebut et DTPDateFin
à toi d'en faire ce que tu veux !
 

Pièces jointes

  • testrichert90_2.xlsm
    101.8 KB · Affichages: 62
  • testrichert90_2.xlsm
    101.8 KB · Affichages: 60
  • testrichert90_2.xlsm
    101.8 KB · Affichages: 57

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Re,

Merci pour ton aide, j'avais bien réussi à faire ce que je voulais avec le bouton "Filter". L'idée de remplacer le bouton "Calendar" par directement les 2 champs de date est pas mal car ça permet de gagner du temps.
Juste une dernière question: les 2 champs de dates sont initialisés avec la date du jour, c'est possible d'avoir ces champs vides au départ ou pas?
 

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Re,

J'ai encore un problème concernant ces fichus format de date!!!
Dans le fichier joint, quand je choisis 2 dates par exemple le 03/02/2014 et la date du jour dans le calendrier et que je clique sur filter pour garder toutes mes données (onglet1) qui sont comprises entre ces 2 dates, je vois que le filtre appliqué est en fait un filtre entre le 02/03/2014 et la date du jour.....
Comment cela se fait-il???

Merci d'avance,
 

Pièces jointes

  • BON_TEST.xlsm
    121.5 KB · Affichages: 53

Roland_M

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

re et dern !!!!!!

moi ce que je ne comprends pas c'est que je me donne du mal pour t'arranger ton bazar
et que toi tu fais n'importe quoi !
comme tu pratiques là ça ne peux pas fonctionner !

tout ce que je t'ai fais je n'y vois rien paraître !?
tu m'envoies toujours le même fichier dans le même état avec les mêmes boulettes !

je me demande si tu n'es pas en train de jouer avec mes pieds !

tu prends celui qui est au poste #62 il fonctionne très bien
mais tu n'en a même pas tenu compte, peut être même pas essayé !?
 
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Oui je me suis trompé de fichier
Voila celui que je voulais joindre.
Par contre pour ce que je dis avec les filtres sur les dates, j'ai le même problème avec ce fichier....
Regarde en prenant 2 dates: 03/02/2014 et aujourdui puis clique sur le bouton filter. Ensuite dans l'onglet 1, colonne 1, tu pourra voir dans les filtres personnalisé que c'est au format MM/JJ/AAAA...
 

Pièces jointes

  • testrichert90_2.xlsm
    117.5 KB · Affichages: 48
  • testrichert90_2.xlsm
    117.5 KB · Affichages: 55
  • testrichert90_2.xlsm
    117.5 KB · Affichages: 56

Roland_M

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

re

je me suis tout de même intéressé à ton cas !
effectivement filtrer depuis vb avec des dates ça pose problème !
en fouillant sur le net j'ai trouvé la réponse !
c'est ceci qui ne fonctionne pas (même chez moi !)
ActiveSheet.Range("$A$1:$" & lettre & I).AutoFilter Field:=1, Criteria1:=">" & Filters.DTPDateDebut, Operator:=xlAnd, Criteria2:="<" & Filters.DTPDateFin

il faut le mofifier comme ceci pour inverser de vb à excel et là même chez moi c'est ok !
Format(DTPDateDebut, "mm/dd/yyyy") et idem pour fin !
Format(CalendrierDateDebutSELECT, "mm/dd/yyyy") < ce serait mieux !
car n'oublies pas CalendrierDateDebutSELECT c'est un format date
et DTPDateDebut n'est que du texte dans un label !

soit ceci à reprendre:
ActiveSheet.Range("$A$1:$" & lettre & I).AutoFilter Field:=1, Criteria1:=">" & Format(CalendrierDateDebutSELECT, "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<" & Format(CalendrierDateFinSELECT, "mm/dd/yyyy")

mais tu peux garder ça si tu veux, ça fonctionne aussi comme ceci :
ActiveSheet.Range("$A$1:$" & lettre & I).AutoFilter Field:=1, Criteria1:=">" & Format(DTPDateDebut, "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<" & Format(DTPDateFin, "mm/dd/yyyy")


c'est pareil lorsque l'on colle une date sur une cellule c'est du texte !
il faut rajouter Cdate() exemple Range("A1")= Cdate(MaDate)

et entre nous ton truc > & lettre & I
qui se baladent dans la nature c'est pas très catholique ! ça manque de clarté !
il faut fouiller pour voir d'où ça vient !? ce serait mieux de mettre ça en fonction !
une fonction nb_lignes() ainsi tu aurais I = nb_lignes ça c'est plus clair !
soit au lieu de Sub nb_lignes()
tu mets Function nb_lignes()
et dans le code au lieu de I remplacer par
nb_lignes = Sheets(1).Range("A1").End....
et faire idem avec nb_colonnes pour lettre


ensuite dans l'userf il est inutile de mettre tout le temps Filters.machun ou alors remplacer par Me.
car si tu changes ton userf de nom tu devras modifier tout ton code, alors qu'avec Me c'est inutile !
exemple Filters.DTPDateDebut
DTPDateDebut c'est suffisant ou alors Me.DTPDateDebut


EDIT: voir ci-joint avec toutes les modif ! et voir avec en entrées les dates de la base !
 

Pièces jointes

  • testrichert90_3.xlsm
    120.8 KB · Affichages: 61
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour Roland_M

Encore merci de consacrer du temps à ce sujet!

J'avais aussi la solution proposée post #28 par Staple1600 qui marche très bien pour filtrer sur des dates.
Je vais en effet reprendre les procédures pour les remplacer par des fonctions.

Encore merci :)
 

Roland_M

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

re

pourquoi pas ! soit comme ceci !
ActiveSheet.Range("$A$1:$" & Lettre & I).AutoFilter Field:=1, Criteria1:=">=" & CLng(CalendrierDateDebutSELECT), Operator:=xlAnd, Criteria2:="<=" & CLng(CalendrierDateFinSELECT)

mais, je comprends pas, ça fonctionne très bien ce que t'ai fais !
c'est pas ce que tu voulais ?
tu devrais le reprendre plutôt que des copier/coller car les variables et autres ont été adapté dans tout classeur !
surtout que j'y ai corrigé beaucoup d'erreurs à venir !
tu cours encore au devant des embrouilles !?
 
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour à tous,

J'utilise régulièrement le calendrier sans aucun souci.
Une fois j'avais demandé si c'était possible d'initialiser les champs dates (post #64) à "vides".
Je rebondis sur ça car j'ai une question qui y ressemble un petit peu. J'aimerais initialiser la date de fin avec une date récupérée dans une variable date.

Je sais que par défaut on a :

Code:
 CalendrierDateDebutSELECT = Date
   ' CalendrierDateFinSELECT = Date + 1

donc c'est le CalendrierDateFinSELECT = Date + 1 que j'aimerais remplacé par quelque chose du genre: "CalendrierDateFinSELECT = 19/04/2014.


Merci d'avance,
 

Roland_M

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

bonjour,

oui tout à fait, juste avant on initialise ces deux vars !
mais il faut prévoir un test pour que début soit inférieur ou égale à fin !

si:
CalendrierDateDebutSELECT = Date
CalendrierDateFinSELECT = "19/04/2014"

et prévoir si les dates sont ok !?
if CalendrierDateFinSELECT < CalendrierDateDebutSELECT then CalendrierDateFinSELECT = CalendrierDateDebutSELECT
 

Discussions similaires

Statistiques des forums

Discussions
312 286
Messages
2 086 796
Membres
103 392
dernier inscrit
doc_banane