Demander à l'utilisateur de selectionner une date et d'executer la macro suivant [Résolu]

Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
- - Dernière réponse : jordane45
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
- 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
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
3
Merci
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,

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
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,
Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
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
Commenter la réponse de snake111
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
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,
Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
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
Commenter la réponse de snake111
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
Ok j'ai pris en compte les années mais ca me permet toujours pas de faire un select sur le mois...
Commenter la réponse de snake111
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
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,
Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
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 :)
Commenter la réponse de snake111
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
Bonjour,

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

Merci
Commenter la réponse de snake111
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
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,
Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
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
Commenter la réponse de snake111
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
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,
Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
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
Commenter la réponse de snake111
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
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,
Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
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
Commenter la réponse de snake111
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
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,
Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
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
Commenter la réponse de snake111
Messages postés
11
Date d'inscription
lundi 12 avril 2010
Dernière intervention
21 mai 2010
0
Merci
Merci jordane ça marche parfaitement!!

Je te remercie infiniment pour l'aide que tu m'as apporté ainsi que ta patience :)
Commenter la réponse de snake111
Messages postés
24536
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 février 2019
362
0
Merci
Je t'en prie.
Bonne continuation et n'hésites pas à reposer des questions.


Cordialement,
Jordane,
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.