Formule dans une cellule excel par VBA

Bonjour,

Je débute en excel et j'ai quelques problèmes pour écrire une formule dans une cellule via VBA. Pour les formules plutôt classiques pas de problème, cela fonctionne par contre pour les formules relatives aux dates j'ai des petits soucis:

1) je cherche à obtenir le n° de semaine à partir d'une date. En faisant ceci:
ActiveCell.Offset(0, 5).Value = Application.WorksheetFunction.WeekNum(CDate(ActiveCell.Offset(0, 3).Value)) avec ActiveCell.Offset(0, 3).Value= ma date
cela fonctionne très bien mais j'aimerai qu'on puisse lire la formule dans la cellule.

J'ai essayé ça :
ActiveCell.Offset(0, 5).Formula = "= weeknum(" & ActiveCell.Offset(0, 3).Value & ")"
mais cela ne fonctionne pas. La formule s'écrit mais je n'ai pas de résultats...
j'ai également essayé plein d'autres choses avec des Cdate mais rien de probant

2) dans le même esprit je cherche à faire une soustraction de dates pour m'afficher un retard en jours. J'ai essayé comme ci-dessus mais aussi en utilisant DATEDIF mais toujours sans succès.

Je pense que cela vient d'une mausvaise gestion des formats de date mais je ne trouve pas la solution.
Quelqu'un peut-il me donner un coup de main ?
Merci par avance

5 réponses

  1. Bonjour,

    Essayer cette syntaxe :

    Sub Test()
    
        Dim Formule As String
    
        Formule = "= WeekNum(" & ActiveCell.Offset(0, 3).Value & ")"
    
        ActiveCell.Offset(0, 5).Value = Formule
    
    End Sub
    


    Cdt

    Info
    0
    1. Contributeur
      Bonjour,
      Je suppose Excel 2007 ? (avec mon 2000 ça existe pas)
      Pour mettre la formule en "DUR" il faut l'écrire avec la syntaxe de ton Excel.
          ActiveCell.FormulaLocal = "=No.SEMAINE(" & ActiveCell.Offset(, 3).Address & ";1)"

      FormulaLocal -- pour être transposable sur des PC d'une autre langue
      A+
      0
      1. Contributeur
        Bonjour tout le monde,

        En précisant que No.SEMAINE() retourne le n° de semaine selon la norme américaine et donc des résultats incorrects pour la france (norme ISO)
        Tu devrais rester en vba pour cette valeur et utiliser DatePart("ww", d, 2, 2), d étant la date.

        DatePart est quand meme erroné pour quelque date :
        29/12/1947
        31/12/1951
        30/12/1963
        29/12/1975
        31/12/1979
        30/12/1991
        29/12/2003
        31/12/2007
        30/12/2019
        29/12/2031
        31/12/2035
        30/12/2047
        29/12/2059

        eric
        0
        1. Merci pour vos réponses, je n'ai pas encore eu le temps d'essayer mais je vous ferai un retour dès que ce sera fait ..
          0
          1. MERCI eriiic, cela fonctionne à merveille
            0