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

22essai-2-nyre.zip (8.58 Ko)

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 --

Je précise que le classeur comporte une autre macro qui utilise aussi

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

Après plusieurs essais dans différentes situations possibles, et "Mois_juin" remplacé par "Mois_Mai", ta macro fonctionne à merveille.

Grâce à ton aide, je vais gagner un temps fou à chaque nouveau contrat.

Encore un grand pour ta patience.

et peut-être à bientôt pour les gardes périscolaires

Rechercher des sujets similaires à "aide ecriture macro"