Transformer formule avec fonction "Indirect" en code macro excel

Résolu/Fermé
Nyre Messages postés 8 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 18 décembre 2013 - 23 juin 2013 à 17:13
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 24 juin 2013 à 09:47
Bonjour,

Je suis sur Excel 2003.

Dans mon classeur les feuilles de calcul représentent chacune un mois à partir de la troisième feuille. Il peut représenter plusieurs années. Le premier mois affiché peut être n'importe quel mois de l'année, le nombre de mois n'est pas constant, je peux être amené à rajouter des mois.

Dans la troisième feuille du classeur (1er mois affiché) et dans toutes les feuilles représentant le mois de juin la cellule AE46 contient la formule suivante : =AF38.

La cellule AE46 de toutes les autres feuilles contient cette formule :
"=INDIRECT("'"&TEXTE(MOIS.DECALER(STXT(CELLULE("nomfichier";$A$1);TROUVE("]";CELLULE("nomfichier";$A$1))+1;32);-1);"mmmm aaaa")&"'!AE46")+AF38)"

Ces formules me permette d'obtenir l'effet suivant : de juin à mai de chaque année, je cumule chaque mois le résultat de la cellule AF38 dans la cellule AE46. Et en juin on recommence "à zéro".

Je voudrais automatiser cette manipulation à l'aide d'une macro et je bloque sur la différence de syntaxe avec le vba.

Comme vous allez pouvoir en juger très vite, je ne maîtrise pas du tout. Je réussi à peu près à comprendre certains codes, mais j'ai des difficultés à m'exprimer en vba. J'ai commencé un code qui m'a déjà renvoyé plusieurs erreurs qui m'ont fait procéder à plusieurs modifications et pour l'instant j'en suis à l'erreur suivante : "erreur de compilation next sans for" et je ne vois pas de quoi ça vient.

Je pense que j'aurai aussi des problème avec la fonction "CELLULE" contenue dans ma formule. Et peut-être d'autres encore.

Voilà mon code bricolé :

Sub semaines_cumulées_depuis_juin()
Dim I As Integer
Dim Nom As String


For I = 3 To Sheets.Count

With Sheets(I)

If I = 3 Then
.Range("AE46").FormulaR1C1 = "=R[-8]C[1]" 'af38
Else
If LCase(.Name) Like "*juin*" Then
.Range("AE46").FormulaR1C1 = "=R[-8]C[1]" 'af38
Else
.Range("AE46").FormulaR1C1 = "='" & Nom & "'!RC+R[-8]C[1]"
End If
End If

Nom = .Name
Mois_juin = .Name
Next I
End Sub


Est-ce que quelqu'un pourrait m'aider ?

Cordialement.




A voir également:

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
23 juin 2013 à 22:22
Bonjour,

C'est pas mal, il manque juste le End With.
Pour plus de lisibilité, tu peux remplacer FormulaR1C1 par Formula (ou FormulaLocal) :
Sub semaines_cumulées_depuis_juin()
Dim I As Integer
Dim Nom As String

For I = 3 To Sheets.Count
  With Sheets(I)
    If I = 3 Then
      .Range("AE46").Formula = "=AF38"
    Else
      If LCase(.Name) Like "*juin*" Then
        .Range("AE46").Formula = "=AF38"
      Else
        .Range("AE46").Formula = "='" & Nom & "'!AE46+AF48"
      End If
    End If
    Nom = .Name
  End With
Next I
End Sub
 

0
Nyre Messages postés 8 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 18 décembre 2013
24 juin 2013 à 08:39
Bonjour Patrice 33740,
Et grand merci ! Tout fonctionne. Je ne connaissais pas .Formula qui simplifie beaucoup la rédaction du code.

Bien cordialement.
Nyre
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
24 juin 2013 à 09:47
Et FormulaLocal permet d'écrire les formules dans la langue de l'utilisateur (en français)
0