RESOLU inscription commentaire selon critère

RESOLU inscription commentaire selon critère - VB/VBA/VBS - Programmation

Marsh Posté le 29-11-2005 à 16:53:29    

bonjour
 
j'ai une base de données où dans ma colonne AT figurent des dates sous format jj/mm/annee
 
je voudrais créer une macro qui permette d'insérer une colonne à coté, de l'appeler "tranches d'âge"
 
et de passer en revue chaque cellule de ma colonne AT2, AT3, AT4 jusqu'à la fin de mon tableau et inscrire dans la colonne juxtaposée le commentaire ;
à savoir, si la date renseignée est "15/06/1987" écrire à côté "10 à 20 ans"
 
il faudrait aussi que la macro se base par rapport à l'année en cours, genre, mes variables auraient l'air de ça
 
Dim age1, age2, age3, age4, age5, age6
age1 = "01/01/& Year(Date) - 5"
age2 = "01/01/& Year(Date) - 10"
age3 = "01/01/& Year(Date) - 20"
age4 = "01/01/& Year(Date) - 30"
age5 = "01/01/& Year(Date) - 40"
age6 = "01/01/& Year(Date) - 50"
 
qq'un peut m'aider siouplait ?


Message édité par peanutz le 30-11-2005 à 16:30:48
Reply

Marsh Posté le 29-11-2005 à 16:53:29   

Reply

Marsh Posté le 30-11-2005 à 12:13:41    

c impossible ?

Reply

Marsh Posté le 30-11-2005 à 13:12:12    

si..si !


---------------
roger
Reply

Marsh Posté le 30-11-2005 à 13:14:38    

bonjour,  
C'est possible... mais faudra attendre encore  un petit peu, car je part au boulot !
A+


---------------
roger
Reply

Marsh Posté le 30-11-2005 à 13:39:48    

lol galopin ok.
j'ai beau essayer j'arrive pas !

Reply

Marsh Posté le 30-11-2005 à 16:00:59    

Salut peanutz,
Voilà une petite sollution pour toi :) Cette macro t'écris les tranches d'ages dans la colone 47 en fonction d'une date en collone 46 :

Code :
  1. Sub TrancheAge()
  2. Dim i
  3. i = 2 ' Ligne 1 = entête
  4. 'Mise en place des tranches d'ages
  5. Do
  6. Cells(i, 47).Select 'AT = col 46 pour date naissance, écriture en 47
  7.     'Place une formule dont le résultat évoluera en fonction de la date
  8.     ActiveCell.FormulaR1C1 = _
  9.         "=IF(YEAR(TODAY())-YEAR(RC[-1])<10,""moins de 10 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<20,""10 à 20 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<30,""20 à 30 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<40,""30 à 40 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<50,""40 à 50 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<60,""50 à 60 ans"",""plus de 60 ans"" ))))))"
  10.     'A écrire sur une seulme ligne dans VBA
  11. i = i + 1
  12. Loop Until Cells(i, 1).Value = "" 'Continue tant que la cellule en colone 1 n'est pas vide
  13. End Sub

Je me suis basée sur les années mais tu eux le faire de date à date
en remplaçant :   YEAR(TODAY())-YEAR(RC[-1])
par :                 (TODAY()-RC[-1])/365.25
bon courage :)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 30-11-2005 à 16:30:29    

wow trop compliqué, ça ira bien  
 
merci encore

Reply

Marsh Posté le 30-11-2005 à 16:42:10    

Atennds si c'est trop compliqué ça va pas !
Le but est aussi que tu comprennes pas seulment que tu aie la bonne formule !
 
Qu'est-qui te pose question ?


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 30-11-2005 à 16:55:50    

disons que je n'ai plus assez de temps pour peaufiner !
j'ai même pas réussi à changer les tranches d'âge ! genre
01 à 05
05 à 10
10 à 20
20 à 30
30 à 40
40 à 50
+ de 50
 
mais franchement ça va c'est nickel comme ça
 
merci pour tout

Reply

Marsh Posté le 30-11-2005 à 17:11:20    

peanutz a écrit :

mais franchement ça va c'est nickel comme ça

Surement mais le mieux serait que tu mettent tes tranches d'age à toi :

Code :
  1. "=IF(YEAR(TODAY())-YEAR(RC[-1])<10,""moins de 10 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<20,""10 à 20 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<30,""20 à 30 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<40,""30 à 40 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<50,""40 à 50 ans"",IF(YEAR(TODAY())-YEAR(RC[-1])<60,""50 à 60 ans"",""plus de 60 ans"" ))))))

ceci est, dans le language anglais, la formule qui se met dans ta case
 
YEAR(TODAY()) : ceci te donne l'année à la date d'aujourd'hui et s'affiche dans la cellule : ANNEE(AUJOURDHUI())
RC[-1] : cà c'est l'addresse de la cellule : R pour ligne rien entre crochet indique que c'est sur la même ligne, C pour la colone avec [-1] pour dire que c'est la cellule juste à gauche s'affiche AT1 par exemple.
YEAR(TODAY())-YEAR(RC[-1]) : ceci te donne donc le nombre d'années
après tu as la mise en place des conditions : If(test,si oui, si non)
le test en premier c'est YEAR(TODAY())-YEAR(RC[-1])<10 tous les tests sont construits ainsi, il n'y a que ces valeurs en gras à changer et le contenu du message de sortie : ""moins de 10 ans"".
Ensuite ce n'est qu'un jeu sur le nombre de parenthèses et sur les if, placer tes conditions dans l'ordre.
 
Essayes quand même...


Message édité par watashi le 30-11-2005 à 17:14:56

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 30-11-2005 à 17:11:20   

Reply

Marsh Posté le 30-11-2005 à 19:26:49    

bonsoir,
comme promis je t'apporte ma contribution :
Ces 2 macros doivent être copiées dans un module standart (Module1...) pas dans un module de feuille.

Code :
  1. Sub Test()
  2. Dim o As Range
  3. For Each o In Range("AT1:AT100" )
  4. o.Offset(0, 1) = TRANCHE(o)
  5. Next
  6. End Sub
  7. Function TRANCHE(Cellule As Range) As String
  8. Dim i%
  9. i = DateDiff("yyyy", Cellule, Date)
  10. Select Case i
  11. Case Is < 11: z = "0-10"
  12. Case Is < 21: z = "10-20"
  13. Case Is < 31: z = "20-30"
  14. Case Is < 41: z = "30-40"
  15. Case Is < 51: z = "40-50"
  16. Case Is < 61: z = "50-60"
  17. Case Is < 71: z = "60-70"
  18. Case Is < 81: z = "70-80"
  19. Case Is < 91: z = "80-90"
  20. Case Else: z = "Pièce de musée"
  21. End Select
  22. TRANCHE = z
  23. End Function

Ensuite tu n'a plus qu'a lancer la macro Test depuis ta feuille.
Nota : la macro s'arrête à la ligne 100 mais tu peux mettre un zéro de plus sans problème.
Je pense que le code se passe de commentaire.
 
Nota : il est possible d'utiliser la fonction TRANCHE comme une fonction d'Excel en mettant dans la cellule AU1 par exemple :
=TRANCHE(AT1)
et en faisant une recopie incrémentée. Ainsi ta feuille est toujours à jour.
A+


---------------
roger
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed