Formule dans une cellule excel par VBA

J0hle -  
 j0hle -
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. Info
     
    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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. J0hle
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. j0hle
     
    MERCI eriiic, cela fonctionne à merveille
    0