FORUM Tom's Hardware » Programmation » Autre » copier des colones sous plusieurs conditions
 

copier des colones sous plusieurs conditions

Il y a 337 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : copier des colones sous plusieurs conditions
 
Plus d'informations

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 :
  1. dim date_s as date
  2. 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).
 
j'espère que j 'étais clair
 
Merci d'avance pour votre aide

zeb
Profil : Modérateur libre
Plus d'informations

Bon, d'accord. Quelle est la question ?

C is a sharp tool
Plus d'informations

a écrit :

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 :
  1. dim date_s as date
  2. date_s=inputbox ("saisissez la date pour laquelle vous voulez mettre à jour votre fichier" )




C'est du Java ? En tout cas, ce n'est ni du C, ni du C++...
 


---------------
Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/

 

zeb
Profil : Modérateur libre
Plus d'informations

mohamedlion> édite ton topik pour le mettre dans la sous catégorie Autre, s'il te plait. Tu en profiteras pour poser une question !

Plus d'informations

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
 
Merci pour votre aide.

le corps s'évade, les idées persistent.
Plus d'informations

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" )

Code :
  1. range(mois & ":" & (mois-2)).select
  2. selection.copy
  3. ...


Il me semble que ca fonctionnera

zeb
Profil : Modérateur libre
Plus d'informations

Beurk

Code :
  1. range(mois & ":" & (mois-2)).select
  2. selection.copy


Miam

Code :
  1. range(mois & ":" & (mois-2)).copy


 
Le select provoque des activations souvent inutiles et parfois génantes.
 
Nova13> Ne te laisse pas impressionner par le nouveau statut de certain  :whistle: 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.

le corps s'évade, les idées persistent.
Plus d'informations

a écrit :

Nova13> Ne te laisse pas impressionner par le nouveau statut de certain  :whistle: surtout si tu sens que tu as raison ;)


 :D  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
 

Plus d'informations

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 :
  1. Dim mois As Date
  2. Sheets("Process Defects" ).Activate
  3. mois = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
  4. Do While Not IsDate(mois)
  5. mois = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
  6. Loop
  7. Range(mois & ":" & (mois - 2)).Copy
  8. Sheets("Process Kitchen" ).Activate
  9. Range("d3" ).Select
  10. ActiveSheet.Paste
  11. Application.CutCopyMode = False


 
Le problème est dans la ligne  

Code :
  1. 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.
 
Sincères salutations,
 
Merci d'avance pour votre aide
 

zeb
Profil : Modérateur libre
Plus d'informations

:non: Tu t'y prends mal.
 
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 :
  1. Dim d as Date
  2. d = "06/2006"
  3. Msgbox d


Tu obtients : 01/06/2006. Logique c'est une date.
 
Maintenant, essaye ça :

Code :
  1. Dim d as Date
  2. d = "06/2006"
  3. d = d - 2
  4. Msgbox d


Tu obtients : 30/05/2006. Logique. Tu a enlevé deux jours.
 
Maintenant si tu fais :

Code :
  1. Dim d as Date
  2. d = "06/2006"
  3. 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.
 
Enjoy!


Message édité par zeb le 30-06-2006 à 16:14:44
Plus d'informations

Code :
  1. Dim M1 As Date
  2. Dim M2 as Date
  3. Dim M3 as Date
  4. Sheets("Process Defects" ).Activate
  5. M1 = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
  6. Do While Not IsDate(M1)
  7. M1 = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" )
  8. Loop
  9. range ("H4" ) = M1
  10. 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'
  11. range ("I4" ) = M2
  12. M3 = "mois(M1)-2"
  13. 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
 
Voilà, je pense qu'on peut faire mieux
 
 
 
 
 
 

le corps s'évade, les idées persistent.
Plus d'informations

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 :sweat: ) à 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.

zeb
Profil : Modérateur libre
Plus d'informations

mohamedlion> :non: Tu t'y prends mal.
 
Eh, eh... ça viendra avec l'habitude ;) Mais le secret est bien dans l'utilisation de Mois. Mais pas dans une cellule, en VBA directement !
 
Allez, au boulot.
 
Je n'aime pas ce code :

Code :
  1. Dim M1 As Date
  2. M1 = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" ) 
  3. Do While Not IsDate(M1) 
  4.   M1 = InputBox("sisissez la date pour laquelle vous voulez mettre à jour votre fichier" & Chr(10) & "mois-aaaa" ) 
  5. Loop


 
Pourquoi ? Parce ce si je tape "TOTO" au lieu d'une date, ça plante. Je préfère celui-là : (avis personnel)

Code :
  1. Dim s As String
  2. Dim m As Integer ' C'est un entier que tu veux au fait !!!
  3. s = ""
  4. Do While Not IsDate(s) 
  5.   s = InputBox("Saisissez la date ..blabla" ) 
  6.   If s = "" Then ' L'utilisateur a cliqué sur ANNULER
  7.     MsgBox "Bye Bye" ' // ou pas....
  8.     Exit Sub
  9.   End If
  10. Loop
  11. m = Month(s) ' // En Anglais évidemment :)  
  12. ' // Gagné !!!

Plus d'informations

merci beaucoup pour votre aide notamment pour Zeb :)  :)  

Code :
  1. Dim s As String
  2. Dim s1 as String
  3. Dim s2 as string
  4. Dim m As Integer
  5. Dim m1 as Integer
  6. Dim m2 as Integer
  7. s = ""
  8. Do While Not IsDate(s) 
  9.   s = InputBox("Saisissez la date pour laquelle vous voulez mettre à jour votre fichier" ) 
  10.   If s = "" Then
  11.     MsgBox "Bye Bye" ' // ou pas....  
  12.     Exit Sub
  13.   End If
  14. Loop
  15. m = Month(s)
  16. m1=m-1
  17. m2=m-2
  18. s1=month(m1)
  19. s2=month(m2)
  20. range("h4" )=s
  21. range("I4" )=s1
  22. 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.

zeb
Profil : Modérateur libre
Plus d'informations

:ouch:  Je comprends de moins en moins ce que tu cherches à faire.

Plus d'informations

je t'explique  
 
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                  

Plus d'informations

excusé moi, j'ai fait une erreur.
lorsque il saisi le mois de mars, je vais copier toute la colonne mars 2006 , février 2006 et janvier 2006

zeb
Profil : Modérateur libre
Plus d'informations

Ok. Alors pourquoi nous fais-tu tout ce bazar ?
 
Voilà, je te propose ce qui suit. Et je te demande de bien le comprendre avant de t'en servir et de poser d'autres questions :)
 

Code :
  1. Dim s As String
  2. Dim d As Date
  3. s = ""
  4. Do While Not IsDate(s)
  5.   s = InputBox("Saisissez la date pour laquelle vous voulez mettre à jour votre fichier" )
  6.   If s = "" Then
  7.     MsgBox "Bye Bye" ' // ou pas....
  8.     Exit Sub
  9.   End If
  10. Loop
  11. d = CDate(s)
  12. d = DateSerial(Year(d), Month(d), 1)
  13. d = DateAdd("m", -2, d)
  14.  
  15. For i = 1 To 256
  16.   If IsDate(Cells(<numéro de ligne des dates>, i).Value) Then
  17.     If CDate(Cells(<numéro de ligne des dates>, i).Value) = d Then
  18.       ' // Trouvé !!!!!
  19.        
  20.       < ici demander à MohamedLion de mettre des trucs utiles,
  21.         genre la copie de cette colonne et des trois suivantes en une seule fois,
  22.         merci >
  23.        
  24.       Exit For
  25.     End If
  26.   End If
  27. Next


Message édité par zeb le 04-07-2006 à 17:53:17
Plus d'informations

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 :
  1. Exemple
  2. d="22 avril 2001"
  3. if IsDate(d) then
  4. document.write(CDate(d))
  5. end if
  6. output
  7. 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 :
  1. Exemple
  2. document.write(DateSerial(2000,2,3))
  3. output
  4. 3/2/2000


Finalement pour DateAdd()

Code :
  1. DateAdd(interval,number,date)
  2. interval : yyyy : année
  3.              q      : trimestre
  4.              m     : mois
  5.              d      : jour
  6.              w      : weekend
  7.              h      : heure
  8.              n      : minute
  9.              s      : seconde
  10. 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é
  11. Exemple
  12. si je veux ajouter un mois à la date 31 janvier 2005
  13. document.write(DateAdd("m",1,"31-Janvier 2005" ))
  14. output
  15. 29/2/2005


 
j'espère que j'étais clair
 

Plus d'informations

Par contre j'ai pas bien compris cette partie

Code :
  1. For i = 1 To 256
  2.   If IsDate(Cells(<numéro de ligne des dates>, i).Value) Then
  3.     If CDate(Cells(<numéro de ligne des dates>, i