Ajouter jours à cellule contenant date
#1
Débutant XLPages

Inscription: 10/07/2014

Messages: 1

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-07-2014 12h39
Bonjour à tous,
 
Actuellement en stage j'utilise chaque jour VBA notamment afin de monter un tableau de prévision de trésorerie pour l'entreprise dans laquelle je travaille. 
Je dois faire une fonction qui me permet de modifier une date d'échéance de règlement en permettant à l'utilisateur de saisir le délai supplémentaire qu'il souhaite ajouter à cette échéance initiale. 
J'aurais idéalement voulu stocké cette nouvelle date dans la cellule précédente. J'ai essayé une sub pour pouvoir le faire, mais d'après mes cours VBA, les sub ne sont pas idéales pour renvoyer des valeurs. Voilà pourquoi j'ai utilisé une fonction, que je ne maîtrise plus très bien.
 
Le seul résultat que j'obtient est soit #valeur! soit 01/01/1900. 
 
Je pense que mes deux principaux problèmes sont dans la saisie de la variable de la fonction et la définition de son type, et ensuite y ajouter le nombre de jours saisis. 
 
Ci-joint mes écritures complétées de commentaires :
 
Function RETARD(dateactualisee As Range)
 
Dim jours As Integer
Dim nbrj As Integer
Dim reponse As Integer
 
'Si qui permet de vérifier que la cellule à laquelle l'utilisateur veut ajouter un nbr de jours supplémentaire contient bien une date
If IsDate(dateactualisee.Value) = False Then
 MsgBox "L'utilisation de cette fonction requiert une date en paramètre"
 Exit Function
End If
 
'demande à l'utilisateur s'il...
reponse = MsgBox("Souhaitez-vous retarder la date de règlement prévue ?", 36, "Prévoir retard")
 
'Si la réponse est positive
If reponse = 6 Then
  nbrj = InputBox("De combien de jours souhaitez-vous retarder l'échéance ?", "Saisir nombre jours supplémentaires", "0")
     
     'Si qui permet de vérifier que l'utilisateur a bien saisi un nombre
     If IsNumeric(nbrj) = False Then
      MsgBox "Vous n'avez pas saisi un nombre, recommencer.", vbOKOnly & vbInformation
      Exit Function
    End If
    
  'Ajoutes la valeur saisie par l'utilisateur à la cellule initialement choisie
  
  dateactualisee.Value = DateAdd(dateinterval.Day, jours, dateactualisee.Value)
Else
  MsgBox " Vous n'avez pas modifier la date prévue de règlement", vbOKOnly & vbInformation
End If
 
End Function
 
 
 
De plus j'ai essayé avec Cells(i,j).Value / Cells(i,j).Date mais je ne peux pas fixer une cellule en particulier car elle ne se modifie pas par l'incrémentation comme le permettent les fonctions Excel. Du coup je n'arrive pas à utiliser une Cells lorsque son emplacement est inconnu à l'avance car le tableau est susceptible d'être mis à jour via de nouvelle ligne quotidiennement (j'ai utilisé des boucles, mais avec (i=1 to n) elle ne finissait jamais).
 
Merci d'avance,
 
Bien cordialement à tous,
 
AlexandreVBA
Hors Ligne
Rapport   Haut 

Re: Ajouter jours à cellule contenant date
#2
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 11-07-2014 22h48

Bonjour alexandreVBA et bienvenu dans le forum,

 

Effectivement tes cours de VBA auraient dû t'apprendre qu'une procédure (Sub) ne retourne jamais de valeur et non qu'elle ne sont pas idéales pour ce faire.

 

1- Ton code ne compile pas, tu as sans doute oublié d'insérer la directive Option Explicit en en-tête de module. Là-dessus il faut blâmer Microsoft et personne d'autre : voir dans l'éditeur VBA Menu Outils/Options..., onglet Éditeur et cocher Déclaration des variables obligatoire ce qui ajoutera automatiquement la directive Option Explicit à tout nouveau module; Microsoft laisse par défaut, et c'est un défaut, cette case non cochée (misère). Ensuite compiler le code souvent, très souvent, à l'aide du menu Débogage/Compiler VBAProject.

 

2- La fonction RETARD ne retourne aucune valeur, elle se contente de modifier le paramètre passé en référence (dateactualisee). Auquel cas une procédure (Sub) aurait tout aussi bien fait l'affaire. Bien que ne retournant jamais quoi que ce soit, on peut parfaitement modifier un paramètre passé en référence à l'intérieur d'un procédure.

 

3- La variable dateinterval n'est déclarée nulle part, la compilation te l'aurait révélée. Aussi cette variable n'est utilisée qu'à un seul endroit dans

DateAdd(dateinterval.Day, jours, dateactualisee.Value).

Où donc voudras-tu saisir une valeur pour cette variable?

 

4- La fonction DateAdd ne supporte aucun paramètre Jours qui n'étant déclaré nulle part prend pour valeur initiale zéro (0) en tant qu'entier (Integer) et dateinterval.Day est inconnu au régiment. Revoir impérativement la syntaxe de la fonction DateAdd dans l'aide (F1).

 

5- Il est contre-indiqué de ne pas utiliser les constantes symboliques dans le code.

 

If reponse = 6

devrait se lire 

If reponse = vbYes

et

 MsgBox("Souhaitez-vous retarder la date de règlement prévue ?", 36, "Prévoir retard")

devrait se lire

 MsgBox("Souhaitez-vous retarder la date de règlement prévue ?",vbYesNo + vbQuestion , "Prévoir retard")

C'est plus parlant.

 

Bref, un petit classeur exemple et quelques autres explications seraient de mise, en particulier la manière utilisée pour lancer cette fonction.

 

Ceci dit je laisse à d'autres le soin de poursuivre, j'ai d'autres bricoles au fourneau.

 

Cordialement,

 

Guy

Edité par Guy le 12/07/2014 01:19:19

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes