Formule si et macro calcul de jours

tofing Messages postés 22 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

7 réponses

  1. Christof422 Messages postés 990 Statut Membre 213
     
    Pour le debut:
    If cells(4,5)<>"" or cells(4,6)<>"" then
    


    je ne vois pas ce que fais precisement la fonction jours360
    0
    1. tofing Messages postés 22 Statut Membre
       
      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
    2. Christof422 Messages postés 990 Statut Membre 213
       
      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
  2. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
    2. melanie1324 Messages postés 1561 Statut Membre 156
       
      entre parenthèse, tu pouvais enregistrer une macro, écrire ta formule et tu aurais eu le code vba et macro de faite
      0
  3. tofing Messages postés 22 Statut Membre
     
    Merci à vous deux
    Je teste de suite ta formule mélanie et tiens compte de tes remarques
    0
  4. tofing Messages postés 22 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tofing Messages postés 22 Statut Membre
     
    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
  7. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      il manque le end sub a la fin et tu peux supprimer la ligne :
      Range("G1:G2").Select
      0
  8. tofing Messages postés 22 Statut Membre
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    2. tofing Messages postés 22 Statut Membre
       
      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
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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