Probleme macro avec formula RC

Cacou 78 -  
 Cacou 78 -
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?
A voir également:

10 réponses

LeDénicheur Messages postés 624 Statut Membre 365
 
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
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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
Cacou 78
 
je viens d'essayer et cela marche parfaitement!

Je te remercie

@+
0
LeDénicheur Messages postés 624 Statut Membre 365
 
Derien =)
0
Cacou 78
 
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?
0
LeDénicheur Messages postés 624 Statut Membre 365
 
Fais voir le code ^^
0
Cacou 78
 
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!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LeDénicheur Messages postés 624 Statut Membre 365
 
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.
0
Cacou 78
 
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é..
0
LeDénicheur Messages postés 624 Statut Membre 365
 
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.
0
Cacou 78
 
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
0
LeDénicheur Messages postés 624 Statut Membre 365
 
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"
0
Cacou 78
 
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
0