bonjour tout le monde.
la première chose c'est que je vais demander à l'utilisateur de saisir la date pour laquelle il veut mettre à jour son fichier excel.
Code :
dim date_s as date
date_s=inputbox ("saisissez la date pour laquelle vous voulez mettre à jour votre fichier" )
alors une fois il a saisi la date, je vais aller dans la feuille1 dans la quelle j'ai 12 colonnes (un mois pour chaque colonne).
donc mon but c'est de créer une macro qui me permet de copier 3 colonnes sous une condition.
c'est à dire : si l'utilisateur tape juin 2006 alors à ce moment là je vais y aller dans la feuille 1 et je vais copier les 3 colonnes qui correspond au mois de juin(date saisie) mai(date saisie-1) et avril(date saisie-2).
Pour répondre à la question ce n'est ni du java, ni du c ou C++ c'est du VB.
Bon ma question, c'est comment créer une macro qui me permet de copier trois colonnes sachant que c'est les colonnes que je vais copier correspondent à avril, mai, juin si l'utilisateur saisie la date juin
c'est à dire si l'utilisateur tape une date X alors moi, je vais copier les trois colonnes qui correspondent à la date X, X-1 et X-2
je serai toi je me demanderai plus comment arriver à formater la date que va entrer l'utilisateur plutot que de copier les colonnes.
L'utilisateur peut entrer par exemple: 29 juin 2006; 29 juin; 29/06/06; 06/29/06; 29/06/2006 ... je te les faits pas toutes.
Mais si t'arrives à formater cette date, tu en tire le mois (si possible un numéro).si ta colonne 1 correspond au mois de janvier, dans ce cas la colonne qui correspondra au mois de juin sera la 6.
Ce qui fait que si tu stocke ton numéro de mois dans une variable (par exemple, la variable "mois" )
Le select provoque des activations souvent inutiles et parfois génantes.
Nova13> Ne te laisse pas impressionner par le nouveau statut de certain surtout si tu sens que tu as raison
mohamedlion> Pour savoir comment copier des colonnes, enregistre dans une macro ce que tu ferais à la main, analyse la macro créée (tu y trouveras sans doute le bout de code proposé par Nova) et tu l'adapteras à ton cas.
Nova13> Ne te laisse pas impressionner par le nouveau statut de certain surtout si tu sens que tu as raison
je suis surement plus impressionné par les compétences de certains que par leur nouveau statut. Faisant le plus possible attention aux lignes de code que je propose sachant qu'il y aura relecture ET correction par certains
J'ai crée une macro, mais j'ai un petit problème, je pense que c'est tout à fait logique d'avoir un problème puisque j'ai pas définit l'endroit à laquelle la macro va chercher les mois
Code :
Dim mois As Date
Sheets("Process Defects" ).Activate
mois = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
Do While Not IsDate(mois)
mois = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
Loop
Range(mois & ":" & (mois - 2)).Copy
Sheets("Process Kitchen" ).Activate
Range("d3" ).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Le problème est dans la ligne
Code :
Range(mois & ":" & (mois - 2)).Copy
franchement, peut être c'est un peu con comme question, mais je débute sur vb et j'ai pas vraiment une idée approfondie dans la programmation.
Donc si quelqu'un à une idée sur le problème ou s'il a une autre idée, merci de me faire partager son opinion.
Mais on va essayer de t'aider. Remarge comment j'utilise MsgBox pour m'aider à réfléchir, et la prochaine fois, fais pareil.
Entre les parenthèses de Range, tu dois mettre des numéros de cellules, des lettres de colonnes ou des numéros de lignes.
Pour sélectionner la cellule A1 :
Range("A1" ).Select
Pour sélectionner la colonne A :
Range("A:A" ).Select
Pour sélectionner les colonne B, C et D :
Range("B:D" ).Select
Pour sélectionner la ligne 12 :
Range("12:12" ).Select
Pour sélectionner les lignes 3, 4 et 5 :
Range("3:5" ).Select
Pour sélectionner la plage retangulaire entre B1 et D31 :
Range("B1:D31" ).Select
C'est facile quand même.
Alors maintenant, si tu mets 06/2006 dans mois, que crois-tu obtenir ?
Ben essaye de faire ça :
Code :
Dim d as Date
d = "06/2006"
Msgbox d
Tu obtients : 01/06/2006. Logique c'est une date.
Maintenant, essaye ça :
Code :
Dim d as Date
d = "06/2006"
d = d - 2
Msgbox d
Tu obtients : 30/05/2006. Logique. Tu a enlevé deux jours.
Maintenant si tu fais :
Code :
Dim d as Date
d = "06/2006"
Msgbox d & ":" & (d - 2)
tu vas obtenir : 01/06/2006:30/05/2006 !
ça ne ressemble pas du tout à ce que tu veux, puisque tu cherches à avoir des adresses de colonnes.
Donc ça ne marche pas.
A toi maintenant. Que faire ?
1°) Dans la variable de type date qui contient une date (!), extraire le mois (entre 1 et 12) et mettre le résultat dans une variable.
2°) Utiliser la variable pour construire une adresse du type (m - 2):m.
M1 = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
Do While Not IsDate(M1)
M1 = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
Loop
range ("H4" ) = M1
M2 = "mois(M1)-1" ' je suis pas sure que c'est la bonne formule mais l'idée c'est de récupérer le mois précédent du date saisie'
range ("I4" ) = M2
M3 = "mois(M1)-2"
range ("J4" )=M3
Une fois c'est fait, alors pour récupérer les valeurs correspondant à chaque mois, j'utilise recherchev pour chercher les valeurs dans la feuil1 correspondant au mois saisi
en fait le soucis, ce n'est pas de copier les colonnes (comme je t'ai dit plus haut), mais de récupérer le mois de la date entrée par l'utilisateur.
car une fois que tu auras récupéré ce mois, tu n'auras aucun mal (quoique ) à lui faire correspondre un chiffre, pour plus de facilité à la manipulation.
Et ce chiffre pourra être utilisable pour traiter tout ce que tu veux.
L'important c'est d'avoir une variable contenant des données TRES facilement utilisables.
s = InputBox("Saisissez la date pour laquelle vous voulez mettre à jour votre fichier" )
If s = "" Then
MsgBox "Bye Bye" ' // ou pas....
Exit Sub
End If
Loop
m = Month(s)
m1=m-1
m2=m-2
s1=month(m1)
s2=month(m2)
range("h4" )=s
range("I4" )=s1
range("J4" )=s2
mon petit problème c'est que je sais pas comment afficher l'année avec le mois.
le deuxième petit problème c'est comment afficher les infos correspondant à chaque colonne. (J'ai pensé à utiliser recherchev : une fois le mois est saisie alors il va chercher toutes les infos dans l'autre feuille) mais je pense qu'il y a mieux.
janvier 2006 février 2006 mars 2006 avril 2006 .........
12 52 16 17 10 14 18 22
11 48 75 30
alors je vais demander à l'utilisateur de saisir une date pour laquelle il veut metter à jour son fichier.
Exemple:
l'utilisateur a saisi le mois mars 2006, alors à ce moment là je vais copier toute la colonne mars 2006, février 2006 et juin 2006 .
Alors ce que j'arrive pas à le faire c'est comment récupérer toutes les infos une fois que l'utilisateur a sais une date
Voià, j'espère que j'étais clair
Sincèrement, j'ai pas bien compris ton programme. c'est pour cette raison, j'ai essayé de faire une petite recherche sur internet.
Je vais expliquer la signification de ses 3 fonctions (ça peut être utilie pour un autre utilisateur)
on commence par CDate()
Alors Cdate est une fonction qui sert à convertir une date valide à un résultat de type date
Code :
Exemple
d="22 avril 2001"
if IsDate(d) then
document.write(CDate(d))
end if
output
2/22/2001
Pour la fonction DateSerial()
DateSerial(year,month,day) : it is a function to return a variant of subtype date for a specified year, month and day
Code :
Exemple
document.write(DateSerial(2000,2,3))
output
3/2/2000
Finalement pour DateAdd()
Code :
DateAdd(interval,number,date)
interval : yyyy : année
q : trimestre
m : mois
d : jour
w : weekend
h : heure
n : minute
s : seconde
number:ici on doit ajouter un nombre, il peut être positive pour désigner une date en futur comme il peut être négative pour désigner une date au passé
Exemple
si je veux ajouter un mois à la date 31 janvier 2005