Aide sur écriture macro
Bonjour,
Vous m'avez déjà beaucoup aidée et j'ai à nouveau un problème d'écriture :
Dans mon classeur, la cellule M10 (plage M10:P10) des feuilles de calcul comportent une formule qui me donne un résultat numérique. les feuilles correspondent chacune à un mois de l'années et le classeur peut comporter plusieurs années.
Je voudrais effectuer une macro supplémentaire :
Pour la feuille de juin, je veux que Q10(fusionnée !)= M10 de la feuille précédente. J'ai donc écrit un début de code qui fonctionne :
Dim Feuille As Worksheet, Nom As String
For Each Feuille In ThisWorkbook.Worksheets
If LCase(Feuille.Name) Like "*juin*" And Feuille.Index >1 Then
Feuille.Range("Q10").FormulaR1C1 = "='" & Nom & "'!RC[-4]"
Et j'aimerais continuer ainsi :
Else
Feuille.Range("Q10").FormulaR1C1 = la cellule Q10 de juin pour les 11 feuilles suivantes.
Pour qu'en juin suivant Q10 soit de nouveau = à M10 de feuille précédente
En clair tous les ans, Q10 de juin = M10 feuille précédente (ça, je l'ai) et pour toutes les feuilles qui sont entre 2 mois de juin, leur cellule Q10 = Q10 de juin précédent...
Mais ça je ne sais pas l'écrire.
Je vous joins une feuille seulement pour que vous puissiez visualiser la position des cellules. Il va par exemple vous manquer des chiffres en AA46 mais on peut y mettre ce que l'on veut pour essayer. On peut aussi modifier M8 sans conséquence.
Ces cellules (entre autre), dans le classeur réel sont affectées par des macros mais je n'ai pas voulu compliquer inutilement ma demande, car ça n'a pas de conséquences.
A bientôt
Bonjour
C'est sur cette partie que je bute
pour toutes les feuilles qui sont entre 2 mois de juin, leur cellule Q10 = Q10 de juin précédent...
Cela veut il dire qu'il faut reporter le mois de Juin sur les 11 mois suivant ?
Donc un contrat qui commence en Juillet et qui finit en Décembre, il n'y aura aucun report
Ou cela veut dire qu'entre Juillet et Mai il faut reporter le contenu de la cellule Q10 du mois précédent ?
A te lire
Bonjour Banzaï64 et merci de revenir plancher sur mes énigmes,
Donc un contrat qui commence en Juillet et qui finit en Décembre, il n'y aura aucun report
C'est exactement cela parce que tant qu'il n'y a pas encore eu 1 mois de mai, la cellule Q10 est vide ou à zéro (peu importe l'affichage).
J'espère que ça ne complique pas trop...
A bientôt.
Bonjour
Il faudrait ta macro car c'est à partir de celle-ci que l'on va savoir si un mois de juin existe et en fonction de son existence écrire la formule
Style
If Mois_Juin <> "" Then
.Range("Q10").Formula = "='" & Mois_Juin & "'!M10"
End If
Je ne suis pas sûre de comprendre :
pour l'instant le début de ma macro qui fonctionne c'est celle que j'ai notée en début de sujet :
Dim Feuille As Worksheet, Nom As String
For Each Feuille In ThisWorkbook.Worksheets
If LCase(Feuille.Name) Like "*juin*" And Feuille.Index >1 Then
Feuille.Range("Q10").FormulaR1C1 = "='" & Nom & "'!RC[-4]"
est-ce que je dois y intégrer ta proposition de code ?
si oui, est ce qu'il ne me manque pas quelque chose pour les autre feuilles que juin. Je rappelle que les cellules M10 de toutes les feuilles contiennent une formule (=AA46/10/M9), mais je ne comprends peut-être pas ce que tu veux dire..
A suivre
Bonjour
Dans cette macro tu utilises la variable Nom
D'où vient elle ?
Mais sinon c'est dans cette partie qu'il faut initialiser la variable Mois_Juin (String)
Mois_Juin=Feuille.Name
Ensuite dans la macro incomplète que tu as fournis
Else
If Mois_Juin <> "" Then
Feuille.Range("Q10").Formula = "='" & Mois_Juin & "'!M10"
End If
Next Feuille
Mais sans le code complet
Pas sur que je ne me plante pas
A suivre
variable Nom
pardon !
Nom = Feuille.Name
Je vais essayer ce que tu préconise et te tiens au courant.
8) 8)
Bonjour
Nyre a écrit :Dim Feuille As Worksheet, Nom As String
For Each Feuille In ThisWorkbook.Worksheets
If LCase(Feuille.Name) Like "*juin*" And Feuille.Index >1 Then
Feuille.Range("Q10").FormulaR1C1 = "='" & Nom & "'!RC[-4]"
Dans cette macro tu utilises Nom(c'est une variable)
Comment est-elle initialisée ?
Ta macro fournie est incomplète donc je ne peux qu'imaginer la suite
Et pas sur que cela fonctionne comme tu veux
Oui. Voilà la macro complète à laquelle je voudrais ajouter la valeur de la cellules Q10 des 11 feuilles coincées entre les mois de juin :
Dim Feuille As Worksheet, Nom As String
For Each Feuille In ThisWorkbook.Worksheets
If LCase(Feuille.Name) Like "*juin*" Then
Feuille.Range("Q10").FormulaR1C1 = "='" & Nom & "'!RC[-4]:RC[-1]"
Else
Feuille.Range("Q10").FormulaR1C1 = "='"!RC[-4]:RC[-1]"
End If
Nom = Feuille.Name
Next Feuille
Je pense que je vais avoir un problème si La variable Nom et la variable Mois_Juin sont toutes les deux Feuille.Name.
Je n'arrive pas à le vérifier parce que quand je rajoute ton code le débogueur m'indique Next sans for ???
Une idée , des questions??
-- 31 Mai 2011, 19:37 --
Nom = Feuille.Name
Juste pour info
Bonsoir
Ta macro à changé
Sub Le_Nom_De_Ta_Macro()
Dim Feuille As Worksheet, Nom As String
Dim Mois_Juin As String
For Each Feuille In ThisWorkbook.Worksheets
If LCase(Feuille.Name) Like "*juin*" Then
Feuille.Range("Q10").FormulaR1C1 = "='" & Nom & "'!RC[-4]:RC[-1]"
Mois_Juin = Feuille.Name
Else
If Mois_Juin <> "" Then
Feuille.Range("Q10").Formula = "='" & Mois_Juin & "'!M10"
End If
'Feuille.Range("Q10").FormulaR1C1 = "='"!RC[-4]:RC[-1]"
End If
Nom = Feuille.Name
Next Feuille
End Sub
A tester
Ta macro à changé
'Feuille.Range("Q10").FormulaR1C1 = "='"!RC[-4]:RC[-1]"
Oui c'est une erreur de copier coller après plusieurs essais, cette ligne est une intruse.
La macro complète que tu me fournis (hormis cette ligne intruse) semble correspondre à ce que je veux dans la syntaxe.
Elle ne fonctionne pas et m'indique erreur de valeur dans les cellules M10, Q10, mais aussi dans toutes les cellules de la feuille qui ont un lien direct soit avec les cellules nommées cumuls, soit avec ces cellules. J'entends par lien direct les formules de ces cellules.
Je pense que la macro qu'on essaie de créer entre en conflit avec celle des nets cumulés. Je te la montre pour info
Dim Feuille As Worksheet, Nom As String
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Index = 1 Then
Feuille.Range("AA40").FormulaR1C1 = "=RC[-7]"
Else
Feuille.Range("AA40").FormulaR1C1 = "='" & Nom & "'!RC+RC[-7]"
End If
If LCase(Feuille.Name) Like "*juin*" Or Feuille.Index = 1 Then
Feuille.Range("AA46").FormulaR1C1 = "=R[-6]C[-7]"
Else
Feuille.Range("AA46").FormulaR1C1 = "='" & Nom & "'!RC+R[-6]C[-7]"
End If
Nom = Feuille.Name
Next Feuille
End Sub
Donnes-mois juste ton avis sur mes doutes.
Ensuite si ça remet trop d'éléments en cause,je pense que je ne vais pas chercher à aller plus loin. Jusque là, en dehors de ces 11 feuilles coincées entre 2 mois de juin qui n'étaient pas automatisées, le reste fonctionnait bien et s'il le faut j'interviendrai tous les mois de juin pour faire un copier coller sur les 11 feuilles suivante...
-- 01 Juin 2011, 08:50 --
Bonjour banzaï64,
Après une nouvelle tentative, je me suis aperçue qu'hier j'avais une erreur dans ma recopie de ton code.
Je n'ai plus d'erreur valeur dans les cellules. Je vais tester pour vérifier que les résultats sont bien ceux que j'attends et te tiens au courant.
A bientôt.
Bonsoir banzaï64
Grâce à ton aide, je vais gagner un temps fou à chaque nouveau contrat.
Encore un grand
et peut-être à bientôt pour les gardes périscolaires