Formule si et macro calcul de jours

Fermé
tofing Messages postés 20 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 22 juin 2011 - 21 juin 2011 à 14:20
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 22 juin 2011 à 13:36
Bonjour,

Je souhaiterais appliquer cette formule sous la forme d'une macro
=SI(OU(ESTVIDE(E4);ESTVIDE(F4));"";JOURS360(E4;F4)+1)
Si quelqu'un a une idée ça serait sympa
Merci à vous


A voir également:

7 réponses

Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
21 juin 2011 à 14:32
Pour le debut:
If cells(4,5)<>"" or cells(4,6)<>"" then


je ne vois pas ce que fais precisement la fonction jours360
0
tofing Messages postés 20 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 22 juin 2011
21 juin 2011 à 14:42
Merci christof de ta réponse
En fait j'ai écrit cela mais je ne sais pas si c'est correct, du moins cela ne fonctionne pas
Range("G:G").FormulaLocal = "=SI(OU(ESTVIDE(E4);ESTVIDE(F4));"";JOURS360(E4;F4)+1)"

La formule jours360 permet de calculer le nombre de jours calendaires entre deux dates
ps : je j'ai pas précisé mais je suis novice sur vba
MERCI
0
Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
Modifié par Christof422 le 21/06/2011 à 14:44
ok, c'est bien ce qu'il me semblai, mais ta formule ne marchai pas.
Essaye la formule de melanie1324. Si cela ne marche pas je me pencherai plus serieusement sur ton cas.
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 juin 2011 à 14:41
bonjour,

Sub Macro1()

Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(OR(ISBLANK(R[-9]C[1]),ISBLANK(R[-9]C[2])),"""",DAYS360(R[-9]C[1],R[-9]C[2])+1)"
Range("A1").Select
End Sub
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 juin 2011 à 14:42
une petite erreur, pour que ce soit valable en A1 :
Sub Macro2()
'
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(OR(ISBLANK(R[3]C[4]),ISBLANK(R[3]C[5])),"""",DAYS360(R[3]C[4],R[3]C[5])+1)"
Range("A1").Select
End Sub
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 juin 2011 à 14:43
entre parenthèse, tu pouvais enregistrer une macro, écrire ta formule et tu aurais eu le code vba et macro de faite
0
tofing Messages postés 20 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 22 juin 2011
21 juin 2011 à 14:46
Merci à vous deux
Je teste de suite ta formule mélanie et tiens compte de tes remarques
0
tofing Messages postés 20 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 22 juin 2011
21 juin 2011 à 15:48
Merci ç marche
J'aimerais en plus que la formule s'applique à l'ensemble de la colonne G et s'active dès l'ouverture d''excel

Pour l'ouverture auto, j'ai

Sub Auto_open()
worksheetS("sheet1").Activate


et pour la colonne entière j'ai

Range("G:G").Select

Mais ça ne fonctionne pas très bien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tofing Messages postés 20 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 22 juin 2011
21 juin 2011 à 15:54
C'est bon j'ai enlevé
worksheetS("sheet1").Activate puisque je pense qu'en l'inscrivant dans le module de la feuille 1, il n'est pas nécessaire de rajouter cela

Merci pour votre aide
Cordialement

Tofing
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 juin 2011 à 15:56
bonjour,

Sub Auto_open()
worksheetS("sheet1").Activate

range("G1").select

ActiveCell.FormulaR1C1 = _
"=IF(OR(ISBLANK(RC[-2]),ISBLANK(RC[-1])),"""",DAYS360(RC[-2],RC[-1])+1)"
Range("G2").Select

Range("G1").Select
Selection.AutoFill Destination:=Range("G1:G65000"), Type:=xlFillDefault
Range("G1:G2").Select
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 juin 2011 à 15:56
il manque le end sub a la fin et tu peux supprimer la ligne :
Range("G1:G2").Select
0
tofing Messages postés 20 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 22 juin 2011
21 juin 2011 à 16:53
Alors voila le code que j'avais à la base

Option Explicit

Sub Auto_open()

ActiveCell.FormulaR1C1 = _
"=IF(OR(ISBLANK(RC[-2]),ISBLANK(RC[-1])),"""",DAYS360(RC[-2],RC[-1])+1)"

For Each cellule In colums(8).Cells
End Sub

Maintenant ça ne marche plus
Je n'arrive pas à appliquer ton code non plus mélanie
Je dois l'inscrire dans un module ou dans le code de la feuille ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
21 juin 2011 à 18:38
Bonjour,

Au passage c'est une mauvaise idée que de remplir toute la colonne. Le fichier va prendre de l'embonpoint pour rien...
Et puis dans le auto_open ce n'est pas une bonne idée non plus. Une fois que c'est fait c'est bon (tant que personne n'efface les cellules)

Ca serait mieux de la mettre dans l'évènement Change lorsque E et F sont saisis, ou compléter à 100 ou 1000 lignes libres à l'ouverture.
eric
0
tofing Messages postés 20 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 22 juin 2011
22 juin 2011 à 12:33
Merci eric de tes précisions mais pourrais-tu les expliciter davantage?
Qu'entends-tu par "Ca serait mieux de la mettre dans l'évènement Change lorsque E et F sont saisis"
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
22 juin 2011 à 13:36
Bonjour,

Tu veux absolument que la formule soit présente ?
Tant qu'à y mettre du vba autant mettre uniquement le résultat (en G ?) si les 2 dates sont correctes.

Et la façon de traiter ton problème dépend du fonctionnement de ta feuille :
Est-ce une feuille déjà crée et il faut traiter toutes les lignes ?
Est-ce une importation auquel cas les données ne sont pas forcément au format date ?
Est-une saisie ligne à ligne ?
Est-ce le résultat d'une formule ?
Est-que les données peuvent être modifiées au cours du temps ?

Une réponse à toutes ces questions (6) et un fichier exemple déposé sur cijoint.fr (coller ici le lien fourni) permettra une réponse la plus correcte à ton pb.

Et comme tu as l'air débutant sur excel j'espère que tu sais que jours360() considère que l'année fait 360 jours....
C'est à dire qu'entre le 15/04/11 et le 21/09/11 jours(360) donne 157 au lieu 159
Si tu veux la différence réelle en jours il faut simplement =F2-E2 et remettre le format de cellule à 'Standard'

eric
0