transformer un chiffre en date en VBA

C

C@thy

Guest
Coucou c'est remoi,

yé m'escouz de faire un nouveau fil pour un même sujet (c'est pas bien, mais j'ai déjà trop de réponses (non satisfaisantes) à mon précédent fil, du coup on pourrait croire que j'ai obtenu ma soluce, eh ben non!

oilà, j'essaye d'expliquer clairement :

(1- j'ai excel 2000)

2- j'ai un planning dans lequel
JE NE DOIS PAS ECRIRE (bicoz protection).

Donc j'ai défini un nom PremJour et je lui affecte la valeur correspondant au 1er jour du mois en cours :

Names("PremJour").RefersTo = DateSerial(Year(Now), Month(Now), 1)

là le nom PremJour prend la valeur d' un chiffre (ex 37895 pour le 1er octobre 2003).

là où ça se corse c'est que si je veux décaler mon planning d'1 (ou n) mois j'ai besoin que PremJour soit modifié pour prendre la valeur du 1er du mois suivant (ou nème suivant).

alors j'essaie un truc du genre :
CurDate = Names("PremJour").Value
Names("PremJour").RefersTo = DateSerial(Year(CurDate), Month(CurDate) + 1, 1)

et j'ai un message d'horreur : type incompatible!

grrrrrrrr...... y m'énerv' les nerfs à force! (J'y suis depuis ce matin à l'aube.)

Est-ce que quelqu'un peut quelquechoz pour moi s'il you plait?

Merci de votre aide car je galère.

Bon ouik tout le monde

BipBip.gif
 
C

C@thy

Guest
Ah, je suis sur une piste :

dans curdate je n'ai pas un nombre mais "=le nombre",
donc y faut que je récupère juste la partie numérique derrière le =

z'avez une idée?

j'ai essayé une combinaison de = right(...len(... - find("="... mais j'arrive pô.

Merci pour votre aide et bon ouik à tous.

BipBip.gif
 
L

LaurentTBT

Guest
Salut C@thy.

J'ai eu du mal à comprendre, mais en effet,
CurDate = Names("PremJour").Value va mettre dans CurDate par exemple "=37895"
Il faut donc enlever le = de cette chaîne de caractères.

Voici la solution que je te propose:
Remplace CurDate=Names("PremJour").value par:
CurDate=Right(Names("PremJour").Value, Len(Names("PremJour").Value) - 1)

(Len ... te donne le nombre de caractères total de la chaîne initial, Je prend donc tous les caractères de droite -1)

J'espère que tu t'en sortiras ainsi. J'ai essayé, et j'obtiens bien ensuite le numéro de série du 1er novembre.

Bon courage.
Laurent.
 
C

chris

Guest
Re
En fait je t'ai donné le moyen de calculer premjour
Ce qu'il faut vérifier (et de mémoire je ne sais pas) c'est comment réaffecter cette valeur au nom dans le classeur.

Mais as-tu vérifié que tu pouvais changer le nom dans une feuille (ou classeur ?) protégé?

La je pars mais j'essaierai de te donner la commande d'affectation au nom d'ici lundi.
D'ici là, bon week end.

Chris
 
L

LaurentTBT

Guest
Chris,

Nos posts ont du se croiser.

Pour réaffecter une valeur au nom, le ligne de C@thy fonctionne parfaitement. Pour plus de clareté, je remets le code complet:

Names("PremJour").RefersTo = DateSerial(Year(Now), Month(Now), 1)
...

Puis quand on veut modifier pour passer au mois suivant:
CurDate=Right(Names("PremJour").Value, Len(Names("PremJour").Value) - 1)
Names("PremJour").RefersTo = DateSerial(Year(CurDate), Month(CurDate) + 1, 1)

Et là, le nom fait référence au 1er du mois suivant (enfin, j'espère).

@+. Laurent.
 
C

C@thy

Guest
Bonjour et merci à tous pour vos réponses.

Oui je sais, c'est pas facile à comprendre

Voici le résultat :

Right(...
message : erreur projet ou bibliothèque introuvable

Pour ce que tu proposes, Chris, ce n'est pas si simple que ça :

ce que je veux c'est modifier Premjour par macro pour qu'il prenne la valeur de la date voulue (je choisis le mois au moyen d'une scrollbar). Donc je peux faire mois suivant n fois

exemple : je fais le calendrier du mois en cours,
donc PremJour = 37895 (pour 1/10/2003)

je clique 2 fois (ou n) sur la scrollbar pour avoir 2 mois n(ou n) après.

le 1er clic me donne 37926 (1/11/2003) le 2ème me donne 37956 (1/12/2003) donc il faut que je transforme 37926 (ou 37956 si je clique 3 fois sur la scrollbar) en date pour trouver le début du mois suivant

en clair : calendrier actuel débute à 37895, je clique 2 fois sur mois suivant, par exemple, et j'obtiens 37956 dans PremJour (il ne s'agit pas seulement d'augmenter le 1er jour de la date actuelle de 1 mois, mais de n mois).

Merci d'essayer encore de m'aider, je suis sûre qu'on va trouver, je pense que ce n'est pas impossible.

BipBip.gif
 
T

Ti

Guest
alors Cathy, toujours dans tes calendriers.
Bon, allez, voilà 2 macros qui vont peut-être t'aider (enfin surtout la deuxième...)

Sub PremierJour()
ThisWorkbook.Names.Add "PremJour", DateSerial(Year(Now), Month(Now), 1)
End Sub

Function RecupereDate() As Date
On Error Resume Next
RecupereDate = ThisWorkbook.Sheets(1).Evaluate("PremJour")
End Function

La première "PremierJour" initialise le nom PremJour comme tu le faisais toi-même dans tes macros.
La fonction RecupereDate te renvoie quant à elle le contenu de "PremJour" sous forme d'une variable date. J'espère que c'est ça que tu attendais.

Pour l'utiliser, tu peux déclarer une variable Date et l'initialiser ainsi

Dim LaDate as Date '(oui, moi je suis en Option Explicit !)

LaDate = RecupereDate

Ensuite, tu manipules cette variable comme tu l'entends.
 
C

C@thy

Guest
Ouf!!! Merci SuperMagikGénialTi! Ca fonctionne à merveille!...

Eh oui, soyons explicites... lol!

Question subsidiaire : pourquoi le right ne marche pas?

Bonne journée. (la mienne le sera, grâce à toi!)

BipBip.gif
 
T

Ti

Guest
Right, comme Left, ne marche pas quelquefois sur certaines machines - et ça m'est déjà arrivé également parce que je pense qu'une référence doit être mal déclarée ou, à tout le moins, qu'Excel se mélange un peu les pédales. Par contre je n'ai jamais réussi à voir quelle référence est en cause. En général, il m'a toujours suffit d'aller d'ouvrir le menu Références, de cocher et décocher un peu au hasard pour qu'ensuite tout rentre dans l'ordre...
bon, si Right ne marche pas, essaie Right$ (ou Left$) on ne sait jamais,
Sinon tu peux très bien remplacer ces deux fonctions par la fonction Mid, qui, elle, ne te posera jamais de problème.
 

Discussions similaires

Réponses
8
Affichages
179

Statistiques des forums

Discussions
312 676
Messages
2 090 804
Membres
104 670
dernier inscrit
Djnic30