Excel Macro constituer une date
Résolu/Fermé
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
-
17 déc. 2009 à 08:56
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 31 déc. 2009 à 11:18
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 31 déc. 2009 à 11:18
A voir également:
- Excel Macro constituer une date
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Word et excel gratuit - Guide
- Calculer une moyenne sur excel - Guide
38 réponses
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
24 déc. 2009 à 11:55
24 déc. 2009 à 11:55
ben je pourrai mais que ce soir cjoint est bloqué :s
je vais voir à nettoyer le fichier pour le poster ce sera plus facile pour vous tous de m'aider
Merci à tous ceux qui planche là dessus ;)
je vais voir à nettoyer le fichier pour le poster ce sera plus facile pour vous tous de m'aider
Merci à tous ceux qui planche là dessus ;)
kirius14
Messages postés
61
Date d'inscription
vendredi 21 novembre 2008
Statut
Membre
Dernière intervention
12 août 2010
4
17 déc. 2009 à 09:36
17 déc. 2009 à 09:36
Il te faut tout de même une boucle je pense:
Pour coder cela: "If ma cellule est dans la zone Janvier Then
Mois = Janvier "
Dim Mois as Integer,Jour as Integer, Annee as Integer
Dim ValeurConge as date
Annee = 2010
For i = 2 to 36 step 3
For j = 3 to 33
If (j>3 and j< 33) then
mois = "janvier")
end if
next j
next i
Voilà après ça dépend vraiment de ce que tu veux faire.
Puis pour la deuxième chose:
valeurconge = mois & jour & annee
Si tu veux ajouter du texte, il faut le mettre entre guillemets puis ajouter une virgule après
Voilà voilà
Pour coder cela: "If ma cellule est dans la zone Janvier Then
Mois = Janvier "
Dim Mois as Integer,Jour as Integer, Annee as Integer
Dim ValeurConge as date
Annee = 2010
For i = 2 to 36 step 3
For j = 3 to 33
If (j>3 and j< 33) then
mois = "janvier")
end if
next j
next i
Voilà après ça dépend vraiment de ce que tu veux faire.
Puis pour la deuxième chose:
valeurconge = mois & jour & annee
Si tu veux ajouter du texte, il faut le mettre entre guillemets puis ajouter une virgule après
Voilà voilà
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
17 déc. 2009 à 09:53
17 déc. 2009 à 09:53
Merci pour ta réponse kirius14,
ah ok la concaténation est la meme qu'en formule excel quoi. . . .je pensai que ce serait différent :)
Ben avec ta boucle certe ça va marcher, mais utiliser de la memoire et de plus je dois faire autant de If que de mois. . . . je pensais qu'on pouvais trouver en macro la valeur d'une plage d'ailleurs je suis sur une piste avec ActiveCell.Address ou AddressLocal mais . . .
Jour = ActiveCell.Offset(0, -2).Value 'là ca marche
Mois = ActiveCell.Address ' là ca dit qualificateur incorrecte
ah ok la concaténation est la meme qu'en formule excel quoi. . . .je pensai que ce serait différent :)
Ben avec ta boucle certe ça va marcher, mais utiliser de la memoire et de plus je dois faire autant de If que de mois. . . . je pensais qu'on pouvais trouver en macro la valeur d'une plage d'ailleurs je suis sur une piste avec ActiveCell.Address ou AddressLocal mais . . .
Jour = ActiveCell.Offset(0, -2).Value 'là ca marche
Mois = ActiveCell.Address ' là ca dit qualificateur incorrecte
kirius14
Messages postés
61
Date d'inscription
vendredi 21 novembre 2008
Statut
Membre
Dernière intervention
12 août 2010
4
17 déc. 2009 à 10:20
17 déc. 2009 à 10:20
Tu n'est pas obligé de faire plusieurs if, tu peux inclure des elseif aussi, c'est mieux!
Les fonctions que tu utilise je ne les connais pas, je ne suis pas un expert en VBA non plus^^
Enfin si tu veux d'autres renseignements n'hésite pas!
Les fonctions que tu utilise je ne les connais pas, je ne suis pas un expert en VBA non plus^^
Enfin si tu veux d'autres renseignements n'hésite pas!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
17 déc. 2009 à 10:38
17 déc. 2009 à 10:38
oui oui je connais le elseif c'est juste que je voulais essayer de simplifier le code au maximum ;) euuh par contre ton for next ça ne vas pas pour ce que je veux faire car il ne trouve pas la valeur du mois. . . . .je veux dire que ça marche quand je clic dans la colonne qui correspond à janvier mais si je modifie une cellule de fevrier ça ne marchera pas tel qu'il est là . . .je sais pas si tu me suis là. . .lol
kirius14
Messages postés
61
Date d'inscription
vendredi 21 novembre 2008
Statut
Membre
Dernière intervention
12 août 2010
4
17 déc. 2009 à 14:12
17 déc. 2009 à 14:12
C'est parce que il faut que tu continus le if avec les elseif et que tu lui affecte les bonnes conditions.
Mais sinon si tu veux je peux essayer de la faire mais il me faut vraiment ce que tu veux, ce que ta déjà fait, et concrètement comment ton calendrier se fait.
Mais sinon si tu veux je peux essayer de la faire mais il me faut vraiment ce que tu veux, ce que ta déjà fait, et concrètement comment ton calendrier se fait.
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
17 déc. 2009 à 14:20
17 déc. 2009 à 14:20
je te remerci, je vais voir comment je vais faire, j'ai trouvé une autre solution qui marche mais j'aimerai vraiment pouvoir gérer les noms de plage en macros car ca faciliterai pas mal de choses. . . .
mais par curiosité parlons de ton idée, on a du mal se comprendre par ce que je vois pas comment adapter ton for next .. . .. .car pour le For i on se deplace à l'horizontale ok mais si par exemple je met une valeur dans la colonne du mois d'avril comment ton For next vas savoir que c'est la bonne colonne, car en faite il faut que quelque soit la colonne ou je rntre une valeur il me trouve si c'est celle de fevrier, mars ou avril, le For next que tu as ecrit il vas tourner toutes les 3 cellules jusqu'à 36 mais sans jamais s'aréter. . . ..
mais par curiosité parlons de ton idée, on a du mal se comprendre par ce que je vois pas comment adapter ton for next .. . .. .car pour le For i on se deplace à l'horizontale ok mais si par exemple je met une valeur dans la colonne du mois d'avril comment ton For next vas savoir que c'est la bonne colonne, car en faite il faut que quelque soit la colonne ou je rntre une valeur il me trouve si c'est celle de fevrier, mars ou avril, le For next que tu as ecrit il vas tourner toutes les 3 cellules jusqu'à 36 mais sans jamais s'aréter. . . ..
kirius14
Messages postés
61
Date d'inscription
vendredi 21 novembre 2008
Statut
Membre
Dernière intervention
12 août 2010
4
17 déc. 2009 à 14:39
17 déc. 2009 à 14:39
En fait c'est une maccro qui tourne en tâche de fond dans excel, dès que tu va ouvrir ta feuille, ta maccro se met directement en route, il faut la placer dans un module.
Et donc à chaque fois que tu va écrire dans un cellule, ta maccro va vérifier si elle doit faire quelque chose en fonction de la cellule.
je sais pas si tu comprends; je suis pas très claire..
J'ai fais ce genre de chose il n'y a pas lontemps pour le travail, il a fallu que je fasse une feuille excel dans laquelle j'ai eu recours à une maccro de ce type.
La boucle for, s'arrète, elle a obligatoirement un début et une fin.
Est-ce-que tu peux m'envoyer ce que ta déjà fais s'il te plait?
Mais la si je comprends bien ce que tu veux faire, c 'est que ta un calendrier avec pour chaque jours 3 colonne dont une pour le jour, une pour le nom du jour de la semaine, et la troisième pour indiquer une tâche à faire ?
Et donc à chaque fois que tu va écrire dans un cellule, ta maccro va vérifier si elle doit faire quelque chose en fonction de la cellule.
je sais pas si tu comprends; je suis pas très claire..
J'ai fais ce genre de chose il n'y a pas lontemps pour le travail, il a fallu que je fasse une feuille excel dans laquelle j'ai eu recours à une maccro de ce type.
La boucle for, s'arrète, elle a obligatoirement un début et une fin.
Est-ce-que tu peux m'envoyer ce que ta déjà fais s'il te plait?
Mais la si je comprends bien ce que tu veux faire, c 'est que ta un calendrier avec pour chaque jours 3 colonne dont une pour le jour, une pour le nom du jour de la semaine, et la troisième pour indiquer une tâche à faire ?
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
17 déc. 2009 à 16:21
17 déc. 2009 à 16:21
Non je peux pas envoyer le fichier, oui tu as bien compris l'histoire des colone mais je pense que tu as raté le but initiale de ma macro, donc quand je remplis la cellule pour la tache, il faut que la macro reconstitue la date donc pour le jour c'est bon mais pas pour le mois donc en nommant un eplage de cellule "janvier" je pensai pouvoir dire à la macro si cellule active et dans la plage "janvier" alors la valeur mois est "janvier" . . .
kirius14
Messages postés
61
Date d'inscription
vendredi 21 novembre 2008
Statut
Membre
Dernière intervention
12 août 2010
4
17 déc. 2009 à 16:28
17 déc. 2009 à 16:28
Donc c'est bien ce que j'avais compris,
Je vais essayer de faire un tableau de ce genre là ce soir ou demain matin, puis je vais t'envoyer ça si tu veux!
Mais par contre, tu veux qu'il renvoi la date de la tâche a quel endroit?
Tu la veux dans la même cellule?
Je vais essayer de faire un tableau de ce genre là ce soir ou demain matin, puis je vais t'envoyer ça si tu veux!
Mais par contre, tu veux qu'il renvoi la date de la tâche a quel endroit?
Tu la veux dans la même cellule?
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
24 déc. 2009 à 08:53
24 déc. 2009 à 08:53
Salut kirus14 désolé j'étais parti en vacance, euuh non la date je la veux en variable, pour ensuite l'utiliser dans un autre tableau ou je chercherai le nom de la personne qui a rempli son calendrier et le jour correspondant à la date en question, ouula dure de s'expliquer un lendemain de retour de vacance à l'embauche :s
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
24 déc. 2009 à 09:34
24 déc. 2009 à 09:34
Bonjour,
je pensai pouvoir dire à la macro si cellule active et dans la plage "janvier" alors la valeur mois est "janvier"
No pb :) :
Joyeux noel ! :D
je pensai pouvoir dire à la macro si cellule active et dans la plage "janvier" alors la valeur mois est "janvier"
No pb :) :
If Not Intersect(ActiveCell, Range("janvier")) Is Nothing Then MsgBox "janvier"
Joyeux noel ! :D
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
24 déc. 2009 à 10:54
24 déc. 2009 à 10:54
Salut tompols,
ta macro va pas mal merci, mais du coup puis je dire un truc dans le genre "ma variable Mois est = au nom de la plage où est la cellule active" puisque dans mon tableau j'ai 12 plages correspondant aux 12 mois ce qui m'eviterai de faire 12 if si tu vois où je veux en venir ;)
???
et question à 2 cents peut tu "traduire" ta macro enfin la commenter stp,
Merci
ta macro va pas mal merci, mais du coup puis je dire un truc dans le genre "ma variable Mois est = au nom de la plage où est la cellule active" puisque dans mon tableau j'ai 12 plages correspondant aux 12 mois ce qui m'eviterai de faire 12 if si tu vois où je veux en venir ;)
???
et question à 2 cents peut tu "traduire" ta macro enfin la commenter stp,
Merci
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
24 déc. 2009 à 11:18
24 déc. 2009 à 11:18
'alut :)
jvais commencer par l'explication : l'idée est d'utiliser la méthode intersect qui renvoi un objet range représentant l'intersection de plusieurs plages, si cette méthode ne renvoie rien, alors tes plages n'ont pas d'intersection => tester que intersect(tacellule, taplage) n'est pas vide revient à tester que ta cellule et ta plage ont une bien une intersection (zone commune) et donc ta cellule appartient à ta plage (j'espere etre clair dis moi si ça ne l'est pas)...
ensuite, pour ton pb, on va recuperer les noms de plages nommés via la collection activeworkbook.names puis boucler sur ces noms pour tester l'intersection avec ta cellule :
EDIT : ne fonctionnera que si les noms sont sur une seule feuille et la cellule active est sur cette meme feuille (intersect() renvoi une erreur si les plages ne sont pas sur la meme feuille)
jvais commencer par l'explication : l'idée est d'utiliser la méthode intersect qui renvoi un objet range représentant l'intersection de plusieurs plages, si cette méthode ne renvoie rien, alors tes plages n'ont pas d'intersection => tester que intersect(tacellule, taplage) n'est pas vide revient à tester que ta cellule et ta plage ont une bien une intersection (zone commune) et donc ta cellule appartient à ta plage (j'espere etre clair dis moi si ça ne l'est pas)...
ensuite, pour ton pb, on va recuperer les noms de plages nommés via la collection activeworkbook.names puis boucler sur ces noms pour tester l'intersection avec ta cellule :
For Each n In ActiveWorkbook.Names If Not Intersect(Range(n.Name), ActiveCell) Is Nothing Then MsgBox n.Name Next n
EDIT : ne fonctionnera que si les noms sont sur une seule feuille et la cellule active est sur cette meme feuille (intersect() renvoi une erreur si les plages ne sont pas sur la meme feuille)
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
24 déc. 2009 à 11:45
24 déc. 2009 à 11:45
ok j'ai compris ton explication merci bien je préfère comprendre ce que j'utilise plutot que de l'utiliser betement,
par contre, problème, mes plages se répétent dans plusieurs feuilles j'ai autant de feuilles que d'agents, chaque feuille est un calendrier complet, mon but étant que l'agent X rempli son calendrier(feuilX) avec par exemple le 1er janvier un congé, de là je reconstruis ma date(voir post 1 pour les details),je vais dans une autre feuille (calendrier du chef avec liste de tous les agents, là je cherche le nom de l'agent donc le nom de la feuil qui a ete modifiée, puis la date et colle le congé.
Donc ta réponse à ma question souléve plein d'autres questions et problèmes, je vais utiliser des variables qui seront valables (Mois,Jour) pour plusieurs feuilles mais de valeur différentes selon la feuille modifiée,donc comment je déclare mes variables (public,dim...???) où? (workbook, chaque feuille...???) et donc là du coup je me rend compte que ça va être coton tous ça mais à l'impossible nul n'est tenu . . .je sais pas si tu me suis mais moi je me suis lol mais pas toujours sans mal lol
par contre, problème, mes plages se répétent dans plusieurs feuilles j'ai autant de feuilles que d'agents, chaque feuille est un calendrier complet, mon but étant que l'agent X rempli son calendrier(feuilX) avec par exemple le 1er janvier un congé, de là je reconstruis ma date(voir post 1 pour les details),je vais dans une autre feuille (calendrier du chef avec liste de tous les agents, là je cherche le nom de l'agent donc le nom de la feuil qui a ete modifiée, puis la date et colle le congé.
Donc ta réponse à ma question souléve plein d'autres questions et problèmes, je vais utiliser des variables qui seront valables (Mois,Jour) pour plusieurs feuilles mais de valeur différentes selon la feuille modifiée,donc comment je déclare mes variables (public,dim...???) où? (workbook, chaque feuille...???) et donc là du coup je me rend compte que ça va être coton tous ça mais à l'impossible nul n'est tenu . . .je sais pas si tu me suis mais moi je me suis lol mais pas toujours sans mal lol
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
24 déc. 2009 à 11:53
24 déc. 2009 à 11:53
OK, jusqu'ici je répondais juste à la question "récuperer le nom de la plage"....C'est ptet pas la meilleure piste pour ton pb..... J'ai qd meme un peu de mal à me représenter ta feuille "calendrier", pourrais tu mettre juste une feuille "calendrier" ou meme un scheenshot sur cjoint.com ? Jfile en pause déjeuner, jregarde ça en début d'aprem....
A+
A+
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
24 déc. 2009 à 14:15
24 déc. 2009 à 14:15
Re,
Bon ce soir ça va être compliqué pour moi, si je passe par là ce sera pour souhaiter un joyeux noël aux CCMistes ;)...Après ça vacances, pas sur de pouvoir repasser par le forum ....
Sinon j'ai ajouté un test sur le nom de la feuille pour gérer les erreurs, ça devrait fonctionner :
Bon ce soir ça va être compliqué pour moi, si je passe par là ce sera pour souhaiter un joyeux noël aux CCMistes ;)...Après ça vacances, pas sur de pouvoir repasser par le forum ....
Sinon j'ai ajouté un test sur le nom de la feuille pour gérer les erreurs, ça devrait fonctionner :
For Each n In ActiveWorkbook.Names If InStr(n.RefersTo, ActiveCell.Worksheet.Name) > 0 Then If Not Intersect(Range(n.Name), ActiveCell) Is Nothing Then MsgBox n.Name End If Next n
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
24 déc. 2009 à 14:27
24 déc. 2009 à 14:27
ola oui j'avai zapé c'est noel lol ben on vera plus tard alors par ce que moi aussi j'aurai pas trop le temps de faire mumuse sur CCM lol je le colle dans ma feuil ce code c'est ça?
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
24 déc. 2009 à 14:33
24 déc. 2009 à 14:33
J'imagine que ton code est dans un module ? en fait tu colles ce passage dans ta procédure à l'endroit ou tu voulais récuperer le nom de la plage.....on verra avec le fichier pour une solution complète, je maitrise pas tout là, faudrait voir ton classeur, ton code etc....
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
24 déc. 2009 à 15:04
24 déc. 2009 à 15:04
Voilà le code que j'ai pour l'instant dans une de mes feuilles:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Jour As Integer, Mois As Integer, Annee As Integer
Dim ValConge As Date
Annee = 2010
Jour = ActiveCell.Offset(-1, -3).Value
Mois = ActiveCell.Offset(-1, -1).Value
'If Not Intersect(ActiveCell, Range("janvier")) Is Nothing Then MsgBox "janvier"
For Each n In ActiveWorkbook.Names
If InStr(n.RefersTo, ActiveCell.Worksheet.Name) > 0 Then
If Not Intersect(Range(n.Name), ActiveCell) Is Nothing Then MsgBox n.Name
End If
Next n
ValConge = Jour & "/" & Mois & "/" & Annee
ValConge.NumberFormat = "ddd-dd/mm/yy"
MsgBox ValConge
End Sub
Il ne se passe rien quand je met une valeur dans une cellule. . . . mais bon je ne suis pas du tout sûr de mon code là . . .
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Jour As Integer, Mois As Integer, Annee As Integer
Dim ValConge As Date
Annee = 2010
Jour = ActiveCell.Offset(-1, -3).Value
Mois = ActiveCell.Offset(-1, -1).Value
'If Not Intersect(ActiveCell, Range("janvier")) Is Nothing Then MsgBox "janvier"
For Each n In ActiveWorkbook.Names
If InStr(n.RefersTo, ActiveCell.Worksheet.Name) > 0 Then
If Not Intersect(Range(n.Name), ActiveCell) Is Nothing Then MsgBox n.Name
End If
Next n
ValConge = Jour & "/" & Mois & "/" & Annee
ValConge.NumberFormat = "ddd-dd/mm/yy"
MsgBox ValConge
End Sub
Il ne se passe rien quand je met une valeur dans une cellule. . . . mais bon je ne suis pas du tout sûr de mon code là . . .