Equivalence de formule en VBA

Bonjour à tous,

Je recherche à dégraisser mon fichier et pour ce faire, j'aimerais créer une macro qui m'insère tous les résultats d'une formule bien précise lorsque je défini l'année de mon fichier à l'ouverture du fichier vierge d'année.

Il s'agit donc d'un calendrier de production à 7 jours + (totaux de la semaine) de 53 semaines. Pour une raison de taille, je ne peux transmettre qu'un fichier raccourci à 12 semaines.

Voici la macro que je pensais faire :

rivate Sub Workbook_Open()

Dim annee As Integer
annee = Worksheets("Production").Range("A1")

If Not annee = "" Then
    Exit Sub

Else
    annee = InputBox("Quelle année, voulez-vous enregistrer?", "Choisir année")

    If annee = "" Then
        Exit Sub

    Else

        Application.ScreenUpdating = False
        Range("K4").Select
        formule = "TEXTE(7*j+DATE(annee;1;1)-JOURSEM(DATE(annee;1;1);2)-i;"jj.mm.aaaa")"

        For i = 1 To 53
            For j = 6 To -1
                If j = 6 Then
                    ActiveCell = "=LUNDI" & formule
                    ActiveCell.Offset(0, 2).Select
                ElseIf j = 5 Then
                    ActiveCell = "=MARDI" & formule
                    ActiveCell.Offset(0, 2).Select
                ElseIf j = 4 Then
                    ActiveCell = "=MERCREDI" & formule
                    ActiveCell.Offset(0, 2).Select
                ElseIf j = 3 Then
                    ActiveCell = "=JEUDI" & formule
                    ActiveCell.Offset(0, 2).Select
                ElseIf j = 2 Then
                    ActiveCell = "=VENDREDI" & formule
                    ActiveCell.Offset(0, 2).Select
                ElseIf j = 1 Then
                    ActiveCell = "=SAMEDI" & formule
                    ActiveCell.Offset(0, 2).Select
                ElseIf j = 0 Then
                    ActiveCell = "=DIMANCHE" & formule
                    ActiveCell.Offset(0, 2).Select
                ElseIf j = -1 Then
                    ActiveCell = "=TOTAUX SEMAINE" & i
                    ActiveCell(57, -76).Select
                End If
            Next
        Next

    End If

End If

End Sub

Le problème, c'est que je ne sais pas comment définir la variable "formule," ni la transcrire correctement en formule VBA et finalement que cela ne me donne que le résultat de la formule et non la formule entière.

J'espère que c'est compréhensible et merci d'avance,

Viox

16fichier-test.xlsm (287.78 Ko)

déjà si tu veux mettre une formule tu dois le spécifier par .formula ou .formulalocal puisque tu les tapes en FR

ActiveCell.formulalocal= "=LUNDITEXTE(7*j+DATE(annee;1;1)-JOURSEM(DATE(annee;1;1);2)-i;"jj.mm.aaaa")"

Ne connaissant pas la formule lunditexte.. difficile de juger, cependant je peux directement te dire que les " à l'intérieur d'un string doivent être doublés...

ActiveCell.formulalocal= "=LUNDITEXTE(7*j+DATE(annee;1;1)-JOURSEM(DATE(annee;1;1);2)-i;"""jj.mm.aaaa""")"

Merci EngueEngue pour ta réponse! C'était pas ce que je recherchais, mais ça m'a permit de me réorienter et j'ai finalement trouvé comment je devais m'y prendre, donc merci bien d'avoir pris le temps de me lire.

Voici donc le code que j'ai écrit qui marche très bien pour ceux à qui ça intéresserait!

Private Sub Workbook_Open()

Dim annee As String, jour As Integer, calculdate As Date

If Not Worksheets("Production").Range("A1") = "" Then
    Exit Sub

Else
    annee = InputBox("Quelle année, voulez-vous enregistrer?", "Choisir année")

    If annee = "" Then
        Exit Sub

    Else

        Application.ScreenUpdating = False
        Worksheets("Production").Range("A1") = annee
        Range("K4").Select
        jour = 6

        For i = 1 To 12
            For j = 1 To 8
            calculdate = 7 * i + DateSerial(annee, 1, 1) - Weekday(DateSerial(annee, 1, 1), vbMonday) - jour
            Select Case jour
                Case Is = 6
                    ActiveCell = "LUNDI " & calculdate & " (" & i & ")"
                    ActiveCell.Offset(0, 2).Select
                Case Is = 5
                    ActiveCell = "MARDI " & calculdate & " (" & i & ")"
                    ActiveCell.Offset(0, 2).Select
                Case Is = 4
                    ActiveCell = "MERCREDI " & calculdate & " (" & i & ")"
                    ActiveCell.Offset(0, 2).Select
                Case Is = 3
                    ActiveCell = "JEUDI " & calculdate & " (" & i & ")"
                    ActiveCell.Offset(0, 2).Select
                Case Is = 2
                    ActiveCell = "VENDREDI " & calculdate & " (" & i & ")"
                    ActiveCell.Offset(0, 2).Select
                Case Is = 1
                    ActiveCell = "SAMEDI " & calculdate & " (" & i & ")"
                    ActiveCell.Offset(0, 2).Select
                Case Is = 0
                    ActiveCell = "DIMANCHE " & calculdate & " (" & i & ")"
                    ActiveCell.Offset(0, 2).Select
                Case Is = -1
                    ActiveCell = "TOTAUX SEMAINE " & i
                    ActiveCell(57, -76).Select
            End Select
            jour = jour - 1
            Next
        jour = 6
        Next
        Application.ScreenUpdating = True
    End If

End If

End Sub

Bonne journée,

Viox

En effet je n'avais rien compris!!!

Si tu veux utiliser des formules excel dans vba, par exemple la fonction.. Texte

C'est

application.worksheetfunction.text(paremetre1,parametre2)

.sum

.average

La plupart des fonctions de la classeur sont utilisables depuis classe worksheetfunction

Rechercher des sujets similaires à "equivalence formule vba"