[déplacé VB.NET -> VBA] Problème code VBA pour macro sous excel 2007

cs_Jay29 Messages postés 4 Date d'inscription mercredi 16 septembre 2009 Statut Membre Dernière intervention 18 septembre 2009 - 16 sept. 2009 à 16:45
cs_Jay29 Messages postés 4 Date d'inscription mercredi 16 septembre 2009 Statut Membre Dernière intervention 18 septembre 2009 - 17 sept. 2009 à 09:31
Bonjour à tous,

Je suis nouveau sur le forum. Étant débutant en VBA, je dois créer une macro sous excel 2007 pour calculer l'ancienneté d'un fichier et l'insérer dans une nouvelle colonne. De plus, je dois demander a l'utilisateur à partir de quelle date il veut la calculer. Mon soucis est que je n'arrive pas a faire incrémenter ma macro. Pour être plus clair, j'ai une colonne qui contient la date de "départ" et l'utilisateur tape la date "d'arrivée". Cependant dans ma formule je fais référence a la cellule qui contient la date de départ mais elle ne s'incrémente pas lorsque je veux que le calcul se fasse par rapport a la date de la cellule suivante. Voici le code que j'ai fait :
[i]
Sub Ancienneté()

Range("AB1").Select
ActiveCell.FormulaR1C1 = "Ancienneté creation"
Range("AB2").Select
Dim firstDate As String
firstDate = InputBox("Entrer une date")
Dim secondDAte As Date
secondDAte = CDate(firstDate)
ancien = DateDiff("m", Range("O2"), secondDAte)
ActiveCell.FormulaR1C1 = ancien
Selection.AutoFill Destination:=ActiveCell.Range("A1:A2050"), Type:= _
xlFillDefault
ActiveCell.Range("A1:A2050").Select
ActiveCell.Offset(2041, 0).Range("A1").Select/i

End Sub

J'espère avoir été assez clair dans ma demande, dans le cas contraire n'hésitez pas a m'en faire part et merci d'avance pour votre aide.

2 réponses

cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
16 sept. 2009 à 23:31
Bonjour,

Je viens de tester avec :
Sub Ancienneté() 
  Dim firstDate As Date
  Dim Ancien As Date

  firstDate = CDate(InputBox("Entrer une date"))
  ActiveSheet.Range("B1").Value = DateDiff("m", ActiveSheet.Range("A1").Value, firstDate)
  ActiveSheet.Range("B1").NumberFormat = "General"
End Sub

et ça marche bien.

Dans l'exemple je suppose que la date de départ se trouve dans la cellule A1 de la feuille active et j'écris le résultat dans la cellule B2.
Je ne saurais trop te conseiller de nommer explicitement tes différents éléments, par exemple faire référence à la feuille par son nom et de faire un contrôle de la date saisie. Par exemple qu'elle soit superieure à la date de référence.

Par exemple :
Sub Ancienneté()
  Dim refDate As Date
  Dim firstDate As Date
  Dim Ancien As Date
    
  refDate = CDate(Sheets("Feuil3").Range("A1").Value)
  On Error Resume Next
    Do
      firstDate = CDate(InputBox("Entrer une date"))
      If firstDate < refDate Then
          Call MsgBox("Vous devez saisir une date supèrieure à la date de référence : " & CStr(refDate), vbCritical)
      End If
    Loop Until firstDate >= refDate
  On Error GoTo 0
  Sheets("Feuil1").Range("B1").Value = DateDiff("m", Sheets("Feuil1").Range("A1").Value, firstDate)
  Sheets("Feuil1").Range("B1").NumberFormat = "General"
End Sub


Ce n'est qu'une suggestion, peut être que des personnes plus experimentées auront de meilleurs solutions.

A+
0
cs_Jay29 Messages postés 4 Date d'inscription mercredi 16 septembre 2009 Statut Membre Dernière intervention 18 septembre 2009
17 sept. 2009 à 09:31
Effectivement cela fonctionne merci beaucoup pour ton aide, cependant il me reste toujours le problème de l'incrémentation. Je n'arrive pas a faire en sorte qu'il l'exécute pour chaque cellule différente. Dans ton exemple il ne le fait que avec la valeur de la cellule A1 or je voudrais qu'il le fasse automatiquement avec la cellule A2, A3, A4 ect .....
Si vous avez des idées, elles sont les bienvenus!!!
Merci beaucoup!!!
0
Rejoignez-nous