Probleme macro avec formula RC

Bonjour,

voici ma macro
For j = 10 To 126 Step 7
For i = 0 To 5
Cells(3, j + i).Select
ActiveCell.FormulaR1C1 = _
"=IF(charge_jour!R[-1]C[" & 4 - j - i & "]= """",0, DATE(ANNEE (charge_mois!R1Cj), MOIS(charge_mois!R1Cj),1))"
Next i
Next j

elle ne fonctionne pas et je suis sur que le problème vient de R1Cj. En fet j'ai utilisé une variable j car il faut refaire cette procedure pour les colonnes 10, 17, 24 .. Jusqu'à 126
Auriez vous une solution?

10 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    Essaye :
    For j = 10 To 126 Step 7
    For i = 0 To 5
    Cells(3, j + i).Select
    ActiveCell.FormulaR1C1 = _
    "=IF(charge_jour!R[-1]C[" & 4 - j - i & "]= """",0, DATE(ANNEE (charge_mois!R1Cj), MOIS(charge_mois!R1C" & j & "),1))"
    Next i
    Next j

    Réponds moi dès que t'a essayé.
    1. Contributeur
      Bonjour,
      Avec une tel formule il serait préférable de faire une fonction perso.
      1°) ça éviterait d'avoir cette fameuse formule dans chaque cellules.
      2°) T'aurais plus de problème de mémoire.
      Et je dois dire que je ne comprend pas bien pourquoi faire une macro qui met des formules dans les cellules, pourquoi par faire la macro directement en Fonction ?
      A+
      L'expérience instruit plus sûrement que le conseil. (André Gide)
      Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
      1. je viens d'essayer et cela marche parfaitement!

        Je te remercie

        @+
        1. Derien =)
        2. Parcontre je vais encore t'embêter, mais la je viens d'appliquer le même principe avec une formule plus longue et j'obtiens le message d'erreur "7" Mémoire insuffisante
          y'a t il un moyen de régler ça?
        3. Fais voir le code ^^
      2. For j = 10 To 126 Step 7
        For i = 0 To 5
        Cells(3, j + i).Select
        ActiveCell.FormulaR1C1 = _
        "=IF(charge_jour!R[-1]C[" & 4 - j - i & "]="""",0,IF(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),DAY(charge_jour!R[-1]C[" & 3 - j - i & "]))<DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),IF(DATE(YEAR(charge_jour!R[-1]C[" & 4 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 4 - j - i & "]),DAY(charge_jour!R[-1]C[" & 4 - j - i & "]))<DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),0,IF(DATE(YEAR(charge_jour!R[-1]C[" & 4 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 4 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C " & j & "),MOIS(charge_mois!R1C " & j & "),1),(DATEDIF(DATE(ANNEE(charge_mois!R1C" & j & "),MOIS(charge_mois!R1C " & j & "),1),charge_jour!R[-1]C[" & 4 - j - i & "],""d"")+1)*charge_jour!R[-1]C[" & 7 - j - i & "],30*charge_jour!R[-1]C[" & 7 - j - i & "])),IF(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),1)" & _
        " =DATE(ANNEE(charge_mois!R1C" & j & " ),MOIS(charge_mois!R1C" & j & "),1), IF(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),charge_jour!R[-1]C[" & 6 - j - i & "],(DATEDIF(charge_jour!R[-1]C[" & 3 - j - i & "],DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & ")+1,1)-1,""d"")+1)*charge_jour!R[-1]C[" & 7 - j - i & "]),0)))"
        Next i
        Next j

        C'est sur qu'il est bien long!!!
        1. Pourquoi t'a 3 égal dans ta condition ? o_O
          "=IF(charge_jour!R[-1]C[" & 4 - j - i & "]="""",0,IF(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),DAY(charge_jour!R[-1]C[" & 3 - j - i & "]))<DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),IF(DATE(YEAR(charge_jour!R[-1]C[" & 4 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 4 - j - i & "]),DAY(charge_jour!R[-1]C[" & 4 - j - i & "]))<DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),0,IF(DATE(YEAR(charge_jour!R[-1]C[" & 4 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 4 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C " & j & "),MOIS(charge_mois!R1C " & j & "),1),(DATEDIF(DATE(ANNEE(charge_mois!R1C" & j & "),MOIS(charge_mois!R1C " & j & "),1),charge_jour!R[-1]C[" & 4 - j - i & "],""d"")+1)*charge_jour!R[-1]C[" & 7 - j - i & "],30*charge_jour!R[-1]C[" & 7 - j - i & "])),IF(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),1)" & _
          " =DATE(ANNEE(charge_mois!R1C" & j & " ),MOIS(charge_mois!R1C" & j & "),1), IF(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),charge_jour!R[-1]C[" & 6 - j - i & "],(DATEDIF(charge_jour!R[-1]C[" & 3 - j - i & "],DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & ")+1,1)-1,""d"")+1)*charge_jour!R[-1]C[" & 7 - j - i & "]),0)))"

          Deux OK, mais pourquoi trois ?
          Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre.
          1. Alors en fet le 1er c'est pour la 1ere condition, le 2eme pour une autre condition et le 3ème , encore pour une autre.
            Mais apres mon code n'est absolument pas optimisé..
            1. Bahhhh, là comme ça, j'avoue que j'suis un peu submergé, boulot boulot :D
              Essaye de faire trois variables :

              La même pour les deux autres, et après tu fais :
              For j = 10 To 126 Step 7
              For i = 0 To 5
              Condi1=""",0,IF(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),DAY(charge_jour!R[-1]C[" & 3 - j - i & "]))<DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),IF(DATE(YEAR(charge_jour!R[-1]C[" & 4 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 4 - j - i & "]),DAY(charge_jour!R[-1]C[" & 4 - j - i & "]))<DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),0,IF(DATE(YEAR(charge_jour!R[-1]C[" & 4 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 4 - j - i & "]),1)=
              Condi2= ......
              Condi3=DATE(ANNEE(charge_mois!R1C" & j & " ),MOIS(charge_mois!R1C" & j & "),1), F(DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1),charge_jour!R[-1]C[" & 6 - j - i & "],(DATEDIF(charge_jour!R[-1]C[" & 3 - j - i & "],DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & ")+1,1)-1,""d"")+1)*charge_jour!R[-1]C[" & 7 - j - i & "]),0)))"
              Cells(3, j + i).Select
              ActiveCell.FormulaR1C1 = _
              "=IF(charge_jour!R[-1]C[" & 4 - j - i & "]=Condi1 = Condi2=Condi3
              Next i
              Next j

              Essaye un truc dans ce genre là, enfin tu décomposes ta formule dans plusieurs variables qui changent à chaque boucle... enfin t'a compris l'idée quoi..

              Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre.
              1. Ecoute, je ne comprend rien! mdr
                Jvais revoir mon code et essayer de le simplifier, jpense que c'est ce qu'il ya de mieux a faire!
                En tout cas je te remercie pour ton aide
                1. Ok =)
                  J'te proposais juste de décomposer ta grosse formule en quelques parties que tu injectes dans des variables, histoire de pas te retrouver avec UNE grosse formule qui prends beaucoup de places mémoires. Tu sais c'est comme les calculettes , quand tu fais 10 sin(cos(tan(arctan(sin(cos(sin(23*sin(cos(e^sin(cos(3))))))))))) bah ça fait "Err Mem", enfin sauf les très grosses calculettes :D. A la place tu décomposes chaque partie du calcul dans une variable, et tu fais les calculs les uns après les autres, au lieu de tout faire d'un coup ! (comme tu l'a fais avec ton IF"
                  1. Alors le dénicheur, est ce que c'est ça que tu voulais que je fasse?
                    Aprés cela ne fonctionne pas, mais je ne savais pas comment déclarer mes conditions.
                    En fait, j'ai commencé vba au début de la semaine et je ne m'y connait pas trop.
                    Et j'essaye d'apprendre en enregistrant de macro et en voyant comment ca code derriere.
                    Voila pourquoi cette macro met les formules dans les cellules.
                    Donc Sur tes conseil lermite, je vais voir comment fonctionne les fonctions perso

                    For j = 10 To 126 Step 7
                    For i = 0 To 5
                    Condition1 = "charge_jour!R[-1]C[" & 4 - j - i & "]="""" "
                    Condition2 = "DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),DAY(charge_jour!R[-1]C[" & 3 - j - i & "]))<DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1)"
                    Condition3 = "DATE(YEAR(charge_jour!R[-1]C[" & 4 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 4 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C " & j & "),MOIS(charge_mois!R1C " & j & "),1)"
                    Condition4 = " DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour!R[-1]C[" & 3 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C" & j & " ),MOIS(charge_mois!R1C" & j & "),1)"
                    Condition5 = "DATE(YEAR(charge_jour!R[-1]C[" & 3 - j - i & "]),MONTH(charge_jour![-1]C[" & 3 - j - i & "]),1)=DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & "),1)"

                    Cells(3, j + i).Select
                    ActiveCell.FormulaR1C1 = _
                    "=IF(Condition1,0,IF(Condition2,0,IF(Condition3,(DATEDIF(DATE(ANNEE(charge_mois!R1C" & j & "),MOIS(charge_mois!R1C " & j & "),1),charge_jour!R[-1]C[" & 4 - j - i & "],""d"")+1)*charge_jour!R[-1]C[" & 7 - j - i & "],30*charge_jour!R[-1]C[" & 7 - j - i & "])),IF(Condition4, IF(Condition5,charge_jour!R[-1]C[" & 6 - j - i & "],(DATEDIF(charge_jour!R[-1]C[" & 3 - j - i & "],DATE(ANNEE(charge_mois!R1C" & j & "),MONTH(charge_mois!R1C" & j & ")+1,1)-1,""d"")+1)*charge_jour!R[-1]C[" & 7 - j - i & "]),0)))"
                    Next i
                    Next j