Demander à l'utilisateur de selectionner une date et d'executer la macro suivant

Résolu
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010 - 21 avril 2010 à 09:57
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 26 avril 2010 à 17:24
Bonjour,

Je suis debutante en vba et j'ai besoin de votre aide pour le code suivant. Je dois faire en sorte que lorsque l'utilisateur lance la macro, on lui demande de selectionner une date de depart(un mois exactement) et execute la macro en fonction de cette date qui est en fait un graphique.
exemple : si je tape 1, la macro executera a partir du mois de janvier jusqu'a novembre (car on fait mois = number-10)
J'utilise vba avec excel

Sub Macro1()

' Macro1 Macro

Dim MyDate

MyDate = Date ' MyDate contient la date système actuelle.
Number = DatePart("m", MyDate)
ANNEE = DatePart("yyyy", MyDate)
'Msg = "mois: " & Number
''MsgBox Msg

' ajout
mois_precedent = Number - 10
Select Case mois_precedent ' Évalue Number.
Case 0
ANNEE = ANNEE - 1
End Select

'MsgBox "mois_precedent=" & mois_precedent

' fin ajout

Select Case mois_precedent ' Évalue Number.
Case 0
MOIS = "Decembre"
Case 1
MOIS = "Janvier"
Case 2
MOIS = "Fevrier"
Case 3
MOIS = "Mars"
Case 4
MOIS = "Avril"
Case 5
MOIS = "Mai"
Case 6
MOIS = "Juin"
Case 7
MOIS = "Juillet"
Case 8
MOIS = "Aout"
Case 9
MOIS = "Septembre"
Case 10
MOIS = "Octobre"
Case 11
MOIS = "Novembre"
Case 12
MOIS = "Decembre"
Case Else ' Autres valeurs.
Debug.Print "Non compris entre 1 et 12"
End Select

Next I

End If
End With

End Sub

19 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
26 avril 2010 à 16:57
ben pour ajouter 2 lignes à ta selection tu peux jouer sur les X (vu que X correspond au N° de ligne) dans :
Set date_de_fin = Sheets("Reporting").Cells(x, y) 
Set date_de_depart = Sheets("Reporting").Cells(x, y - 10) 

Par exemple :
Set date_de_fin = Sheets("Reporting").Cells(x+2, y) 



Cordialement,
Jordane,
3
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
21 avril 2010 à 11:02
Bonjour,

il y a quelques soucis dans ton code :
Il y a trois lignes qu'il faut supprimer +>
Next I (sans For !)
End If (sans.. IF !)
End With (sans With!)

Ensuite, pour avoir le N° du mois précédent, utilises le code :
Mois_Precedent = DatePart("m", DateAdd("m", -1, MyDate))


et si tu veux le NOM du mois précédent, tu peux utiliser:
Nom_mois_Prec = Format(DateAdd("m", -1, MyDate), "mmmm", vbMonday, vbFirstFourDays)



J'espere que cela va pouvoir t'aider.

Cordialement,
Jordane,
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
21 avril 2010 à 11:34
Merci pour ta reponse Jordane.
En effet, j'ai supprimé du code c'est pourquoi j'ai les end with... J'ai mis la suite :)

Donc si j'ai bien compris mon code serait ça
Lorsque j'execute ca ne me donne pas la date de debut, la macro se lance mais toujours sans prendre en compte la date.

Sub Macro1()

' Macro1 Macro

Dim MyDate

MyDate = Date ' MyDate contient la date système actuelle.
Number = DatePart("m", MyDate)
ANNEE = DatePart("yyyy", MyDate)
'Msg = "mois: " & Number
''MsgBox Msg

' ajout
Mois_Precedent = DatePart("m", DateAdd("m", -1, MyDate))
Nom_mois_Prec = Format(DateAdd("m", -1, MyDate), "mmmm", vbMonday, vbFirstFourDays)
Select Case Mois_Precedent ' Évalue Number.
Case 0
ANNEE = ANNEE - 1
End Select

'MsgBox "mois_precedent=" & mois_precedent

' fin ajout


Set fs = Application.FileSearch
With fs
.LookIn = "R:"
.Filename = "*.xls"
'MsgBox "Filename=" & .Filename

If .Execute > 0 Then
' MsgBox .FoundFiles.Count & " Fichier(s) ont été trouvés."

For I = 1 To .FoundFiles.Count
FichierTrouvé = .FoundFiles(I)
'MsgBox "FichierTrouvé==> " & FichierTrouvé

MOIS = InputBox("Choisissez le mois de départ")
Select Case Mois_Precedent ' Évalue Number.
Case 0
MOIS = "Decembre"
Case 1
MOIS = "Janvier"
Case 2
MOIS = "Fevrier"
Case 3
MOIS = "Mars"
Case 4
MOIS = "Avril"
Case 5
MOIS = "Mai"
Case 6
MOIS = "Juin"
Case 7
MOIS = "Juillet"
Case 8
MOIS = "Aout"
Case 9
MOIS = "Septembre"
Case 10
MOIS = "Octobre"
Case 11
MOIS = "Novembre"
Case 12
MOIS = "Decembre"
Case Else ' Autres valeurs.
Debug.Print "Non compris entre 1 et 12"
End Select

Sheets("reporting").Select
Range("A1").Select

Next I
End If
End With

End sub
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
21 avril 2010 à 11:44
Oui,
a lexception de la recherche de l'année.
Remplace:

  Select Case Mois_Precedent ' Évalue Number. 
  Case 0 
  ANNEE = ANNEE - 1 
  End Select 


PAR

   if Mois_Precedent 12 then Annee ANNEE - 1


pour le reste, je pense qu'il n'y a pas de soucis.

Cordialement,
Jordane,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
21 avril 2010 à 11:51
Pour etre plus clair, je voudrais avoir un menu qui demande (lorsque l'utilisateur lance la macro) le mois de depart durant lequel il souhaite faire son graphique et le mois de fin. Le menu se presenterai de cette facon :

1 = "Janvier"
2 = "Fevrier"
3 = "Mars"
4 = "Avril"
5 = "Mai"
6 = "Juin"
7 = "Juillet"
8 = "Aout"
9 = "Septembre"
10 = "Octobre"
11 = "Novembre"
12= "Decembre"

Si on tape 4 au mois_de_depart et 12 pour mois_de_fin, ca doit me lancer la macro avec le graphique ki commence au mois d'avril jusqu'a decembre.
J'espere que j'ai été clair. merci d'avance pour vos reponses
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
21 avril 2010 à 12:02
Ok j'ai pris en compte les années mais ca me permet toujours pas de faire un select sur le mois...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
21 avril 2010 à 12:43
Ok,
As tu écrit la macro qui réalise ton graphique ?
Comment se prensente ton tableau de données (nom de la feuille, quelle colonne correspond à quelle mois...)

bref, peux tu nous donner plus de détails afin qu'on puisse t'aider à faire le lien entre le code ci-dessus et la suite de ton programme ?

Au cas où, peux tu déposer sur le site cijoint.fr un classeur Excel reprenant en gros ce que tu as et ce que tu veux. tu postes ensuite l'adresse ici.


Cordialement,
Jordane,
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
21 avril 2010 à 15:06
Oui en effet, j'ai ecris la macro qui retrace le graphe mais ce qui me manque c'est l'axe suivant la date qui doit etre entrer par l'utilisateur.

J'ai envoyé le classeur pour plus de details.

Merci encore pour tes reponses :)
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
22 avril 2010 à 12:19
Bonjour,

je crois que l'envoi c'est pas fait. Quelqu'un pourrait me rappeler le site pour deposer le classeur?

Merci
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
22 avril 2010 à 13:31
bonjour,
ce site : www.cijoint.fr/ est pas mal.
Tu upload ton fichier sur ce site, puis (il se trouve un peu plus bas dans la fenêtre du dit-site) tu copies le lien ici pour qu'on puisse le récupérer.

si tu as un pb, préviens moi.. je te filerais mon adresse mail pour que tu puisses me l'envoyer directement.


Cordialement,
Jordane,
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
22 avril 2010 à 14:52
Très bien j'ai fais ce que tu m'a demandé :)

Voisi le lien :

http://www.cijoint.fr/cjlink.php?file=cj201004/cijOjbh0pG.xls

Tu verra le fichier ind.xls, il y a tout les details que tu m'a demandé.

Merci
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
22 avril 2010 à 15:24
re,

je suis en train de regarder.

bon déjà :

il faudrait que la date choisi soit récuperé dans feuil1 ligne 2
Mais j'ai pas le code pour ça???


Soit, dans ta feuille1 tu utilises simplement une formule =Calendrier!FC_PO_StartDate
Soit, au momment de valilder la date avec ta macro, tu copie en meme temps dans la feuille 1.

sinon dans ton code, tu peux utiliser :
Sub Update_DayDate()
  FC_CalendarJML.FC_Calendar_Date = FC_CalendarJML.FC_CalendarJML_Day & " " & _
                                          FC_CalendarJML.FC_CalendarJML_Month & " " & _
                                          FC_CalendarJML.FC_CalendarJML_Year
 ' pour copier la date dans la feuille 1
 Sheets(1).Cells(1, "A").Value = FC_CalendarJML.FC_CalendarJML_Day & " " & _
                                          FC_CalendarJML.FC_CalendarJML_Month & " " & _
                                          FC_CalendarJML.FC_CalendarJML_Year
End Sub


Pour ce qui est de choisir les dates pour ton graphique, il faut que tu adaptes ton code dans ton module : Sub Macro2()
Ce qui fera que ton graphique commence et finit tel ou tel mois, c'est la plage de selection
Range("G2:Q4").Select
qui te permet de l'indiquer.

En gros, une fois que tu as ton mois de départ et de fin... tu peux faire un select case du genre

Select Case Mois_depart
Case "JANVIER"
Range_Depart = "D2"
Case "FEVRIER"
Range_Depart = "E2"
' etc...
End Select



Tu fais pareil pour la Date de fin...

et ensuite tu utilises le code suivant pour définir 'dynamiquement' ta plage :
Range(Range_Depart & ":" & Range_Fin).Select


J'espere que ça va pouvoir t'aider.

Cordialement,
Jordane,
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
26 avril 2010 à 10:51
Bonjour,

j'ai pris en compte tes remarques jordane et merci beaucoup pour tes reponses.
J'ai essayé ton select case mais malhereusement ca ne peut pas marcher dans mon cas car mes cellules D2,E2 se suivent indefiniment et je ne pourrais pas faire ca pour chaque case.

J'ai donc essayé autre choses car j'ai reussi à recuperer le numero de ligne (qui se trouve en B6)et colonne (en B4) correspondant a ma date recherché avec la fonction equiv. Il me reste plus qu'a definir la plage de selection et c'est la ma difficulté.

En gros, je voudrais dire que date_de_fin correspondant à cells(x,y)
et date_de_debut correspondant a cells (x-10, y-10)

Je pourrais alors faire Range(date_de_depart & ":" & date_de_fin).Select

Je joins le fichier pour expliquer en details mon probleme

http://www.cijoint.fr/cjlink.php?file=cj201004/cijpIhVuAY.xls
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
26 avril 2010 à 11:08
hello,

Bon, je n'ai pas téléchargé ton ficher, mais je pense que ça va pouvoir t'aider :

Pour faire ta selection, tu peux écrire ton range comme suit:
RANGE(cells(x-10,y-10),cells(x,y))



Cordialement,
Jordane,
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
26 avril 2010 à 11:45
J'ai testé ça mais ca ne marche pas

Sub test()

Dim Plage As Range
Dim date_de_fin As Integer
Dim date_de_depart As Integer
Dim x
Dim y

Call FC_CalendarOpen

x = Range("B4").Value
y = Range("B6").Value


date_de_fin = Cells(x, y).Value

date_de_depart = Cells(x - 10, y - 10).Value

RANGE(cells(x-10,y-10),cells(x,y))

ce qui me met une erreur de syntaxe
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
26 avril 2010 à 12:37
re,
j'ai vu ce qui n'allait pas dans ton code (en faisant la soustraction..; tu avais des coordonnées négatives..).
Tu dois également utiliser l'instruction "SET" pour definir une variable avec une date de fin ( Set date_de_fin = la_plage_voulue).

Enfin, voila en gros à quoi devrait reseembler ton code :

Sub test()
Dim x As Integer
Dim y As Integer

Dim date_de_fin As Range
Dim date_de_depart As Range

Call FC_CalendarOpen
    
    x = Range("B6").Value ' N° de ligne
    y = Range("B4").Value ' N° de colonne

If y - 10 < 1 Then Exit Sub ' si plus petit que 1, on sort!!

Set date_de_fin = Cells(x, y)
Set date_de_depart = Cells(x, y - 10)

 Range(date_de_depart, date_de_fin).Select ' selection de la dite plage

End Sub



Tu aurais pu directement selectionner ta plage comme suit:

Sub test()
Dim x As Integer
Dim y As Integer

Call FC_CalendarOpen

x = Range("B6").Value ' N° de ligne
y = Range("B4").Value ' N° de colonne
If y - 10 < 1 Then Exit Sub ' si plus petit que 1, on sort!!
RANGE(cells(x,y-10),cells(x,y)).Select 'selection de la plage




Cordialement,
Jordane,
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
26 avril 2010 à 15:22
Reee le code marche!!! J'ai une derniere question, je voudrais maintenant à partir de cette plage selectionner en plus les 2 lignes d'en dessous.
En gros, ma plage serait date_de_depart + les 2 lignes en dessous jusqu'a date de fin + les 2 lignes en dessous

exp : date_de_depart = "A1"
date_de_fin = "J1"
Range ("A1 : J3").select

Le code ressemblerait à ça :

Range ("date_de_depart : date_de_fin + rowOffset:=2").select


Sub test()

Dim x As Integer
Dim y As Integer

Dim date_de_fin As Range
Dim date_de_depart As Range

Call FC_CalendarOpen

x = Sheets("Calendrier").Range("B6").Value ' N° de ligne
y = Sheets("Calendrier").Range("B4").Value ' N° de colonne

If y - 10 < 1 Then Exit Sub ' si plus petit que 1, on sort!!


Set date_de_fin = Sheets("Reporting").Cells(x, y)
Set date_de_depart = Sheets("Reporting").Cells(x, y - 10)

' pour tracer le graphe

ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7

' selection de la dite plage

Range(date_de_depart, date_de_fin).Select
Charts.Add
ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
"Courbe - Histo. 2 axes"
ActiveChart.SetSourceData Source:=Sheets("Reporting").Range(date_de_depart, date_de_fin), PlotBy _
:=xlRows
0
snake111 Messages postés 11 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 21 mai 2010
26 avril 2010 à 17:17
Merci jordane ça marche parfaitement!!

Je te remercie infiniment pour l'aide que tu m'as apporté ainsi que ta patience :)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
26 avril 2010 à 17:24
Je t'en prie.
Bonne continuation et n'hésites pas à reposer des questions.


Cordialement,
Jordane,
0
Rejoignez-nous