Formule trop longue

dieu08

XLDnaute Occasionnel
Bonjour,

Impossible de me sortir de ce problème récurrent avec les formules longues qui ne veulent pas passer dans les codes VBA.

Formule souhaitée au final :

=SI(ET(C2=C3;OU(L2="RFI Activité (Financement sur fonds Etat)";L2="RFI socle (financement sur fonds Conseil Général");OU(L3="RFI socle (financement sur fonds Conseil Général";L3="RFI Activité (Financement sur fonds Etat)"));"comb1";SI(ET(C2=C3;OU(L2="RFI Socle majoré(financement sur Conseil Général)";L2="RFI Activité majoré (Financement sur fonds Etat)");OU(L3="RFI Socle majoré(financement sur Conseil Général)";L3="RFI Activité majoré (Financement sur fonds Etat)"));"comb2";""))

J'ai essayé ceci pour contourner le problème :

Sub Macro1()

Worksheets("test").Activate
Cells(1, 1).Value = "XX" & "dum01" & "dum02" & "dum03" & "dum04" & "dum05" & "dum06" & "dum07" & "dum08" & "dum09" & "dum10" & "dum11" & "dum12" & "dum13" & "dum14" & "dum15" & "dum16" & "dum17" & "dum18" & "dum19"


dum01 = "SI(ET(C2=C3;OU(L2="
dum02 = """RFI Activité (Financement sur fonds Etat)"""
dum03 = ";L2=" & """RFI socle (financement sur fonds Conseil Général"""
dum04 = ");OU(L3="
dum05 = """RFI socle (financement sur fonds Conseil Général"""
dum06 = ";L3=" & """RFI Activité (Financement sur fonds Etat)"""
dum07 = "));"
dum08 = """comb1"""
dum09 = ";SI(ET(C2=C3;OU(L2="
dum10 = """RFI Socle majoré(financement sur Conseil Général)"""
dum11 = ";L2="
dum12 = """RFI Activité majoré (Financement sur fonds Etat)"""
dum13 = ");OU(L3="
dum14 = """RFI Socle majoré(financement sur Conseil Général)"""
dum15 = ";L3="
dum16 = """RFI Activité majoré (Financement sur fonds Etat)"""
dum17 = "));"
dum18 = """comb2"""
dum19 = ";""""))"

Cells.Replace What:="dum01", Replacement:=dum01, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum02", Replacement:=dum02, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum03", Replacement:=dum03, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum04", Replacement:=dum04, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum05", Replacement:=dum05, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum06", Replacement:=dum06, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum07", Replacement:=dum07, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum08", Replacement:=dum08, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum09", Replacement:=dum09, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum10", Replacement:=dum10, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum11", Replacement:=dum11, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum12", Replacement:=dum12, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum13", Replacement:=dum13, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum14", Replacement:=dum14, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum15", Replacement:=dum15, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum16", Replacement:=dum16, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum17", Replacement:=dum17, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum18", Replacement:=dum18, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Cells.Replace What:="dum19", Replacement:=dum19, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False


Cells.Replace What:="XX", Replacement:="=", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

End Sub

Impossible de remplacer le "XX" par un "=" pour que le contenu de la cellule devienne une formule à part entière.

Des suggestions ? Merci.

dieu08
 

Efgé

XLDnaute Barbatruc
Re : Formule trop longue

Bonjour dieu08,
Pas sur d'avoir compris, mais en utilisant FormulaLocal et en doublant les " dans la formule:
Code:
Range("A1").FormulaLocal = "=SI(ET(C2=C3;OU(L2=""RFI Activité (Financement sur fonds Etat)"";L2=""RFI socle (financement sur fonds Conseil Général"");OU(L3=""RFI socle (financement sur fonds Conseil Général"";L3=""RFI Activité (Financement sur fonds Etat)""));""comb1"";SI(ET(C2=C3;OU(L2=""RFI Socle majoré(financement sur Conseil Général)"";L2=""RFI Activité majoré (Financement sur fonds Etat)"");OU(L3=""RFI Socle majoré(financement sur Conseil Général)"";L3=""RFI Activité majoré (Financement sur fonds Etat)""));""comb2"";""""))"
Cordialement
 

Efgé

XLDnaute Barbatruc
Re : Formule trop longue

Re
La commande FormulaLocal permet "d'écrire" la formule à l'identique d'une formule courante dans la feuille:
Exemple en A1:
Code:
Range("A1").FormulaLocal = "=B1+C1"

La fonction FormulaR1C1 utilise les référence RC (Row, Column):
Code:
Range("A1").FormulaR1C1 = =RC[+1] + RC[+2]"

Je ne suis pas un Fan des formule en RC :).
Cordialement
 

tototiti2008

XLDnaute Barbatruc
Re : Formule trop longue

Bonjour à tous,

Une remarque en passant : il y a aussi Formula tout court

FormulaLocal permet de taper la formule en "français" mais ne fonctionnera que sur un Excel français

exemple

Code:
Range("A1").FormulaLocal = "=SI(B1=0;5;B2+1,5)"

équivaut à

Code:
Range("A1").Formula = "=IF(B1=0,5,B2+1.5)"

qui fonctionnera sur toutes les langues d'Excel

Je ne suis pas un Fan des formule en RC :).

Eh bien c'est un tort ;) : Elles ont un avantage non négligeable sur les formules en "A1" : elles permettent un adressage relatif sans dépendance de l'endroit où on les met

en reprenant le même exemple de formule, en R1C1 ça devrait donner

Code:
Range("A1").FormulaR1C1 = "=IF(RC[1]=0,5,R[1]C[1]+1.5)"

Si maintenant on avait envie de "recopier" ces formules de A1 à A5, pour les exemples en Formula et FormulaLocal on est obligé d'utiliser des "Autofill", pas toujours commode
Avec une formule en RC, c'est beaucoup plus simple :

Code:
Range("[COLOR=red]A1:A5[/COLOR]").FormulaR1C1 = "=IF(RC[1]=0,5,R[1]C[1]+1.5)"

Bon, désolé si j'ai pris la tête mais moi je trouve que ça peut avoir son importance ;)
 

Efgé

XLDnaute Barbatruc
Re : Formule trop longue

Bonjour au fil, au forum,
Juste pour suivre l'interressant Post de Tototiti,
Il est exacte que pour "l'exportaion", FormulaLocal n'est pas le meilleur choix :D.
Par contre pour la recopie, Formula et FormulaLocal vont trés bien sans AutoFill (en tous cas après tests sous 2007):
Code:
[COLOR=blue]Sub[/COLOR] test()
Range("A1:A5").Formula = "=IF(B1=0,5,B2+1.5)"
[COLOR=blue]End Sub[/COLOR]

Code:
[COLOR=blue]Sub[/COLOR] test2()
Range("A1:B5").Formula = "=IF(C1=0,5,C2+1.5)"
[COLOR=blue]End Sub[/COLOR]

En tous cas, merci de ces précisions.
Cordialement
 

tototiti2008

XLDnaute Barbatruc
Re : Formule trop longue

Re,

Juste pour suivre l'interressant Post de Tototiti,

Merci, j'avais peur que ce soit barbant ;)

Par contre pour la recopie, Formula et FormulaLocal vont trés bien sans AutoFill

Alors là, un point pour toi, je n'avais jamais remarqué ça ;)

Pour pinailler (ma spécialité), je dirais que la formule en RC a quand même un petit avantage : elle ne change pas même si on veut la mettre en colonne C par exemple, elle pointera toujours sur des cellules de la colonne suivante (dans l'exemple)
Quoique, est-ce vraiment un "avantage" ?
 

Discussions similaires

Réponses
1
Affichages
126

Statistiques des forums

Discussions
312 215
Messages
2 086 316
Membres
103 176
dernier inscrit
jean.yvesjean.yves