Bonjour.
J'aimerais intégrer une formule assez costaud dans une de mes macros mais la deuxième ligne de formule est en rouge.
http://www.casimages.com/img.php?i=1...4734493590.jpg
Avez-vous une explication?
Version imprimable
Bonjour.
J'aimerais intégrer une formule assez costaud dans une de mes macros mais la deuxième ligne de formule est en rouge.
http://www.casimages.com/img.php?i=1...4734493590.jpg
Avez-vous une explication?
Bonjour,
Pourquoi y a-t-il une 2e ligne ? Tu vas à la ligne juste avec le bouton entrée ?
Car si tel est le cas, ça ne fonctionne pas comme cela sur VBA, il faut faire "_" en bout de ligne précédé d'un espace, puis seulement après, aller à la ligne.
Sinon, il n'associe pas le début de formule à la 2e ligne (ou vice & versa ;)
A+
elise
Bonjour Elise, Merci pour ta réponse,
J'ai fait ce que tu m'as dit.
Malheureusement, j'ai toujours du texte en rouge.
code initial:
Code essayé après avoir lu votre astuce :Code:
1
2
3
4
5
6
7
8
9
10 Sub Macro5() ' ' Macro5 Macro ' ' ActiveCell.FormulaR1C1 = _ "=IF(RC[-1]=R[-1]C[-1],"""",IF(AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[7]C[-6])+(1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(R[3]C[-1]=RC[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(RC[-1]=R[ 1]C[-1],1/((1/R[1]C[-6])+(1/RC[-6])),RC[-6]))))))))" End Sub
Message = erreur de compilation, attendu fin d'instruction...Code:
1
2
3
4
5
6
7
8
9
10
11
12 Sub Macro5() ' ' Macro5 Macro ' ' ActiveCell.FormulaR1C1 = _ "=IF(RC[-1]=R[-1]C[-1],"""",IF(AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[7]C[-6])+(1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(R[3]C[-1]=RC[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _ "= IF(AND(RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(RC[-1]=R[ & _ " = 1]C[-1],1/((1/R[1]C[-6])+(1/RC[-6])),RC[-6]))))))))" Range("N8").Select End Sub
Où est le problème?
Effectivement, mauvaise explication de ma part, car il aurait fallu utiliser le & en début de ligne :
Mais cela ne résoud pas le pbl, il me dit qu'il n'y a pas assez de mémoire.Code:
1
2
3 ActiveCell.FormulaR1C1 = _ "=IF(RC[-1]=R[-1]C[-1],"""",IF(" _ & "AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1] .........
Mais je crois avoir déjà lu qu'il n'aimait pas les si imbriqués au-delà de 7 Si, et là, il y en a 8...
Sinon, je crios que ta formule correspond à celle-ci (qui aurait le mérite de ne pas imbriquer les "Si", mais de les justaposer...
Vois si cela te convient... Chez moi ça fonctionne (même si rouge ici... (??))
EliseCode:
1
2 ActiveCell.FormulaR1C1 = _ "=IF(R[1]C[-1]=RC[-1],"""",1/(IF(R[1]C[-1]=R[8]C[-1],1/R[8]C[-6],0)+IF(R[1]C[-1]=R[7]C[-1],1/R[7]C[-6],0)+IF(R[1]C[-1]=R[6]C[-1],1/R[6]C[-6],0)+IF(R[1]C[-1]=R[5]C[-1],1/R[5]C[-6],0)+IF(R[1]C[-1]=R[4]C[-1],1/R[4]C[-6],0)+IF(R[1]C[-1]=R[3]C[-1],1/R[3]C[-6],0)+IF(R[1]C[-1]=R[2]C[-1],1/R[2]C[-6],0)+(1/R[1]C[-6])))"
Bonsoir,
C'est le nombre de colonnes dans le VBE qui est limité donc il faut faire des retours à la ligne avec la combinaison espace tiret bas " _" et l'esperluette (&) pour concatener :
Hervé.Code:
1
2
3
4
5
6
7
8 ActiveCell.FormulaR1C1 = _ "=IF(RC[-1]=R[-1]C[-1],""""," & _ "IF(AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[7]C[-6])+(1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _ "IF(AND(RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _ "IF(AND(RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _ "IF(AND(RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(R[3]C[-1]=RC[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _ "IF(AND(RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(RC[-1]=R[1]C[-1],1/((1/R[1]C[-6])+(1/RC[-6])),RC[-6]))))))))"
Salut
Tu devrais expliquer ce que tu souhaites faire exactement, ta formule me semble bien longue. Il serait bien, à mon avis, de poser une question dans le forum Excel (pas vba-excel), pour demander s'il n'est pas possible de simplifier tout ça. Dans cette question, ne te contente pas de demander une simplification en mettant la formule en référence, explique bien ce qu'elle fait.
Vu la structure de ta formule, intéresse toi aux formules matricielles.
++
Qwaz
+1 avec Qwaz, quand on est à écrire des choses pareilles, il est temps de repenser sa méthode. C'est illisible et inmaintenable, même dans la version remise au propre par Theze
Bonjour tout le monde,
J'ai juste fait en sorte que Olivm puisse écrire sa formule dans le VBE, je n'ai même pas chercher à comprendre sa fonctionnalité. Se casser la tête avec des "FormulaR1C1", je préfère plutôt avec des Range("X" & I), plus compréhensible à mon goût.
Hervé.
Merci pour votre aide. J'ai posé une question précise sur la FORME vba et j'ai eu des réponses adéquates. Merci beaucoup.
J'ai donc utilisé la correction de Theze.
Qwaz, expliquer tout le cheminement qui m'a amené à là serait encore plus incompréhensible pour le lecteur et je ne veux pas envoyer le fichier par souci de confidentialité.
De plus, il s'agissait d'une question de forme.
Je penserai à m'interesser de plus près aux formules matricielles.
el_slapper, polémiquer sur ma méthode est inutile mais merci pour ton soutien dans mon travail ;-)
Désolé si j'ai été cassant, mais ce que je veux dire, c'est qu'un pâté comme ça, aussi justifié soit-il fonctionellement, ça amène assez vite plein de soucis, c'est tout.
Que tu aie rééllement besoin de faire un truc d'une complexité pareille est tout à fait possible(j'ai moi-même mis en place quelques algos de décision particulièrement complexes, pas de ce genre, mais pas franchement mieux). Simplement, une découpe en éléments plus simples me parait obligatoire, à terme, à la survie de ton code. Sans découpe, j'aurais mettre une bonne partie de mes algos à la poubelle. Avec, j'ai juste eu à rajouter une case de plus pour doubler le nombre de décisions possibles.
Parceque le jour ou tu dois modifiier ton code, tel qu'il est, crois-moi, tu vas souffrir. Horriblement. C'est juste ça que je veux dire, mon expérience sur plusieurs langages me fait fuir ce type d'écritures. Et ce jour, fatalement, arrivera. Ton travail semble sérieux, il ne sera pas jeté à la poubelle, donc il sera amené à évoluer. Et là, :aie: .