Transformer formule avec fonction "Indirect" en code macro excel
Résolu
Nyre
Messages postés
8
Statut
Membre
-
Patrice33740 Messages postés 8930 Statut Membre -
Patrice33740 Messages postés 8930 Statut Membre -
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.
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:
- Transformer formule avec fonction "Indirect" en code macro excel
- Code ascii - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formule si et excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Excel mise en forme conditionnelle formule - Guide
2 réponses
Bonjour,
C'est pas mal, il manque juste le End With.
Pour plus de lisibilité, tu peux remplacer FormulaR1C1 par Formula (ou FormulaLocal) :
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